우선 접속 페이지로 들어가 본다.
세개의 링크가 있는 웹 페이지 이다.
하나씩 들어가서 확인해본다.
vuln 페이지의 경우 param으로 스크립트를 받는데 작동을 하는 것으로 보아 xss가 가능하다.
다른 값을 넣어봐도 작동을 한다.
이후 memo 페이지로 들어가 보면
hello라는 문구가 적혀있다. 새로고침을 하거나 다시 memo페이지에 들어가게 되면
hello가 하나 더 생긴다.
url을 보면 memo 페이지에서 memo라는 이름으로 hello값을 갖고 있다.
혹시나 해서 스크립트를 넣어보면
실행되지 않고 그대로 출력되어 버린다.
따라서 memo페이지에는 xss를 사용할 수 없다.
다음으로 flag 페이지에 들어가 본다.
이런 form이 있다. 아무 값이나 넣어서 제출을 해보면
그냥 good이라는 알림이 뜬다.
근데 작성되어 있는 url의 형태를 보니 127.0.0.1에 8000번 포트를 이용해서 접근하는데 뒷부분의 형태가 vuln?params=이다. 127.0.0.1은 자기 자신을 의미 하므로 form에 입력하는 값을 params로 이용하여 vuln 페이지에 전달해 준다고 생각할 수 있다.
문제 파일을 열어보면
flag함수에서 입력값을 param이라는 변수로 받고 check_xss 함수에 flag 값과 함께 넘겨주는 것을 볼 수 있다.
check_xss 함수를 보면 params와 함께 전달받은 딕셔너리를 쿠키값으로 이용하여 read_url함수로 넘겨줌을 알 수 있다.
참고로 urllib.parse.quote()가 의미 하는 것은 인자로 주어진 문자열에서 특수문자를 문자열로 변환하여 반환해준다는 뜻이다.
형식은 urllib.parse.quote(string, safe, encoding, error)이며
각각 인자, 반환하지 않을 문자 (기본: "/"), 인코딩 방식 (기본:UTF-8), 에러 처리 방식 (기본: strict)이다.
마지막으로 read_url 함수를 보면 add_cookie라는 함수를 사용해 전달받은 cookie 딕셔너리를 쿠키값으로 사용한다는 것을 볼 수 있다. 따라서 이 쿠키 값을 알아낸다면 FLAG 값을 찾을 수 있다.
flag 페이지에서 입력한 값이 vuln 페이지로 이동하므로 flag페이지에 적절한 스크립트를 입력한다면 vuln페이지에서 해당 스크립트가 실행 될 것이다. memo 페이지는 전달받은 인자를 페이지에 작성하므로 FLAG 값을 memo 페이지에 전달 한다면 memo페이지에서 flag값을 확인할 수 있을 것이다.
즉, flag페이지에서 스크립트 작성 > vuln 페이지에서 실행 및 쿠키 값 memo로 전달 > memo 페이지에서 확인의 순서가 될 것이다.
<script>location.href="/memo?memo="+document.cookie</script>
이 코드를 사용할 것이다. location.href를 통해 memo페이지로 이동시키며 ?memo=document.cookie를 이용해 쿠키 값을 넘겨줄 것이다. memo는 전달받은 쿠키를 페이지에 작성할 것이다.
해당 코드를 입력하고 제출을 누른 위 memo 페이지로 가보면
flag값을 확인할 수 있다.
'보안 > Dreamhack' 카테고리의 다른 글
Dreamhack: simple_sqli (0) | 2022.04.06 |
---|---|
Dreamhack: file-download-1 (0) | 2022.04.05 |
Dreamhack: pathtraversal (0) | 2022.04.04 |
Dreamhack: cookie (0) | 2022.04.03 |