반응형
SMALL

이번에는 Xss공격(Reflected)에 대해 포스팅하려고 한다. Stored에서도 설명했듯이 Reflected공격도 큰차이는 없지만 사용자에게 악의적인 코드를 심어 그걸 클릭하게끔 유도한다는 방식은 비슷하기 때문에 어떤 공격이 있는지 알아본다.



1. Xss공격(Reflected)


- 사용자에게 악의적인 코드를 심어 클릭하게 유도해서 세션정보를 빼내는 공격 

- 사용자에게 공격해서 다시 반환되어 돌아온다는 것이 특징이며 돌아오는 것은 세션정보, 로그인정보 같은 것이다.



<출저: 보안프로젝트>





* Xss-Reflected 공격 실습



(1) Xss - Reflected(Get) 공격


이 공격도 앞서 SQL 인젝션에서 했던  Get 공격과는 큰차이는 없다. 


 

First name, Last name에 경고창을 띄워주는 코드와 쿠키값을 볼 수 있는 코드를 입력해주고 실행을 하면 사진과 같이 쿠키값이 나온다는 것을 볼 수 있다. 위에 입력한 스크립트 공격은 많이 쓰이는 코드를 외우는 것도 좋다. 



보안을 High로 설정했을시에는 쿠키값이 노출되지 않고 입력했던 코드가 그대로 보여지는 것을 볼 수 있다. 



(2) Xss - Reflect(Post)공격



Post공격은 프록시를 잡아줘야 하기 때문에 저렇게 값을 넣고 버퍼스윗을 이용해 프록시를 잡아준다.



fitstname,Lastname에 쿠키값을 알아내는 코드를 입력해주고 Intercept off를 눌러준다.



이런식으로 쿠키값을 알려주는 경고창이 뜬다. 이런식으로도 쿠키값을 가져오는 것을 알 수 있다. 보안레벨이 High로 맞추고 프록시를 잡고 실행하게 되면 쿠키값이 뜨지 않고 입력한 코드가 뜨는 것은 Get방식 보안과 다를건 없다.


(3) Xss - Reflected(JSON) 공격



Reflected(Json) 공격도 다른 공격들과 큰차이는 없지만 저렇게 아무거나 조회하게 되면 결과값이 안나온다. 데이터베이스에 있는 값들만 조회가 가능하다. 



사진과 같이 명령어를 입력해준다. 단지 차이점이 조금 있다면 앞에 </script>를 입력하고 뒤에 <script>를 한번 더 입력했다. 뒤에는 차이가 없다.



저 값을 실행해보면 다음과 같이 경고창 메시지가 나오게 된다. Json 공격으로도 역시 쿠키값이 탈취가 가능함을 보여주는 공격이다.


(4) Xss - Reflected(AJAX/JSON) 공격




이 공격 또한 프록시를 잡아줘야 한다. 쿠키값을 검색하는 명령어를 입력하고 프록시를 잡아준다.





이런식으로 프록시를 잡아주게 되는데 입력한 스크립트 공격코드가 잘 입력됨을 볼 수 있으며 Ajax특성을 잘 살렸다는 것을 볼 수 있다.  주소창에 xss_ajax_2-2부터 title값까지 복사해주고 URL뒤에 넣어주면 된다.


이런식으로 또한 Ajax 공격으로도 쿠키값을 알아낼 수 있다.





이번에는 medium으로 맞춰놓고 아까 카피한 ajax 2-2 주소값을 그대로 넣어서 실행시켰다.



이번에는 이렇게 php파일을 다운로드 하라는 형식으로 나오게되서 쿠키값을 알아내기가 불가능해졌다. 




보안레벨을 High로 맞춰놓고 실험을 했다. 아까와 똑같이 주소값을 입력해주고 실행해준다.



실행해주면 &lt와 같은 값이 나와 쿠키값 탈취가 불가능해짐을 알 수 있다.



<대응방안>



비박스에서  xss_ajax_2-2.php파일을 보면 보안레벨이 높을수록 방어가 잘되어 있다는걸 볼수 있다. 제일 두드러진 특징이 header값을 넣어주었다는 건데 Content-type을 이미 명시를 해주었다. 그렇기 때문에 text/json을 실행하려고 해도 공격자가 넣은 스크립트를 실행할 수 없고 데이터를 실행하는 것이 되기 때문에 전혀 쿠키값을 알아낼 수 없는 것이다.

 



보안레벨이 medium일때도 마찬가지로 header안에 Content-type를 넣어줘서 악의적인 목적으로 삽입된 자바스크립트가 동작할 수 없도록 해주고 있다. 반면 보안레벨이 low일때는 전혀 보안이 안되어있고 무방비로 쿠키값이 탈취당하게 될 수밖에 없는 구조이다.







이번엔 이미지를 삽입한 공격이다. 이미지가 없기 때문에 저런식으로 빈상자가 나오게 된다. 



명령문 뒤에 onerror='alert(1)>이라는 것을 추가해줬더니 저런식으로 악의적 자바스크립트가 삽입이 되었다. 이미지가 없으면 1을 출력하라는 명령어이기 때문에 계속 경고창이 뜬다는 것을 볼 수 있다.


(5) Xss - phpmyadmin 공격



이번엔 phpmyadmin공격이다. 이 공격도 악의적으로 어떠한 버튼을 만들어 이상한페이지로 이동하게 해서 세션을 탈취할 수 있기 때문에 알아두면 좋은 공격이고 방어를 할 수 있게 될 것이다.



이런식으로 URL주소값을 입력해주고 type을 추가해주면 저런식으로 만들 수 있다.



뒤에 코드를 조금 더 추가해줘야 하는데 비비코드형식으로 입력해줘야 한다. [a@http://10.0.2.4/bWAPP/attack.php@]click[/a] 이런형식으로 뒤에 입력을 해준다음 실행해주면 click이라는 버튼이 생기게 된다.



실행해주면 이렇게 mysql 정보를 전부 탈취할 수 있게 된다. 


(6) Xss - PHP_Self 공격




이 공격도 다른것과 크게 다르진 않다. 쿠키값을 탈취하는 코드를 넣어서 실행해준다.



실행이 되면 이런형식으로 쿠키값이 탈취됨을 볼 수 있다.


<취약점 분석>



화면에 보면 form action 뒤에 server라는 변수가 있는데 php_self를 받아서 자기 자신을 실행시키게끔 변수를 받고 있다. 하지만 이 방식은 편의성이 제공될 수는 있지만 사용자에게는 취약점이 발생할 수 있다.




URL에 악성자바스크립트를 넣어서 실행한다.



실행이되면 이런식으로 악성자바스크립트가 삽입되어 경고창이 뜬다는걸 알 수 있다. Php Self는 편리함도 있지만 이런식의 취약점도 발생할 수 있기때문에 보안에 더 각별히 신경써야 한다.


(7) Xss - Reflected(HREF) 공격



HREF공격은 공격이 좀 특이한 것 같았다. 다른것과 별다를바는 없었지만 vote라는 곳에 마우스를 갖다 대기만해도 악성코드가 삽입된 자바스크립트 경고창이 나와 이 또한 위험하다고 생각했다. sun이라고 검색해주면 저렇게 목록들이 나온다.



이번에는 Sun onmouseover=alert("xss") a를 검색해서 실행한 결과이다. Vote라는 곳에 마우스를 갖다 대면 저런식으로 자바스크립트 경고창이 나오게 되어 공격이 된다.


<취약점 원인>



마우스 우클릭을 해서 페이지 소스를 보게 되면 방금 삽입시켰던 코드를 볼 수 있다. 저게 원래는 vote라는 값으로 되어 있었지만 a href취약점을 이용해 뒤에 자바스크립트 코드를 삽입시키면 방금과 같이 경고창이 삽입될 수 있다.



이렇게 Reflected공격도 엄청나게 다양하다는 것을 포스팅해봤다. 공격법이 워낙 다양해 많은 내용이었다. 하지만 실습으로 끝나지 않고 왜 취약한지, 취약점을 강점으로 바꿀 수 있는 방법이 무엇이 있을지 어떤 함수를 써야 보안이 잘되는지에 대해 조금 더 분석하는 습관을 기르면 언젠가는 보안 보고서 같은 것도 잘 쓸 수 있지 않게 될까 생각한다.


반응형
LIST
블로그 이미지

만년필석사

,