JSFuck
JSFuck은 Martin Kleppe가 개발한 자바스크립트의 난해한 프로그래밍 스타일의 하나로, 코드는 제한된 다양한 문자 집합을 사용하여 작성된다: (,), [, ], +, !. 이 이름은 오직 구두점만의 최소주의적 알파벳을 사용하는 난해한 프로그래밍 언어의 하나인 브레인퍽에서 비롯된 것이다. 브레인퍽과 달리 JSFuck은 유효한 자바스크립트 코드인데, 즉 JSFuck 프로그램들은 자바스크립트를 해석하는 어떠한 웹 브라우저나 엔진에서라도 실행할 수 있다는 의미이다. JSFuck의 도전은 오직 6자를 사용하여 완전한 집합의 자바스크립트 함수들을 다시 만들어내는 데 기인하며, 자바스크립트의 두 가지 속성을 통해 실현할 수 있다: 약한 타이핑의 프로그래밍 언어이다. 식을 어떠한 형으로든 평가가 가능하다. JSFuck은 원래 보안 우회 기술을 개선하는데 초점을 둔 온라인 대회의 일부로서 개발되었다. 이를테면 크로스 사이트 스크립팅(XSS) 공격과 같이 웹사이트에 제출되는 악성 코드의 발견을 우회하기 위해 사용할 수 있다. JSFuck의 다른 잠재적 이용은 코드 난독화에 있다. 또, 비공식적으로 최적화된 버전의 JSFuck을 이용하여 자바스크립트 라이브러리의 하나인 제이쿼리를 인코딩하기도 하였으며 이는 6개의 구별된 문자만으로 이루어진, 완전하게 기능하는 동등한 버전이다.
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》.