GET Admin 3

DATE : 2024/1/21

Capture The Flag

STEP_1) 회원 가입 페이지로 이동

STEP_2) 사용할 계정 생성

STEP_3) STEP_2에서 생성한 계정으로 로그인

STEP_4) 마이페이지로 이동

STEP_5) 마이페이지 접속 시, 발행 되는 CSRF Token 확인

STEP_6) JS로 CSRF Token에 접근하는 경로 파악

CSRF Token에서 살펴본 바로는 CSRF 공격을 막기 위해 인증 목적의 공격자가 모르는 값을

요청에 포함 시킨다고 했는데 사실 CSRF Token 또한 공격자에게 탈취 당할 수 있다.

이번 CTF에서는 마이페이지에 접속할 때마다 새로운 CSRF TOKEN을 만들어 사용자에게 보내주지만

공격자가 이를 탈취해 비밀번호를 수정하는 요청을 보내도록 CSRF 공격을 수행할 것이다.

따라서 JS로 Token에 접근하기 위한 경로를 파악할 필요가 있다.

STEP_7) 비밀번호 수정 요청 보내기

STEP_8) STEP_7 수행 시, 서버로 날아가는 Packet 확인

STEP_9) GET method로 요청 변환

STEP_10) GET method로 요청 시, 응답 여부 확인

STEP_11) 게시판 페이지로 이동

STEP_12) 스크립트를 삽입하기 위해 게시물 작성 페이지로 이동

이때 게시물 페이지로 이동한 이유는 XSS 취약점이 있는 포인트를 찾기 위함으로

앞서 GET method로 요청을 변환해 서버로 보냈지만 응답이 오지 않았기 때문

우리는 POST method로 CSRF 공격을 수행해야 하는 상황이고

POST method로 CSRF 공격을 한다는 건, form tag를 활용한 스크립트를 작성해야 한다는 뜻이다.

STEP_13) 게시물 본문에 스크립트 작성

게시물 제목에도 XSS 취약점이 존재하지만 CSRF 공격을 수행하기 위해 작성할 스크립트의 길이를

고려했을 때, 본문에 작성하는 게 보기 편할 것이다.

STEP_14) STEP_13에서 작성한 게시물 클릭

STEP_15) 스크립트 실행 여부 파악

공격자가 삽입한 임의의 스크립트가 실행된 결과를 확인함으로써 우리는

CSRF 공격을 위해 Stored XSS를 수행할 수 있다는 사실을 파악할 수 있다.

STEP_16) CSRF 공격을 수행하기 위해 스크립트 작성

STEP_17) STEP_16에서 작성한 게시물 주소를 admin에게 전달

STEP_18) 현재 로그인한 계정에서 로그아웃

STEP_19) 스크립트에서 전달한 비밀번호로 admin 계정에 로그인 시도 (pw: 1019)

STEP_20) admin 계정으로 로그인 성공 시 결과 화면

Last updated