GET Admin 2
DATE : 2024/1/19 ~ 20
Last updated
DATE : 2024/1/19 ~ 20
Last updated
로그인 페이지로 이동했을 때, 하단에 위치한 Sign Up 버튼을 클릭하면 회원 가입 페이지로 이동할 수 있다.
마이페이지에는 비밀번호를 수정하는 기능이 있는데 admin의 비밀번호를 공격자가 원하는 대로
바꿔버리기 위해서 어떤 packet이 만들어지는 지 확인해볼 필요가 있다.
수정한 정보를 입력하고 Update 버튼을 누르는 경우, pw parameter로 수정하고자 하는 비밀번호가
전달되는 걸 확인!
CSRF 공격을 수행할 때, POST method는 XSS 취약점이 존재해야 하기 때문에
우선, GET method 수행 가능 여부를 파악해보았다.
마우스 우측 Click! -> change request method -> packet Forward
해보면 에러가 발생했다는 응답이 돌아옴으로 GET method로 요청이 불가능함을 알 수 있다.
GET method가 불가능하다면 POST method로 CSRF를 수행하면 될 것!
대신 XSS 취약점을 먼저 찾아볼 필요가 있다.
Stored XSS 취약점이 존재할 가능성이 있는 게시물에 스크립트를 작성해보기로 했다.
스크립트를 작성한 게시물을 요청하게 되면 성공적으로 팝업 창이 떴기 때문에
우리는 Stored XSS를 통해 CSRF를 수행하면 된다는 판단을 할 수 있다.
이번 CTF를 해결하기 위해 우리는 CSRF를 통해 admin의 비밀번호를 수정하고
수정된 비밀번호로 admin 계정에 로그인할 것이다.
이때 POST method로 CSRF 공격을 수행하기 위해서 <form> tag를 만들고
그 안에 수정할 비밀번호를 <input> - type이 password인 tag의 value로 적어주면 된다. (pw : 1234)
또한 사용자가 이 게시물에 접근했을 때, 인위적으로 만든 form이 보여서는 안 되며
보이지 않지만 값을 전달해야 하기 때문에 <script> tag를 이용해 자동적으로 제출하도록
스크립트를 작성한다.
💡iframe으로 form tag 결과를 넘긴다 해도 팝업 창은 뜨기 때문에 admin 봇이 눈치챌 수 있다.
이를 위해 sandbox="allow-scripts"를 iframe에 추가하면 팝업 창이 보이지 않게 된다.
admin이 자신도 모르게 비밀번호를 수정하는 요청을 서버에 보내도록 만들기 위해서 (= CSRF )
XSS 취약점이 존재하는 게시물에 스크립트를 작성했고,
이 게시물의 주소를 admin에게 전달하면 admin이 게시물에 접속하게 되면서
비밀번호 수정 요청이 서버로 휙 ✈️ 날아가게 되는 것이다.
admin이 문제 없이 전달한 링크로 접속했다면 비밀번호가 1234로 바꿔있을 것이다.
이제 admin 계정으로 로그인하기 위해 현재 계정에서는 로그아웃 한다.
스크립트에 적어준 password 값을 비밀번호에 입력하고 admin 계정으로 로그인을 시도하면
이번 CTF의 목표인 FLAG를 확인할 수 있을 것이다.