웹 모의해킹/XSS

Reflected XSS

째로스 2022. 11. 26. 17:43

※ Reflected XSS 개요

 Stored XSS는 게시판, 마이페이지, 닉네임 변경 등 서버에 저장시키는 페이지 내부에 악의적인 스크립트문을 삽입했다.

하지만 Reflected XSS는 서버 DB에 스크립트를 저장시키지 않고, 서버의 응답에 스크립트문을 삽입하는 공격이다.

주로 검색 기능에서 취약점이 발견되며, 공격 대상자가 Reflected XSS 공격을 당할 때 공격자가 유도한 url에 접속해야

한다.

 

Reflected XSS 공격 단계

1. <'"> 특수문자 사용 가능 여부 확인하기

검색창에 <'"> script alert를 검색을 해보았다. 하지만 해당 문자열에 대응되는 게시글이 없자 경고문을 띄우게 되는데,

이 때 입력한 문자열 중 꺽새(< >)문자만 HTML Entity로 변환된 것(&lt;, &gt;)을 볼 수 있다.

하지만 '" 따옴표 특수문자는 그대로 사용할 수 있고 입력에 따라 우리가 원하는 스크립트를 실행시킬 수 있으므로, 위 요청을 리피터로 옮겨 우리가 원하는 스크립트문을 실행시키도록 만들어 보자.(Burp Suite의 Request에서 우클릭한 뒤 Send to Repeater 버튼을 클릭하면 된다.)

 

2. 스크립트 변조

우리가 원하는 문자가 경고문에 출력되도록 문자열을 변경한다.

주석(//) 처리를 통해 원래 뒤에 붙었던 내용들을 무시하게 만든다.

 

3. POST 방식을 GET 방식으로 변경

 리피터의 Request문에서 우클릭하여 'change request method'를 클릭해주면 POST방식에서 GET방식으로 전송방식을 바꿀 수 있다. 이 때 GET 방식을 사용하는 이유는 POST방식과 달리 URL만을 사용하여 공격을 할 수 있기 때문으로,  POST방식은 우리가 원하는 파라미터를 전송시키기 위해서 form 태그 또는 Ajax 사용이 가능해서 복잡하다.

 

 공격에 사용될 URL을 얻어내기 위해서는 리피터의 Request문에서 우클릭하여 Copy URL을 하면 우리가 원하는 스크립트를 실행시킬 수 있는 URL를 얻어낼 수 있다. 그 URL을 공격대상에서 전송한 뒤, 공격 대상이 해당 URL에 접속하게 되면 스크립트가 실행되면서 공격자가 의도한 스크립트를 실행시킬 수 있다.(쿠키 및 세션 탈취 등)

생성해낸 URL에 접속했을 때의 모습