웹/웹 보안

Arachni를 이용한 XSS 취약점 스캔 및 검증

비니화이팅 2018. 3. 14. 16:15

오늘은 Arachni를 이용하여 스캐닝을 하고 그에 대한 검증까지 해보는 시간을 갖도록 하겠습니다.


1. XSS의 개념

일단 스캐닝을 하기 앞서 간단하게 XSS의 개념을 이해하고 가도록 하겠습니다.


XSS(Cross Site Script)는 OWASP top 10의 A7에 위치하고 있습니다.


공격자가 웹 페이지(게시판 등)에 악성 스크립트를 삽입하면 사용자 측에서 해당 스크립트가 동작하여 사용자의 정보(쿠키, 세션 등)탈취 등 여러 공격을 수행할 수 있습니다.


XSS는 크게 Stored XSS, Reflected XSS, DOM based XSS로 나누어집니다.

Stored XSS는 사용자의 입력 데이터가 DB에 저장되고, DB에서 해당 값을 추출하는 경우에 발생됩니다.

Reflected XSS는 사용자 입력 값이 웹 화면에 바로 출력되는 형태의 취약점을 말합니다.

DOM Based XSS는 DOM객체를 포함하는 자바스크립트 등을 이용하여 DOM 데이터에 접근 시 검증되지 않은 입력값이 자바스크립트를 통해 삽입되어 발생되는 취약점을 의미합니다.


공격은 악성 스크립트를 삽입함으로써 이루어지므로 사용자로부터 입력 받은 값을 검증함으로써 대응을 할 수 있겠습니다.


2. 취약점 분석 Tip

XSS 취약점을 점검할때는 Response의 body를 잘 봐야 합니다.

공격 패턴이 Response body에 그대로 나와 있으면 취약한 것으로 간주하게 됩니다.

간단하게 <script>alert(“test”)</script>를 넣어서 테스트 해보면 됩니다.


3. Arachni를 이용한 스캐닝

저는 http://demo.testfire.net을 대상으로 진행하였습니다. 

(Arachni 사용법은 이전 글에 포스팅하였으니 참고하면 됩니다.)

3개의 페이지에 대하여 XSS취약점이 발견되었습니다. 


4. 검증

스캐닝 결과 발견한 3개의 페이지에 대해서 정탐인지 검증해보도록 하겠습니다.


4-1.

우선 맨 위에있는 http://demo.testfire.net/search.aspx페이지입니다.

결과를 확인해보니 삽입된 패턴이 Response body에서 그대로 보입니다.

실제로 정상탐지됐는지 검증해보도록 하겠습니다.


패턴이 삽입되었던 자리에 <script>alert("test")</script>를 삽입하여 팝업창이 뜨는지 확인해봅니다.

(취약점은 존재하나 브라우저 자체에서 블록될 수도 있습니다.)

  http://demo.testfire.net/search.aspx?txtSearch=<script>alert("test")</script> 


"test"문자열이 뜨는 것을 보아 정탐임을 확인할 수 있습니다.


4-2.

두 번째로 http://demo.testfire.net/disclaimer.htm 페이지 입니다.


마찬가지로 패턴이 삽입되었던 자리에 script>alert("test")</script>를 삽입하여 팝업창이 뜨는지 확인해봅니다.

 http://demo.testfire.net/disclaimer.htm?url=http://itlearner.tisory.com<script>alert('test')</script> 


"test"문자열이 뜨는 것을 보아 정탐임을 확인할 수 있습니다.


4-3.

마지막으로 http://demo.testfire.net/comment.aspx 페이지 입니다.

마찬가지로 삽입된 패턴이 Response body에서 그대로 보입니다.


post 방식이기 때문에 url에 파라미터가 보이지 않습니다.

burpsuite를 이용하여 패턴이 삽입되었던 자리에 <script>alert("test")</script>를 삽입하여 팝업창이 뜨는지 확인해봅니다.


"test"문자열이 뜨는 것을 보아 정탐임을 확인할 수 있습니다.




본 글은 '웹 모의해킹 및 시큐어코딩 진단가이드' 서적을 참고하여 작성하였습니다.