JSFuck
JSFuck은 Martin Kleppe가 개발한 자바스크립트의 난해한 프로그래밍 스타일의 하나로, 코드는 제한된 다양한 문자 집합을 사용하여 작성된다: (
,)
, [
, ]
, +
, !
. 이 이름은 오직 구두점만의 최소주의적 알파벳을 사용하는 난해한 프로그래밍 언어의 하나인 브레인퍽에서 비롯된 것이다. 브레인퍽과 달리 JSFuck은 유효한 자바스크립트 코드인데, 즉 JSFuck 프로그램들은 자바스크립트를 해석하는 어떠한 웹 브라우저나 엔진에서라도 실행할 수 있다는 의미이다.
JSFuck의 도전은 오직 6자를 사용하여 완전한 집합의 자바스크립트 함수들을 다시 만들어내는 데 기인하며, 자바스크립트의 두 가지 속성을 통해 실현할 수 있다:
- 약한 타이핑의 프로그래밍 언어이다.
- 식을 어떠한 형으로든 평가가 가능하다.[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]
같이 보기
[편집]각주
[편집]- ↑ Jane Bailey/The Daily WTF: "Bidding on Security". http://thedailywtf.com/articles/bidding-on-security
- ↑ 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
- ↑ 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
- ↑ https://github.com/fasttime/jquery-screwed jQuery JavaScript library made of only six different characters: ! ( ) + [ ]
- ↑ 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.
- ↑ “eBay has no plans to fix "severe" bug that allows malware distribution [Updated]”. 《Ars Technica》.