문제의 화면이다. 기존의 xss-2에서 notice flag 링크가 추가되어있다.
@app.route("/admin/notice_flag") // 페이지 정의
def admin_notice_flag():
global memo_text
if request.remote_addr != "127.0.0.1": // 접속ip가 로컬이어야함
return "Access Denied"
if request.args.get("userid", "") != "admin": // userid 파라미터 값이 admin이어야 함
return "Access Denied 2"
memo_text += f"[Notice] flag is {FLAG}\n" // 메모 페이지에 flag 출력
return "Ok"
admin_notice_flag( ) 함수에 flag가 존재하고 로컬, admin의 조건이 있어야 flag획득이 가능하다. read_url 함수의 드라이버를 이용하여 로컬 호스트로 /admin/notice_flag에 요청(csrf)을 보내야한다.
@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
xss 발현이 되었던 /vuln 페이지는 일부 문자열로 xss 필터링 되어있다.
vuln 페이지 [ csrf 취약점이 존재함 ] -> flag 페이지 [ 로컬 ip로 접속하기 위함 ] -> read_url 함수 [ 로컬호스트로 url 접속 ] -> notice_flag 페이지 [ memo_text 에 flag 값 추가 ] -> memo 페이지 [ flag 확인 ] 이와 같은 순서로 flag 값을 출력해야 하며 vuln 페이지에서는 일부 문자열을 *으로 replace 하기에 올바른 구문을 입력해야 한다.
flag 페이지에 <img src="/admin/notice_flag?userid=admin"></img> 를 입력하면 memo 페이지에 flag가 출력된다.
'웹 > 웹 해킹 문제 풀이' 카테고리의 다른 글
Stage #2 (0) | 2024.06.03 |
---|---|
Stage #1 (0) | 2024.06.03 |
dreamhack [ xss-2 ] (0) | 2024.05.09 |
dreamhack [ xss-1 ] (0) | 2024.05.09 |
webhacking.kr 11번 (0) | 2023.08.04 |