문제 설명
여러 기능과 입력받은 URL을 확인하는 봇이 구현된 서비스입니다.
CSRF 취약점을 이용해 플래그를 획득하세요.
*참고 사항 : 이번 문제는 Dreamhack 학습의 Web Hacking의 Cross-site Request Forgery (CSRF) 파트를 읽으면서 풀었다.
코드 분석
vuln : 이용자가 전달한 param 값 출력. XSS 공격 방지를 위해 키워드가(frame, script, on) 필터링 되어있다.
memo : 이용자가 전달한 memo 값 기록, render_template 통해 출력한다.
flag : GET - 입력받는 페이지 제공 / POST - check_csrf 함수 호출, check_csrf 함수는 read_url 함수 호출.
admin/notice_flag : 로컬호스트(127.0.0.1)에서 접근, userid="admin" 조건을 충족해야 flag 값 획득 가능. IP 주소 조작은 불가능하다.
*로컬호스트 : 자기 자신의 컴퓨터
vuln 이용 -> frame, script, on은 필터링 됐지만 <>는 되지 않았으므로 CSRF 공격을 이용할 수 있다. 즉, img 태그를 이용해 풀 수 있다는 것.
<img src="/admin/notice_flag?userid=admin">
1. 로컬호스트에 위치하는 이용자가 /admin/notice_flag 페이지를 방문해야 하며
2. userid="admin"이란 조건을 충족해야 하니
위와 같은 코드를 param에 넣어주면 된다.
그러면 플래그 값이 나온다.
개인 공부 목적으로 작성된 글이며, 틀린 정보나 해석이 있을 수 있음.
https://dreamhack.io/wargame/challenges/26/
csrf-1
여러 기능과 입력받은 URL을 확인하는 봇이 구현된 서비스입니다. CSRF 취약점을 이용해 플래그를 획득하세요. 문제 수정 내역 2023.07.18 css, html 제공 및 read_url() 코드 일부가 변경되었습니다. Referen
dreamhack.io
'소학회 > 워게임' 카테고리의 다른 글
[web]Dreamhack_simplesqli (0) | 2025.03.25 |
---|---|
[web]Dreamhack_csrf-2 (0) | 2025.02.04 |
[web]Dreamhack_xss-2 (0) | 2025.01.28 |
[web]Dreamhack_xss-1 (0) | 2025.01.28 |
[web]Dreamhack_session-basic (0) | 2025.01.21 |