해킹스터디

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

herini0829 2026. 1. 6. 14:10

🕵️ CSRF-Get Admin 3 문제 풀이

CSRF-Get Admin 3을 풀어보자. 흐름상 이번에는 CSRF토큰이 나올 것 같다.

마이페이지에 들어가니 역시나 hidden으로 csrf_token을 던져주고 있다. 관리자의 token을 XSS를 이용하여 탈취하고, 그 정보를 포함하여 CSRF공격을 하면 될 것 같다. 개념까지는 괜찮은데 실제 payload를 만드는 것은 쉽지 않을 것 같다.

XSS가 되는 페이지 안에 크게 이런식으로 가면 될 것 같다.

  • Token을 탈취하는 XSS 공격을 통해 token을 탈취한다.(이때 탈취용 iframe이 필요함)
  • Form을 전송하고 response를 받을 stealth iframe을 만든다.
  • Form과 attack()함수를 정의하고 submit하여 CSRF공격을 한다.

먼저 TOKEN을 어떻게 꺼내올 지 생각해봐야 하는데, 위치부터 파악해보자.



이렇게 하면 토큰값을 꺼내올 수 있다.

🔍 페이로드 해석

페이로드를 해석해보자면 다음과 같다.

  1. fsi6의 마이페이지를 안보이게 iframe으로 불러오고, 로드가 끝나면 attack()함수를 실행하도록 한다.
    (실제로 공격할때는 네모친 부분을 fsi6_admin으로 변경해야한다)
  2. Form의 요청과 응답을 주고받을 안보이는 iframe을 하나 더 만든다.
  3. 1의 로드가 끝나면 실행되는 attack()함수는 stolen_token이라는 변수를 만들고 거기에 XSS로 아까 위의 1에서 훔쳐온 csrf_token을 집어넣고, form_token이라고 선언된 변수 안에 stolen_token 값을 집어넣은 뒤 myform을 제출하게 한다.
    (form_token value에 stolen_token을 넣고 input쪽에 id="form_token"으로 선언해주는 것만으로 value가 입력이 된다)
  4. 마지막으로 봐야할 form은 POST형식으로 정보를 보내는 myform인데 pw를 12345로 변경하도록 되어 있다.
💡 기술적 포인트 (참고)
- onload 이벤트: iframe에 대상 페이지(마이페이지)가 완전히 로드되어 토큰값이 생성된 후에 스크립트가 실행되어야 하므로 필수적
- contentDocument: 부모 창에서 iframe 내부의 DOM 객체(토큰값 등)에 접근하기 위해 사용되는 속성

3. 결과 확인

관리자 봇에게 게시글을 읽게 한 뒤, fsi6_admin 계정에 설정한 비밀번호 12345를 입력하니 성공적으로 로그인되며 플래그를 획득할 수 있었다.

여기서 우리가 알아야했던건 XSS 공격포인트와, 공격 대상의 ID(fsi6_admin)이었고 나머지는 공격 과정에서 획득할 수 있다.

 

XSS와 CSRF를 연계해서 보안 토큰까지 우회해본 아주 유익한 문제였다. 끝! 😎