Iriton's log
[Dreamhack/Wargame] Lv.1 crsf-1 본문
문제 페이지 분석
vuln(csrf) page (/vuln?param=<script>alert(1)</script>)
파라미터 값을 출력한다.
memo(/memo?memo=hello)
접속할 때마다 hello를 누적해서 출력한다.
notice flag (/admin/notice_flag)
admin 권한이 없어서 flag값을 보지 못한다.
flag(/flag)
여기서 취약점 공격을 해야 되나 보다.
코드를 살펴 보자.
코드 분석
admin_notice_flag 함수 분석
89, 91) 조건문으로 localhost 환경이 아니라면 Access Denied를 userid가 admin이 아니라면 Access Denied2를 띄운다.
93) memo_text에 flag를 추가한다.
memo_text라는 이름의 전역 변수를 사용하는 /memo로 가보자.
memo 함수 분석
memo 값을 추가한 memo_text 값을 render_template 함수의 인자로 전달한다.
*render_template 함수는 flask에서 제공하는 함수로, template에 저장된 html file을 불러온다.
flag 함수 분석
csrf page를 localhost 환경으로 접속하는 페이지이다.
위 코드는 session 문제 풀이에서 분석한 코드니까 넘어갈 것이다.
흐름을 읽어 보니 대충 감이 온다.
flag 함수에서 localhost 환경에 접속하는 함수(check_csrf -> read_url)를 호출한다.
즉, flag 페이지를 이용해서 localhost 환경에 접속하면 admin_notice_flag의 함수 조건문에 걸리지 않는다.
그리고 flag를 memo에 추가하면 되지 않을까?
파라미터 값에 userid를 admin으로 지정해 주면 된다.
notice flag에 접근하기 위해서 img 태그의 src 속성을 이용하자.
이미지를 불러오는 시도를 하면서 해당 경로 접근하여 userid를 변조하고, 결국엔 flag를 memo에 띄우는 원리이다.
<img src=/admin/notice_flag?userid=admin>
입력하고 memo를 확인해 보자.
해결!
'WebHacking > WarGame' 카테고리의 다른 글
[Dreamhack/Wargame] Lv.1 [wargame.kr] login filtering (0) | 2023.04.12 |
---|---|
[Dreamhack/Wargame] Lv.1 crsf-2 (0) | 2023.04.11 |
[Dreamhack/Wargame] Lv.1 image-storage (0) | 2023.04.10 |
[Dreamhack/Wargame] Lv.1 command-injection-1 (0) | 2023.04.10 |
[Dreamhack/Wargame] Lv.1 xss-2 (0) | 2023.04.10 |