본문으로 바로가기

xss-1 문제풀이

category 모의해킹/Dreamhack Wargame 2025. 10. 27. 20:06
728x90

문제 설명

 

여러 기능과 입력받은 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