[DreamHack] [Web] Are you admin?

이 문제는 Dreamhack 플랫폼에서 제공하는 Web Hacking 문제 중 하나로,

주어진 웹 애플리케이션을 분석하여 내부의 FLAG를 획득하는 것이 목표다.

문제 구조 분석

Dreamhack이 제공한 서버 코드 app.py 는 다음과 같이 구성된다.

/report 페이지

image.png

@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 값은 내부적으로 파싱되어 namedetail로 분리되고,

Selenium은 이 두 값을 포함한 /intro 경로에 Authorization 헤더를 붙인 채 접속하게 된다.

driver.execute_cdp_cmd(
    'Network.setExtraHTTPHeaders',
    {'headers': {'Authorization': f'Basic {encoded_user_info}'}}
)

Authorization 헤더에는 다음과 같은 형태의 값이 포함된다.

Authorization: Basic base64(admin:<환경변수에 저장된 PASSWORD>)

/whoami 페이지

image.png