반응형
Topic: Flask
분야: Web
난이도: Medium
Please login! I won't tell you the password tho!
코드분석
@app.post("/login")
def login():
username = request.form.get("username", "")
password = request.form.get("password", "")
if username[0] not in "aA" or username[1:] != "dmin" or password != "**REDACTED**":
return render_template("login.html", error="You are not Admin"), 401
return render_template("flag.html", flag=FLAG)
- username과 password를 입력받음
- username의 첫 번째 자리가 a나A가 아니거나 그 뒤가 dmin이 아니거나 password가 맞지 않으면 "Your are not Admin"이 렌더링
즉, 즉 username은 admin이 나 Admin이 고정임
if __name__ == "__main__":
app.run(host="0.0.0.0", port=3000, debug=True)
- debug=true로 디버거 모드로 실행
취약점 분석
- 디버그 모드 노출
예외 처리를 하지 않아 예외 발생 시 디버그 페이지 제공 - 하드코딩 비밀값
민감한 내용을 코드에 직접 작성 = 디버그, 로그, 예외 출력 등 여러 경로로 유출될 가능성
익스플로잇
먼저 로그인 페이지에서 admin : 12345를 입력해봄

디버거 모드로 진입하기 위해 다음과 같은 페이로드를 작성해 줌
username=&password=1234

디버거 페이지가 출력되는 것을 확인할 수 있음.
따라서 아까 코드분석에서 username과 password 조건을 확인해보면

하드코딩 된 password가 출력되는 것을 확인할 수 있다.

반응형
'Alpacahack' 카테고리의 다른 글
| You are being redirected (0) | 2026.02.16 |
|---|---|
| Inu Profile (0) | 2026.02.11 |
| Xmas Login (0) | 2026.02.06 |
| Magic Engine (0) | 2026.02.05 |
| Alpacahack: No JS (0) | 2026.02.01 |