사이트 주소 : http://xss-quiz.int21h.jp
9번 문제입니다.
[문제 접근]
우선 파악하기 위해 test라는 문구를 넣어 봅니다.
프록시 도구로 패킷을 살펴보겠습니다.
우선 Request 패킷은 p1과 charset 파라미터가 존재하며,
p1은 text타입 input 필드에서 입력값을 받아 넘기고 있고,
charset는 euc-jp 라는 캐릭터셋 인코딩을 지정하여 넘기고 있네요.
Request 패킷의 charset 파라미터의 뒷 부분에 XSS 기본 공격 구문을 넣어 보내보겠습니다.
Response 패킷을 보면 Content-Type이라는 헤더에 charset 부분에 해당 공격 구문이 들어가고 있네요.
그치만 <와 >가 각각 <와 >로 필터링되어 공격이 성공 되지는 않고 있습니다.
일단 뭔가 다른 수가 생각나지 않네요... Hint를 한 번 확인해 보겠습니다.
UTF-7 XSS 라고 힌트를 주네요.
UTF-7 캐릭터셋 인코딩으로 변환하는 방법을 사용해야 할 것 같습니다. 인코딩 우회 기법을 시도해보겠습니다.
일단 url인코딩 해주는 웹 사이트는 쉽게 찾을 수 있습니다. 구글에서 검색하시면 많이 나오는데 그 중 하나를 선택합니다.
[문제 정답]
정답 : p1=%2BACIAPgA8-script%2BAD4-alert%28document.domain%29%2BADW-%2Fscript%2BAD4APAAi-&charset=utf-7
프록시 도구에서 Request 패킷을 변조합니다.
p1 파라미터에 UTF-7로 인코딩한 공격 구문을 삽입하고, charset 파라미터를 UTF-7로 변조하여 전송합니다.
그 다음 Response 패킷을 보면, Content-Type의 charset이 utf-7로 나타나며, 아래 input 필드에 XSS 공격 구문이 올바르게 들어가서 실행이 될 것 같아 보이네요.
그치만 실제로 화면에는 팝업이 나타나지 않습니다..
그 이유는 사실 일부 브라우저에서만 utf-7을 활용한 XSS 공격이 성공되기 때문입니다.
Chrome 브라우저에서 했지만 되지 않아서, IE 브라우저로 똑같이 시도해봅니다.
팝업에 도메인 주소가 나타납니다. 정답!
Congratulations!! 다음 스테이지로 넘어가시죠~
참고로 다음으로 넘어가려 해도.. 넘어가지지를 않습니다.
프록시 도구로 패킷을 보면 같은 요청만 계속 반복적으로 가고 있어 다음으로 넘어가지 않는 것 같네요.
이 문제는 일단.. 해결 안하고 넘어가겠습니다. Rank에 등록하려면 해결해야할 것 같지만 일단은 그냥 연습 의도가 강하기 때문에 넘어갈께요. 프록시에서 다음 stage의 URL 주소를 알 수 있으니까 URL 강제접속으로 넘어가시죠..
이 문제는 utf-7 캐릭터셋 인코딩을 활용하여 일부 브라우저에서 XSS 공격을 성공시킬 수 있다는 것이 포인트입니다.
하나의 케이스로 알고 있으면 될 것 같네요.
[XSS Challenges] Stage #11 풀이 (1) | 2020.07.03 |
---|---|
[XSS Challenges] Stage #10 풀이 (0) | 2020.07.03 |
[XSS Challenges] Stage #8 풀이 (0) | 2020.06.27 |
[XSS Challenges] Stage #7 풀이 (0) | 2020.06.27 |
[XSS Challenges] Stage #6 풀이 (0) | 2020.06.26 |
댓글 영역