XSS(Cross Site Scripting)


XSS Cross Site Scripting의 약자로 웹 어플리케이션에서 자주 나타나는 취약점 중 하나로, 웹 사이트 관리자가 아닌 이가 웹 페이지에 악성 스크립트를 삽입 할 수 있는 취약점 이다. 이 취약점으로 해커가 사용자의 정보(쿠키, 세션 등)를 탈취하거나 비정상 적인 기능을 수행 할 수 있게 한다. 주로 다른 사이트와 정보를 교환하는 식으로 작동하므로 Cross Site Scripting이라는 이름을 가지게 되었다.


예를 보자.


인터넷 사이트의 게시판에 이같이 <script>alert(1)</script>라는 스크립트 문을 작성해 올렸다.


그리고 게시물을 클릭하면

1이 뜨는 것을 볼 수 있다.


이와 같이 어떠한 게시글에다가 스크립트문을 삽입해 이용자가 의도하지 않은 사이트, 아니면 다운로드 링크로 빠지게 만들수 있고 쿠키, 세션을 탈취할 수 도 있다.


이것을 막는 방법으로는, 대개 filtering하는 방법이 제일 보편적이고 확실하다.


이것들을 우회하는 방법으로는


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);


등이 있다.



참조 사이트: http://4rgos.tistory.com/18?category=694721

:https://ko.wikipedia.org/wiki/%EC%82%AC%EC%9D%B4%ED%8A%B8_%EA%B0%84_%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8C%85

'Hacking' 카테고리의 다른 글

File Inclusion Attacks  (0) 2018.02.01
Oracle Padding Attack[실전편]  (0) 2018.01.31
Oracle Padding Attack[이론편]  (2) 2018.01.09
error based sql injection  (0) 2017.09.18

+ Recent posts