JSFuck

위키백과, 우리 모두의 백과사전.

JSFuck은 Martin Kleppe가 개발한 자바스크립트의 난해한 프로그래밍 스타일의 하나로, 코드는 제한된 다양한 문자 집합을 사용하여 작성된다: (,), [, ], +, !. 이 이름은 오직 구두점만의 최소주의적 알파벳을 사용하는 난해한 프로그래밍 언어의 하나인 브레인퍽에서 비롯된 것이다. 브레인퍽과 달리 JSFuck은 유효한 자바스크립트 코드인데, 즉 JSFuck 프로그램들은 자바스크립트를 해석하는 어떠한 웹 브라우저엔진에서라도 실행할 수 있다는 의미이다.

JSFuck의 도전은 오직 6자를 사용하여 완전한 집합의 자바스크립트 함수들을 다시 만들어내는 데 기인하며, 자바스크립트의 두 가지 속성을 통해 실현할 수 있다:

  1. 약한 타이핑의 프로그래밍 언어이다.
  2. 식을 어떠한 형으로든 평가가 가능하다.[1]

JSFuck은 원래 보안 우회 기술을 개선하는데 초점을 둔 온라인 대회의 일부로서 개발되었다.[2] 이를테면 크로스 사이트 스크립팅(XSS) 공격과 같이 웹사이트에 제출되는 악성 코드의 발견을 우회하기 위해 사용할 수 있다.[3] JSFuck의 다른 잠재적 이용은 코드 난독화에 있다. 또, 비공식적으로 최적화된 버전의 JSFuck을 이용하여 자바스크립트 라이브러리의 하나인 제이쿼리를 인코딩하기도 하였으며 이는 6개의 구별된 문자만으로 이루어진, 완전하게 기능하는 동등한 버전이다.[4]

문자표[편집]

가장 짧은 JSFuck 식의 문자들은 아래에 나열되어 있다. 다른 문자들도 표현할 수 있으나 상당히 긴 코드를 만들어낸다.

문자 JSFuck
+ (+(+!+[]+(!+[]+[])[!+[]+!+[]+!+[]]+[+!+[]]+[+[]]+[+[]])+[])[!+[]+!+[]]
. (+(+!+[]+[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+[!+[]+!+[]]+[+[]])+[])[+!+[]]
0 +[]
1 +!![] or +!+[]
2 !![]+!![] or !+[]+!+[]
3 !![]+!![]+!![] or !+[]+!+[]+!+[]
4 !![]+!![]+!![]+!![] or !+[]+!+[]+!+[]+!+[]
5 !![]+!![]+!![]+!![]+!![] or !+[]+!+[]+!+[]+!+[]+!+[]
6 !![]+!![]+!![]+!![]+!![]+!![] or !+[]+!+[]+!+[]+!+[]+!+[]+!+[]
7 !![]+!![]+!![]+!![]+!![]+!![]+!![] or !+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]
8 !![]+!![]+!![]+!![]+!![]+!![]+!![]+!![] or !+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]
9 !![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![] or !+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]
a (![]+[])[+!+[]]
d ([][[]]+[])[!+[]+!+[]]
e (!![]+[])[!+[]+!+[]+!+[]]
f (![]+[])[+[]]
i ([![]]+[][[]])[+!+[]+[+[]]]
I (+(+!+[]+(!+[]+[])[!+[]+!+[]+!+[]]+(+!+[])+(+[])+(+[])+(+[]))+[])[+[]]
l (![]+[])[!+[]+!+[]]
N (+[![]]+[])[+[]]
n ([][[]]+[])[+!+[]]
r (!+[]+[])[+!+[]]
s (![]+[])[!+[]+!+[]+!+[]]
t (!!+[]+[])[+[]]
u ([][[]]+[])[+[]]
y (+[![]]+[+(+!+[]+(!+[]+[])[!+[]+!+[]+!+[]]+(+!+[])+(+[])+(+[])+(+[]))])[+!+[]+[+[]]]

보안[편집]

JSFuck처럼 일반적인 자바스크립트의 구별된 기능들이 부족한 암호화 기술들은 악성 자바스크립트 코드가 침입 방지 시스템[5]이나 콘텐트 필터를 우회하는 것을 도와줄 수 있다. 이를테면 JSFuck의 영숫자들이 결여된 상황과 더불어 콘텐츠 필터가 결함이 있을 경우 판매자들은 임의의 JSFuck 스크립트를 자신들의 이베이 옥션 페이지에 임베드할 수 있게 하였다.[6]

각주[편집]

  1. Jane Bailey/The Daily WTF: "Bidding on Security". http://thedailywtf.com/articles/bidding-on-security
  2. https://web.archive.org/web/20110301054929/http://sla.ckers.org/forum/read.php?24%2C32930 Yet Another Useless Contest (but fun!) Less chars needed to run arbitrary JS code
  3. https://arstechnica.com/security/2016/02/ebay-has-no-plans-to-fix-severe-bug-that-allows-malware-distribution/ Ars Technica: Ebay has no plans to fix severe bugs that allows malware distribution
  4. https://github.com/fasttime/jquery-screwed jQuery JavaScript library made of only six different characters: ! ( ) + [ ]
  5. Ré Medina, Matías A. (2012-09). Bypassing WAFs with non-alphanumeric XSS. Retrieved from http://blog.infobytesec.com/2012/09/bypassing-wafs-with-non-alphanumeric-xss.html.
  6. “eBay has no plans to fix "severe" bug that allows malware distribution [Updated]”. 《Ars Technica》. 

외부 링크[편집]