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