GET Admin 1
1. CSRF 포인트
1) 마이페이지 접속
2) 비밀번호 변경
비밀번호를 1234로 변경했다.
3) 비밀번호 변경 요청 확인
인증 정보 없이 변경할 비밀번호의 값만 pw 파라미터로 요청하고,
서버에서는 해당 요청을 정상적으로 처리하는 것을 확인했다.
[*] CSRF 포인트 확인
해당 요청을 GET 매서드로 변경해도
서버에서 정상적으로 처리하는 것을 확인했다.
4) CSRF 공격 시도
http://ctf.segfaulthub.com:7575/csrf_1/mypage_update.php?id=&info=&pw=1234
비밀번호를 1234로 변경하는 GET 요청이 담긴 URL을
피해자에게 전달해 누르게 유도한다면
CSRF 공격이 가능할 것이다.
관리자 봇이 해당 URL에 접근할 수 있도록 링크를 전달했다.
해당 링크를 전달받은 관리자 봇은
마이페이지로 리다이렉트되면서 회원정보가 수정됐다는 알림창을 받아
CSRF 공격을 눈치채고 비밀번호를 수정했다.
그렇다면 XSS 공격과 연계하여 사용자가 CSRF 공격을 눈치채지 못하도록 해야 한다.
2. XSS 포인트
1) 게시판 접속
2) 게시글 작성 페이지 접속
3) 본문에 스크립트 삽입 후, 글 작성
4) 스크립트 동작 확인
[*] Stored XSS 포인트 확인
3. XSS 공격을 활용한 CSRF 공격
1) 게시글 작성 페이지 접속
2) 본문에 CSRF 공격이 동작하는 이미지 태그를 삽입한 뒤, 글 작성
<!-- src : 비밀번호를 1234로 변경하는 GET 요청을 삽입한다. -->
<!-- onerror : 이미지를 불러오지 못했을 시,
사용자가 눈치채지 못하도록 화면에 아무 것도 출력하지 않게 설정한다. -->
<img src="http://ctf.segfaulthub.com:7575/csrf_1/mypage_update.php?pw=1234"
onerror="this.style.display='none'"/>
3) CSRF 공격을 삽입한 게시글에 접근
4) 게시글에 접근한 통신 로그 확인
게시글에 접근하면 삽입된 CSRF 공격이 로드되고,
이미지 태그로 인해
마이페이지에서 비밀번호를 1234로 변경하는 요청을 하게 된다.
서버에서 정상적으로 처리하는 모습도 확인할 수 있다.
5) 관리자 계정, 게시글 접근 유도
관리자 봇이 CSRF 공격이 삽입된 게시글에 접근할 수 있도록
게시글 링크를 전달했다.
관리자가 CSRF 공격을 눈치채지 못하고, 해당 게시글에 접속한 것을 확인했다.
6) 계정 탈취
비밀번호를 1234로 넣고 관리자 계정에 로그인 시도했다.
로그인에 성공하면서 FLAG가 출력되는 것을 확인할 수 있다.