보상이 걸린 질문
질문에 답변을 달고 보상을 받아가세요!
문제코드
import secrets
from flask import Flask, request, render_template
from flask_cors import CORS
import requests
import func as F
app = Flask(name)
CORS(app)
app.secret_key = secrets.token_hex(32)
try:
FLAG = open("./flag.txt", "r", encoding="utf-8").read().strip()
except:
FLAG = "[FLAG]"
accounts = {"test": "1234", "admin": FLAG}
logging.getLogger('flask_cors').level = logging.DEBUG
open("log.txt", "w", encoding="utf-8").close()
file_handler = logging.FileHandler("log.txt", encoding="utf-8")
file_handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(levelname)s:%(name)s:%(message)s')
file_handler.setFormatter(formatter)
root_logger = logging.getLogger()
root_logger.setLevel(logging.DEBUG)
root_logger.addHandler(file_handler)
@app.route("/")
def home():
return render_template("index.html")
@app.route("/login", methods=["GET"])
def login():
username = request.args.get("username")
password = request.args.get("password")
if username in accounts and accounts[username] == password:
logging.debug(f"\nuser={username}")
return "로그인 성공!"
else:
return "로그인 실패"
@app.route("/logout", methods=["GET"])
def logout():
user = F.get_login_user()
if user:
logging.debug(f"user={user} logged out")
logging.debug("\nuser=None")
return f"{user} 로그아웃 성공!"
else:
return "로그인 상태가 아닙니다."
@app.route("/whoami", methods=["GET"])
def whoami():
user = F.get_login_user()
return user if user else "로그인 안됨"
@app.route('/calc', methods=['GET'])
def calc_proxy():
user = F.get_login_user()
if user != 'admin':
return 'Get admin account', 403
text = request.args.get('text')
allowed_chars = "0123456789+-*/"
if not all(char in allowed_chars for char in text):
return 'Do not cheat!!!', 503
try:
response = requests.get(
url=f'http://php_app:5000/?{request.query_string.decode()}',
timeout=10
)
return str(eval(response.text, {'builtins': {}}))
except:
return 'PHP 서버 연결 실패', 503
if name == "main":
app.run(host="0.0.0.0", port=8000, threaded=True)
func.py
def get_login_user():
try:
with open("log.txt", "r", encoding="utf-8") as f:
for line in reversed(f.readlines()):
line = line.strip()
if line.startswith("user="):
username = line[len("user="):].strip()
if username=="None":
return None
return username
except FileNotFoundError:
return None
return None
제가 지금 알아낸걸로는 f-string쪽에서 \n을 통한 개행이 가능한단 것과 whoami나 logout calc가 log의 마지막 user로 로그가 찍혀 있는걸로 검증을 하는거까지는 알아냈습니다 그리고 clac 부분에서 text 파라미터만 검사를 하는 취약점까진 발견했습니다 그러나 로그인 부분에서 \n을 넣어서 개행을 통해서 로그 인젝션을 시도해봤으나 비교문에서 개행문자들까지 같이 비교가 되서 실패했습니다 이 풀이 방법이 맞나요? 그리고 비교문을 어떻게 우회해야 할까요?? 답보다는 힌트를 주셨으면 좋겠습니다
안녕하세요, 최근 시스템해킹을 공부하고 있는 대학생입니다.
다름이 아니라, 시스템해킹 공부 시 워게임을 풀 때,
워게임의 환경과 동일한 환경에서 진행해야 원활히 문제가 풀리는 것으로 알고 있습니다.
일반적으로 도커파일이 주어지던데, 도커파일 내에 기초적인 패키지가 실려있지 않아
현재로서는 매번 python, vim, pwngdb 같은 패키지를 다운해주고 있는 상황입니다.
개인적인 생각으로는 매번 다운로드하지 않아도 실행될 수 있게 할 수 있는 방법이 분명 존재할 것으로 예상되는데,
고수 여러분들은 어떻게 이 문제를 해결하셨는지 궁금합니다!!!!
저를 꼭 도와주셨으면 합니다
감사합니다.
커뮤니티 최신글
🚗 [취업률 80% 이상] 새싹 AI 자율주행 실무 완성 교육생 모집!
[0]
1515
정보보안학과 학생 해외취업 질문 드립니다~
[0]
1547
[Microsoft] MS 사이버 시큐리티 스쿨
[0]
1834
[KISA] 실전형 사이버훈련장 침해사고 대응 훈련 4월 과정 모집 ❗
[0]
3809
내배카없이 매월 80만원 교육지원금? S-개발자 3기 2차 교육생 모집!
[0]
2954
보안 직군에 취업하려면 어떤 것이 중요한가요?
[1]
3294
[KISA] 실전형 사이버훈련장 침해사고 대응 훈련 3월 과정 모집 ❗
[0]
2862
티오리 해커들은 해킹 공부 몇시간씩 했을까요?? - 티오리 해커 24명이 알려주는 해킹 공부 루틴 🎓
[0]
1036
나에게 맞는 해킹 분야는 어떻게 찾을까요? (대표적인 해킹 분야, 성향별 추천)
[0]
770
💬 친구들이랑 드림핵 계정 하나를 공유해도 되나요? - 구독 관련 질문 답변 모음
[0]
805
드림핵 구독 무료 vs 유료, 뭐가 좋을까요?
[0]
902
👾 옵치 솜브라 해킹, 현실에서도 가능한걸까? ☠️아빠 썬글라스 뿌세쓰!
[0]
738
🏆 공식 한국인 첫 Pwnie Awards 수상자가, 드림핵으로 해킹을 시작했다고!?
[1]
1084
💻 해킹 부트캠프가 좋아요? 학원이 좋아요? (나에게 맞는 학습 플랫폼은?)
[0]
1369
[채용연계형 CTF] 2026 GMDSOFT CTF 참가자 모집
[0]
671
[이스트소프트 KDT] 가디언즈 인프라 보안 과정 10기
[0]
74
🎊 .HACK Conference 2026 - TICKET OPEN!! 🎊
[0]
102
초보자 대환영! 제2회 스트로베리 CTF가 2월 28일 개최됩니다.
[0]
223
[ RewriteLab ] Damn Vulnerable Web 워게임 런칭 안내
[0]
132
빡공팟 웹/시스템해킹,리버싱 16기 | 개인정보보호,하드웨어해킹 2기 모집
[0]
149
📌 𝟑𝟐𝒕𝒉 𝑯𝒂𝒄𝒌𝒊𝒏𝒈𝑪𝒂𝒎𝒑 ☠️ | 발표자 라인업 & 일정표
[0]
180
