해킹스터디

[Normaltic 웹해킹 입문] 12주차 CSRF-Get Admin 1

herini0829 2026. 1. 5. 20:09

🕵️ CSRF-Get Admin 1 문제 풀이: iframe을 이용한 스텔스 비밀번호 탈취

이번 문제는 CSRF의 기초이자 핵심인 '요청 위조'를 실습하는 문제다. 단순히 요청을 보내는 것을 넘어, 관리자의 눈(혹은 시스템의 감시)을 피해 어떻게 은밀하게 공격을 성공시키느냐가 관건이었다.


1. 공격 시나리오 분석

내가 fsi4라는 계정을 만들면 fsi4_admin이라는 관리자 계정이 페어로 생성된다. 이 관리자 계정의 비밀번호를 내가 원하는 값으로 변경한 뒤 로그인하면 플래그를 얻을 수 있는 구조다.


2. 1차 시도와 실패: "들켰단다"

먼저 내 계정에서 비밀번호를 변경할 때 발생하는 패킷을 분석했다. 확인 결과, GET 방식으로 파라미터가 날아가는 것을 확인했다.

따라서 이 URL을 그대로 관리자 봇에게 던지면 관리자의 비밀번호가 바뀔 것이라 생각했다. 하지만 결과는 "들켰단다"는 메시지와 함께 실패.

❓ 왜 실패했을까? (Alert의 존재)
브라우저에 해당 공격 URL을 직접 입력해 보니, 비밀번호 변경이 완료된 후 "변경되었습니다"라는 Alert(알림창)가 뜨는 것을 확인할 수 있었다. 관리자 봇 시스템은 이런 예상치 못한 팝업이나 페이지 이동이 발생하면 공격을 감지하고 차단해버리기 때문에 실패했던 것이다.

3. 해결 전략: XSS와 iframe을 이용한 스텔스 공격

알림창을 띄우지 않고 배경에서 조용히 공격을 수행하려면 iframe이 필요하다. 그리고 이를 실행하기 위해 게시판 본문에서 XSS가 가능한 지점을 찾았다.

XSS가 가능함을 확인했으니, 이제 본문에 비밀번호 변경 페이지를 iframe으로 불러오는 스크립트를 심는다.

최종 공격 페이로드:
<iframe src="비밀번호_변경_공격_URL" style="display:none;"></iframe>
💡 iframe이 해결책인 이유
iframe을 display:none이나 크기 0으로 삽입하면, 관리자가 게시글을 읽는 순간 브라우저 뒷단에서 비밀번호 변경 페이지가 로드된다. 페이지 이동 없이 배경에서 요청이 날아가므로 관리자(봇)는 공격이 일어났는지 눈치채기 어렵다. (이전에 정리했듯 sandbox 속성까지 쓰면 알림창 자체를 완벽히 차단할 수도 있다!)

4. 최종 공격 성공

위 페이로드를 담은 게시글을 작성하고 관리자 봇에게 링크를 던졌다. 잠시 후 fsi4_admin 계정으로 변경한 비밀번호를 입력해 로그인하니 플래그를 획득할 수 있었다.

💡 소감

CSRF는 단순히 요청을 복사하는 게 전부가 아니라는 것을 깨달았다. 실제 환경에서는 알림창이나 페이지 리다이렉션 같은 '흔적'을 지우는 것이 얼마나 중요한지, 그리고 이를 위해 XSS를 연계하는 과정이 매우 인상 깊었다. 😎