이 문제는 Dreamhack 플랫폼에서 제공하는 Web Hacking 문제 중 하나로,
주어진 웹 애플리케이션을 분석하여 내부의 FLAG를 획득하는 것이 목표다.
Dreamhack이 제공한 서버 코드 app.py 는 다음과 같이 구성된다.
/report 페이지
@app.route("/report", methods=["GET", "POST"])
def report():
...
if access_page(name, detail):
return render_template("report.html", message="Success")
이때 access_page()는 Selenium을 이용해 특정 URL을 접속하는 함수다.
def access_page(name, detail):
...
driver.get(f"<http://127.0.0.1:8000/intro?name={quote(name)}&detail={quote(detail)}>")
즉, 사용자가 /report에 제출한 path 값은 내부적으로 파싱되어 name과 detail로 분리되고,
Selenium은 이 두 값을 포함한 /intro 경로에 Authorization 헤더를 붙인 채 접속하게 된다.
driver.execute_cdp_cmd(
'Network.setExtraHTTPHeaders',
{'headers': {'Authorization': f'Basic {encoded_user_info}'}}
)
Authorization 헤더에는 다음과 같은 형태의 값이 포함된다.
Authorization: Basic base64(admin:<환경변수에 저장된 PASSWORD>)
/whoami 페이지