본문으로 바로가기

xss-2 문제풀이

category 모의해킹/Dreamhack Wargame 2025. 10. 29. 17:49
728x90

문제 설명

 

여러 기능과 입력받은 URL을 확인하는 봇이 구현된 서비스입니다.
XSS 취약점을 이용해 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다.

플래그 형식은 DH{...} 입니다.


Write up

 

오.. 문제 페이지가 xss-1 문제랑 똑같이 생겼다.

memo 페이지에 hello가 누적되어 쌓이는 것 까지 똑같이 구현되어 있다.

그럼 코드에서는 어떤 차이점이 있는지 봐야겠다.

 

일단 사용자 입력에 대한 검증을 진행하지 않는 건 확인되었고,

 

name이 flag인 쿠키의 value 값이 우리가 출력해야할 flag인 것도 확인했다.

 

코드에서 달라진 부분을 찾았다!

/vuln 페이지에서 param값을 리턴해주지 않는다.

xss-1 문제에서는 생성되는 /vuln의 url이 param 값을 그대로 리턴하기 때문에 그 리턴값을 /memo창에 출력하도록 했는데, 이제는 그게 막혔다.

 

대신 vuln.html을 리턴하니 html을 살펴봐야겠다.

 

vuln url의 쿼리스트링을 파싱하고, innerHTML에 x.get('param')을 그대로 넣는다.

 

innerHTML은 DOM 객체의 속성으로, 그 요소 내부의 HTML마크업 전체 문자열을 가져오거나 설정할 수 있다.

태그가 해석되고 요소가 생성되는 것이니, 외부로부터 받은 문자열을 innerHTML에 넣어버리면 그대로 실행시킬 수 있는 것이다.

취약점 발견! JS xss 스크립트 생성 준비 완료!

 

<img src="" onerror="location.href = '/memo?memo=' + document.cookie">

onerror는 img src의 로드를 실패했을 때 브라우저가 실행하는 인라인 이벤트 핸들러이다.

따라서 src에 빈 문자열을 삽입해 실패를 유도하고, cookie를 가져와 memo페이지로 이동하는 코드를 작성했다.

쨘. 이렇게 또 한 문제를 해결했다.

'모의해킹 > Dreamhack Wargame' 카테고리의 다른 글

command-injection-chat gpt 문제 풀이  (0) 2025.11.11
error based sql injection 문제 풀이  (0) 2025.11.03
simple_sqli 문제 풀이  (0) 2025.10.28
xss-1 문제풀이  (0) 2025.10.27
session-basic 문제풀이  (0) 2025.10.24