# GET Admin 3

## :exclamation:Capture The Flag

#### STEP\_1) 회원 가입 페이지로 이동

<figure><img src="https://982091423-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0vrqZHl1ILvo0CtUQGcH%2Fuploads%2F2LcXnGcQmMutR7P3oh5W%2FGET%20ADMIN%203_1.png?alt=media&#x26;token=05bb5eed-b7b2-4406-ae51-7fa3a17a583a" alt=""><figcaption></figcaption></figure>

#### STEP\_2) 사용할 계정 생성

<figure><img src="https://982091423-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0vrqZHl1ILvo0CtUQGcH%2Fuploads%2FfTZOFo8fLvQE8D83SuJc%2FGET%20ADMIN%203_2.png?alt=media&#x26;token=8640424b-01ee-4da9-9fef-099be01f0d1d" alt=""><figcaption></figcaption></figure>

#### STEP\_3) STEP\_2에서 생성한 계정으로 로그인

<figure><img src="https://982091423-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0vrqZHl1ILvo0CtUQGcH%2Fuploads%2FPjOLGDqmSgJKFBhwcDeR%2FGET%20ADMIN%203_3.png?alt=media&#x26;token=77eb08b2-3fd3-4e4c-99ad-fe2e3a239ac3" alt=""><figcaption></figcaption></figure>

#### STEP\_4) 마이페이지로 이동

<figure><img src="https://982091423-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0vrqZHl1ILvo0CtUQGcH%2Fuploads%2FdRaNFr1whqFn9LUu687H%2FGET%20ADMIN%203_4.png?alt=media&#x26;token=100e9f5c-204f-4ff4-8879-904600a9f96a" alt=""><figcaption></figcaption></figure>

#### STEP\_5) 마이페이지 접속 시, 발행 되는 CSRF Token 확인

<figure><img src="https://982091423-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0vrqZHl1ILvo0CtUQGcH%2Fuploads%2FJipo8EkdojcYa4xIUpic%2FGET%20ADMIN%203_5.png?alt=media&#x26;token=8f425b79-db1b-43d7-86be-17944405081b" alt=""><figcaption></figcaption></figure>

#### STEP\_6) JS로 CSRF Token에 접근하는 경로 파악

<figure><img src="https://982091423-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0vrqZHl1ILvo0CtUQGcH%2Fuploads%2FcOK6nAvnezYgfh3qfZ1t%2FGET%20ADMIN%203_6.png?alt=media&#x26;token=b07551a6-bc25-4893-b4ea-81ff00769b1f" alt=""><figcaption></figcaption></figure>

[csrf-token](https://hh-rys-log.gitbook.io/normaltic/12-1-17/note/csrf-token "mention")에서 살펴본 바로는 CSRF 공격을 막기 위해 인증 목적의 공격자가 모르는 값을&#x20;

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

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

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

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

#### STEP\_7) 비밀번호 수정 요청 보내기

<figure><img src="https://982091423-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0vrqZHl1ILvo0CtUQGcH%2Fuploads%2FE66Q7UZeYuyiqmwPKXqF%2FGET%20ADMIN%203_7.png?alt=media&#x26;token=d2855c4e-3c03-41fe-88d6-e26f803a360c" alt=""><figcaption></figcaption></figure>

#### STEP\_8) STEP\_7 수행 시, 서버로 날아가는 Packet 확인

<figure><img src="https://982091423-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0vrqZHl1ILvo0CtUQGcH%2Fuploads%2FxUiygG6qShAVoRNyPjfp%2FGET%20ADMIN%203_8.png?alt=media&#x26;token=27b1146b-d32d-4752-b5cf-07c471bb44fb" alt=""><figcaption></figcaption></figure>

#### STEP\_9) GET method로 요청 변환

<figure><img src="https://982091423-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0vrqZHl1ILvo0CtUQGcH%2Fuploads%2F4QJzW4RAk5wpZdIJY0gj%2FGET%20ADMIN%203_9.png?alt=media&#x26;token=60d7ad97-e8fe-4ea1-961e-4493a85824e2" alt=""><figcaption></figcaption></figure>

#### STEP\_10) GET method로 요청 시, 응답  여부 확인

<figure><img src="https://982091423-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0vrqZHl1ILvo0CtUQGcH%2Fuploads%2F83FskggOvFMw7qzF0SZr%2FGET%20ADMIN%203_10.png?alt=media&#x26;token=1bc6cfc3-8d40-41b7-9bde-b47fa67b0c90" alt=""><figcaption></figcaption></figure>

<figure><img src="https://982091423-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0vrqZHl1ILvo0CtUQGcH%2Fuploads%2FEcR2COkNYHZZ35wMRdk1%2FGET%20ADMIN%203_11.png?alt=media&#x26;token=cd9520f2-a606-40b8-93b7-dacbbd407597" alt=""><figcaption></figcaption></figure>

#### STEP\_11) 게시판 페이지로 이동

<figure><img src="https://982091423-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0vrqZHl1ILvo0CtUQGcH%2Fuploads%2FXenU5BjjlMHUKBCxiExL%2FGET%20ADMIN%203_12.png?alt=media&#x26;token=3c892e72-0a2e-4206-a33c-c0df67b94bfa" alt=""><figcaption></figcaption></figure>

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

<figure><img src="https://982091423-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0vrqZHl1ILvo0CtUQGcH%2Fuploads%2FqSgzOyqGOLxgS69y4DNW%2FGET%20ADMIN%203_13.png?alt=media&#x26;token=8df98427-5bb2-4da5-b283-633e8c23008d" alt=""><figcaption></figcaption></figure>

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

앞서 <mark style="background-color:purple;">**GET method로 요청을 변환해 서버로 보냈지만 응답이 오지 않았기 때문**</mark>에&#x20;

우리는 <mark style="background-color:purple;">**POST method로 CSRF 공격을 수행해야 하는 상황**</mark>이고&#x20;

POST method로 CSRF 공격을 한다는 건, <mark style="background-color:purple;">**form tag를 활용한 스크립트를 작성해야 한다**</mark>는 뜻이다.

#### STEP\_13) 게시물 본문에 스크립트 작성

<figure><img src="https://982091423-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0vrqZHl1ILvo0CtUQGcH%2Fuploads%2FlUmQmcZUgEzoe84DaKPp%2FGET%20ADMIN%203_14.png?alt=media&#x26;token=7e77fe75-c926-4c16-a0ea-8029c7a5b2e3" alt=""><figcaption></figcaption></figure>

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

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

#### STEP\_14) STEP\_13에서 작성한 게시물 클릭

<figure><img src="https://982091423-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0vrqZHl1ILvo0CtUQGcH%2Fuploads%2FobmHno2As5zYxh8bsyS1%2FGET%20ADMIN%203_15.png?alt=media&#x26;token=2fccb181-6b14-436e-8c9b-b294bb76d883" alt=""><figcaption></figcaption></figure>

#### STEP\_15) 스크립트 실행 여부 파악

<figure><img src="https://982091423-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0vrqZHl1ILvo0CtUQGcH%2Fuploads%2FzVSvzdu4KWF3Y7in1YId%2FGET%20ADMIN%203_16.png?alt=media&#x26;token=88e6108d-869e-4e70-884e-5193fa7ff3e1" alt=""><figcaption></figcaption></figure>

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

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

#### STEP\_16) CSRF 공격을 수행하기 위해 스크립트 작성

<figure><img src="https://982091423-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0vrqZHl1ILvo0CtUQGcH%2Fuploads%2FE9yt7NRZx25NU37DvDXb%2FGET%20ADMIN%203_17.png?alt=media&#x26;token=517a5563-8c57-4019-be8d-3f0878db216f" alt=""><figcaption></figcaption></figure>

#### STEP\_17) STEP\_16에서 작성한 게시물 주소를 admin에게 전달

<figure><img src="https://982091423-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0vrqZHl1ILvo0CtUQGcH%2Fuploads%2FEiLyxkctbwvRPFa0uEKj%2FGET%20ADMIN%203_18.png?alt=media&#x26;token=b2e8566a-dfd4-4149-a550-23c98891af98" alt=""><figcaption></figcaption></figure>

#### STEP\_18) 현재 로그인한 계정에서 로그아웃

<figure><img src="https://982091423-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0vrqZHl1ILvo0CtUQGcH%2Fuploads%2FDBxTQjrsr61H2yF5VK3Z%2FGET%20ADMIN%203_19.png?alt=media&#x26;token=8fab9e72-3c22-4344-a6d9-3252502153e6" alt=""><figcaption></figcaption></figure>

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

<figure><img src="https://982091423-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0vrqZHl1ILvo0CtUQGcH%2Fuploads%2FJWpax5qjnx9uj7yOfBdZ%2FGET%20ADMIN%203_20.png?alt=media&#x26;token=62260867-b5ad-43e9-ac70-db86980cb645" alt=""><figcaption></figcaption></figure>

#### STEP\_20) admin 계정으로 로그인 성공 시 결과 화면&#x20;

<figure><img src="https://982091423-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0vrqZHl1ILvo0CtUQGcH%2Fuploads%2F0eySI7So8qJBFztU71ea%2FGET%20ADMIN%203_21.png?alt=media&#x26;token=7975ddbb-e104-4d34-a740-713655ccbe33" alt=""><figcaption></figcaption></figure>
