퇴근길에 트위터보다가 재미있는 XSS 페이로드 찾아서 글 작성합니다.
요즘 바쁘고 두통도 심하고해서 신경 못쓰나 싶었는데, 또 이런글 보고 이러면 아픈것도 사라지네요. 자 빠르게 시작하죠.

XSS Payload : <script/"<a"/src=data:=".<a,[45].some(alert)>


제목 그대로 script 를 이용한 XSS 구문인데, 몇가지 트릭으로 필터링 규칙을 빠져나갑니다. 지난번에 썼던 글이랑 조금은 비슷한데요..
(https://www.hahwul.com/2018/03/bypass-xss-protection-event-handler.html)

우선 그림을 봅시다.

https://twitter.com/s0md3v/status/981465370736320513

Reflected XSS 할 때 <a 으로 <a>로 보이게 하여 src 필터링 규칙을 나가서(보통, a 태그의 href, src 등을 막진 않죠)

작성자가 src=data 부분이 왜 되는지 모르겠다고 하는데.. 일단 복잡하니깐 줄여봅시다.

문법을 최대한 줄여보면..

<script//src=data:,[45].some(alert)></script>

아!! src 주소를 data:로 해서 로컬로 준 후 스크립트 구문 자체를 값으로 넘겨줘서 실행하는 형태입니다. 

data: 구문으로 XSS 하던건 아래 링크 참고해주세요

그렇다면 data:로 값이 넘어간 [45].some(alert)  부분이 실제 실행되는 구간이고.. alert(45)와 결국은 동일한 결과입니다.(Array의 some 메소드로 호출)

[8].some
 => function some()

풀어서 다시보면 이런 형태라고 볼 수 있습니다.

<script src=data:[document_type] , alert(45)></script>

Test XSS


간단하게 파일을 만들어서 테스트해봅시다. 위 payload는 뒤쪽 스크립트 닫는 부분이 없는데, 이는 Reflected 되는 구간을 이용해서 강제로 붙여주는 것을 사용하기 위해서입니다.

<script/"<a"/src=data:=".<a,[45].some(alert)></script>



Awesome!

Reference

https://twitter.com/s0md3v/status/981465370736320513

댓글 2개:

  1. 블로그 재밌게 보고있습니다 항상 좋은자료 감사합니다

    답글삭제