Reflected XSS : LAB [4]
DATE : 2024/1/12
Last updated
DATE : 2024/1/12
Last updated
대부분의 HTML tag가 차단되는 상황에서 검색 기능을 활용해 스크립트를 실행시키는 것이
이번 LAB의 목표이다.
일단 검색 기능이 어떻게 구현되어 있는 지 확인하기 위해 hanhxx를 입력해보았다.
사용자가 입력한 값이 search parameter로 전달되는 동시에 결과 문자에 나오고 있는 걸 보면
search parameter가 곧 바로 search results for '___' 빈칸에 들어가는 구조임을 예측할 수 있다.
문구 사이에 스크립트를 삽입해 XSS 공격을 취하기 위해 태그를 먼저 넣어봤는데
Response를 보면 알겠지만 Tag is not allowed..!
LAB 제목에도 쓰여져 있듯이 태그를 허용하지 않는 다는 문구만 나온다.
하지만 모든 tag가 차단되는 상황은 아니기 때문에 차단되지 않는 태그를 먼저 알아내야 한다.
port swigger에서 정리해둔 tag list를 payload로 사용해 Intruder를 실행해보았다.
그 결과 몇 개의 태그는 차단되지 않는 걸 알 수 있었는데 그중에 하나가 body tag이다.
아! 그럼 이제 body tag에 event handler를 작성하면 되겠다! 싶었지만,,
알고 보니 event handler도 제한되고 있는 상황이었다.
이 역시 event handler list를 가져다가 Intruder를 실행해 허용되는 속성을 확인해보았다.
태그와 달리 event handler는 허용되는 경우가 더 많았는데 LAB을 해결하기 위해서는
onresize를 사용해볼까 한다.
search parameter 자리에 body tag - onresize event handler를 작성하면
Response에 정상적으로 body tag가 들어가는 걸 볼 수 있다.
삽입할 스크립트를 준비했으니 이제 사용자에게 스크립트를 전달해보자.
LAB 상단에 위치한 Go to exploit server를 누르면 공격자 서버로 이동할 수 있다.
body 부분에 스크립트를 작성해주면 되는데 사용자가 이 packet을 받았을 때,
취약점이 존재하는 데 사이트에 위에서 준비한 스크립트를 전달해야 하기 때문에
이를 수행하기 위해서 iframe tag가 등장하게 된다.
iframe tag는 페이지 안에 외부 페이지를 가져와 삽입할 때 사용하는 태그로
src 속성에 작성된 경로의 페이지를 iframe tag를 사용한 페이지로 가져오게 된다.
현재 작성한 스크립트는 취약점이 존재하는 페이지를 요청하는데 동시에
search parameter로 <body onresize=print()>를 전달한다.
이렇게 되면 iframe tag에 작성해둔 onload event handler가 동작하여 크기가 120px로 조정되는 시점에
onresize event handler가 동작하게 되면서 print() 함수가 실행되는 것이다.
따라서 이 스크립트를 전달 받은 사용자 브라우저에서는 print() 결과인 프린트 창이 뜨게 된다.
이렇게 iframe tag를 사용하면 취약점이 존재하는 페이지를 현재 페이지로 불러와 접근할 수 있으며
반대로 취약점이 존재하는 페이지에 정보를 빼내고자 하는 페이지를 불러올 수도 있다.
스크립트를 어떻게 작성하느냐에 따라 공격 시나리오가 굉장히 다양해질 수 있기 때문에
이렇게 LAB을 통해서 보여주고자 하는 공격의 흐름을 정리해볼 필요가 있는 거 같다.