XSS는 웹 브라우저에서 동작하는 악의적인 스크립트이다. 일반적으로 사용자의 개인정보, 쿠키탈취등을 한다.

 

대부분 XSS취약점을 진단하고자 할 때 <script>alert(1)</script> 와 같은 형태로 공격구문을 넣는다.

 

이를 우회하는 방법에는 여러가지가 있다.

 

 

1. 대소문자를 구분하는 함수를 이용해 보안을 해 놓았을 경우

 

공격 코드 : ex) <ScripT>alert(1)</SCRipT>

 

  

 

2. 금지어의 값을 Null 처리하는 함수를 이용해 보안을 해 놓았을 경우

 

공격 코드 : ex) <sscriptcript>alert(1)</sscriptcript>

 

  

 

 

3. HTML 태그 속성을 이용한 우회

 

특정 문자열만을 치환하는 방식의 함수가 쓰였을 때에 onmouseover 옵션을 사용하여 우회할 수 있다.

 

<?
 function XSSFilter($inputString)
 {
  $content = str_replace("<","&lt;",$content);
  $content = str_replace(">","&gt;",$content);
  return $content;
 
?>                                                                       

 

위와 같은 코드가 있다고 가정하자. 위 코드는  '<'와  '>' 문자열에 대해서 필터링을 한다.  예를들어 ?file=<script>alert(1)</script>   와 같은 형태로 공격구문을 넣었을 때 필터링과정을 거쳐    &lt;script&gt;alert(1)&lt;/script&gt;  와 같이 출력될 것이다.

 

 

공격 코드 : ex) <img scr="hello" onmouseover="alert(1)l">

 

"hello"라는 이미지 파일에 마우스를 올려 놓았을 경우 스크립트가 실행된다.

 

 

  

 

4. 문자열 분리를 통한 우회


자바 스크립트의 eval 함수를 이용하여 우회한다.

여기서 eval 함수에 대해 짚고 넘어가겠다.

 

eval() 함수의 인자는 기본적으로 문자열이다. 만약 문자열이 표현식을 나타낸다면 eval()은 표현식을 실행하지만, 인자가 있는 경우에는 문장을 반환한다.

 

예를 들어 eval("1+2") 는 3을 반환하지만, eval(new String("2+2")); 는 "2+2" 인 문자열 객체를 반환한다.

이때 변수를 선언하고 그 변수에 객체를 저장한 다음 toString()을 사용하면 이 제약을 피할 수 있다.

ex) var A = new String("1+2");

    eval(A.toString());  => 3을 반환!

 

공격 코드 : var inputString="aler" + "t(al" + "ert" + "(1));" ;

               eval(inputString);

  

 

 

5. 연속된 문자열을 거부하는 함수 우회

 

ex) 웹해킹 23번

 

 

위와 같은 경우 문장의 종료를 나타내는 'null'값을 문자열 사이 사이에 url 인코딩하여 넣어주면 된다 (위의 경우에는 GET방식으로 입력받기 때문)

 

공격 코드 : <s%00c%00r%00i%00p%00t>%00a%00l%00e%00r%00t%00(1);</s%00c%00r%00i%00p%00t>

  

 

 

 

참조 사이트

 

https://msdn.microsoft.com/ko-kr/library/12k71sw7(v=vs.94).aspx

 

http://dntsecurity.blogspot.kr/2017/02/xss.html

 

 

 

 

- Created by subo0521 -

'WEB > Web Hacking' 카테고리의 다른 글

error based sql injection  (0) 2017.09.18
Drive-By-Download(DBD)공격(실습편)  (0) 2017.05.29
Blind SQL Injection (이론편)  (0) 2017.05.14
파일 다운로드 취약점  (0) 2017.05.08
CSRF (Cross-site request forgery) 란  (0) 2017.04.28

+ Recent posts