문제 설명
여러 기능과 입력받은 URL을 확인하는 봇이 구현된 서비스입니다.
XSS 취약점을 이용해 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다.
플래그 형식은 DH{...} 입니다.
Write up
이건 첫번째 레슨 일단 페이지 뒤져보기




페이지 하나씩을 다 들어가보니, 마지막 페이지에 제출하는 칸이 있는 걸 확인했다.
이제 두번째 레슨 코드 뒤져보기

read_url 함수는 인자로 url과 cookie를 받아온다.
받아온 cookie에 domain 키를 강제로 127.0.0.1로 설정하고, 크롬드라이버 바이너리 경로를 /chormedriver로 지정하고 브라우저 옵션 객체를 생성한다. 그리고 쿠키를 현재 도메인에 삽입한 후 최종 목적지(url)로 이동한다.
이 함수는 브라우저 자동화 함수로, 특정 도메인에 쿠키를 삽입한 뒤 그 상태로 페이지를 열어주는 함수다.

chek_xss 함수는 param을 url인코딩하고 해당 url로 리턴해준다.
딱히 xss를 판별해주지 않는데 함수 이름이 왜저런가 싶다.

/에서는 렌더링 템플릿을 보여주고, /vuln은 param을 그대로 가져와 가져와 리턴한다.
/flag를 보면, 여기서 check_xss함수를 사용하는 것이 보인다
사용자가 제출한 param을 받으며, check_xss함수의 url에 flag 이름의 쿠키를 주입한다. 그럼 check_xss함수는 받은 param과 cookie로 url을 생성하고 헤드리스 크롬으로 접속한다.
실패하면 alert으로 wrong??이, 성공하면 good이 출력된다.
마지막으로 /memo에서는 전역 문자열 memo_text에 ?memo=.. 값을 줄바꿈과 함께 누적 저장한다. (memo 페이지에 들락날락하면 hello 문자열이 점점 쌓이는 것을 볼 수 있다.)
그니까 사용자가 param을 제출하면, check_xss함수가 param값을 받고 read_url함수가 flag 쿠키를 삽입한 뒤 url을 생성한다.
이때 생성되는 url /vuln페이지는 param값을 그대로 응답 본문으로 반환한다.
/memo에서 memo값을 그대로 출력해서 보여주니까, /memo페이지에서 flag를 출력하도록 하면 되겠다!
우리가 구해야하는 Flag는 name이 flag인 쿠키의 value값이니 flag쿠키의 vlaue값을 가져오는 페이로드를 작성해보자.

param값에 <script>fetch('/memo?memo='+document.cookie)</script>를 작성해보았다.
param에 뭘 작성하든 flag의 cookie가 삽입되니까, 그 상태로 cookie를 가져오는 http 요청을 작성했다.
이 요청은 이제 /memo로 보내지고, 서버는 이 값을 memo_text에 누적하며, 사용자가 /memo에 접속하면 flag가 보이게 될 것이다.

url이 성공적으로 생성되었다는 요청을 받고,

memo에 접속하면 flag가 보인다. 끗!
'모의해킹 > Dreamhack Wargame' 카테고리의 다른 글
| xss-2 문제풀이 (0) | 2025.10.29 |
|---|---|
| simple_sqli 문제 풀이 (0) | 2025.10.28 |
| session-basic 문제풀이 (0) | 2025.10.24 |
| ROT128 문제풀이 (0) | 2025.10.22 |
| baby-bof 문제풀이 (0) | 2025.06.19 |