-
Dreamhack - CSRF Advancedwargame/Dreamhack 2026. 1. 2. 08:31
[LEVEL 1 - CSRF Advanced - web]

문제 환경에 접속하면 위와 같은 웹페이지가 나온다.

먼저 문제 파일 다운로드를 통해 얻은 app.py를 살펴보자.

index()를 보아, admin으로 로그인하면 플래그값을 볼 수 있을 것이다.
vuln()를 보아, 대소문자 우회를 막는 필터링까지 하고 있는 것을 알 수 있다. 하지만 img 태그에 대한 필터링은 없다.
flag()를 보아, good이 나와야 한다.
login()를 보아, 로그인에 성공하면 세션과 csrf 토큰이 주어질 것이다. 그런데 csrf 토큰이 일회성도 아니고, 어떻게 만들어지는지 쉽게 알 수 있다.
change_password()를 보아, csrf 토큰값과 바꾸려는 비밀번호를 같이 넣으면 admin의 비밀번호를 바꿀 수 있다.

앞서 login()에서 확인한 코드를 바탕으로 위와 같이 파이썬 코드를 짜고 test.py로 저장한다.
이때 username은 admin으로 하고, remote_addr은 앞서 read_url()에서 확인한 서버의 로컬 ip 주소를 넣는다.
이 test.py를 실행하면 csrf 토큰이 출력되는 것을 볼 수 있다.

이제 flag 페이지로 이동 후, 비밀번호를 123으로(아무거나) 변경하기 위해 아래와 같이 img 태그로 작성하고 제출 버튼을 누른다.
<img src="/change_password?pw=123&csrftoken=7505b9c72ab4aa94b1a4ed7b207b67fb">
그러면 good이 뜬다.

이제 login 페이지로 와서 username에 admin, password에 123을 입력 후 로그인 버튼을 누른다.

admin으로 로그인에 성공했고, 플래그값을 확인할 수 있다.
플래그를 획득했다!
'wargame > Dreamhack' 카테고리의 다른 글
Dreamhack - baby-union (1) 2025.06.15 Dreamhack - what-is-my-ip (0) 2025.05.04 Dreamhack - Type c-j (2) 2025.05.04 Dreamhack - out of money (0) 2025.04.27 Dreamhack - command-injection-chatgpt (0) 2025.04.27