XSS Point 3

DATE : 2023/12/22

앞선 POST와 마찬가지로 로그인을 한 후, 다음 내용을 진행하도록 하자.

이번에도 마이페이지부터 탐색을 시작하지 😏

마이페이지에 들어가면 위와 같이 개인정보를 수정할 수 있는 FORM을 볼 수 있을 것이다.

마이페이지로 접속할 때 서버로 전달된 Packet을 보면

mypage.php?user=hanhxx

user parameter를 통해 현재 로그인한 사용자 ID가 전달되고 있는 걸 볼 수 있다.

이때 user parameter로 전달된 값이 Response에 있는 첫 번째 <input>의 placeholder 내용과

동일한 상태임을 확인할 수 있다.

이는 Reflected XSS를 실행하기 위해서

"parameter를 통해 전달된 값이 응답 페이지에 바로 출력된다"는 조건을 만족하고 있는 것이다.

그렇다면 user parameter 값이 정말placeholder에 사용되고 있는 게 맞는지 확인해볼 필요가 있다.

mypage.php?user=yunsoo

그래서 user parameter 값을 hanhxx -> yunsoo로 바꿔보았다.

그 결과, placeholder 값이 user parameter에 입력한 값으로 수정됨을 확인할 수 있다.

즉 현재 mypage.php에서는 user parameter로 전달된 값을 가져다가

사용자 ID 정보로 출력하고 있는 것이다.

parameter 값에 따라 응답이 달라짐을 확인했으니, 이번엔 스크립트를 삽입하기 위해

특수 문자를 사용할 수 있을 지의 여부를 파악해보자.

user=hanhxx><"'

총 4개의 문자를 덧붙여 Packet을 보내면

성공적으로 응답 속에 특수 문자 4개가 출력 되는 것을 확인할 수 있다.

그렇다면 이제 스크립트를 실행해볼 수 있다는 가능성이 확 열린다!

user=hanhxx   ->   <input placeholder="hanhxx" />

현재 user parameter가 들어가는 위치를 확인해보면 큰 따옴표로 감싸진 동시에

뒤에는 /> 가 <input> tag를 마감하고 있다.

아래와 같은 스크립트를 실행하기 위해서는

<script>alert(1)</script>

placeholder로 들어가는 값은 모두 문자열이 되어버리기 때문에

일단 큰 따옴표를 앞에 붙여 placeholder 자리에서 빠져나온 다음,

<input> tag 안에 <script>를 작성할 순 없으니 tag를 끝내기 위해 /> 기호도 적어준다.

hanhxx"/><script>alert(1)</script>

user parameter에 위와 같은 값을 삽입하게 되면

<input placeholder="hanhxx"/> <script>alert(1)</script> />

결과적으로 <input> tag를 마무리하고 <script> tag를 작성한 형태가 되기 때문에

문자열이 아닌, 스크립트로써 동작할 수 있게 될 것이다.

Repeater에서 먼저 확인해보면,

설명한 바와 같이 <input> tag 뒤에 <script> tag가 삽입된 형태임을 볼 수 있다.

Response 상에서는 성공적으로 스크립트가 출력 되었으니,

마지막으로 브라우저에서 스크립트가 동작하는 지 확인해보자.

URL 바에 user parameter 값을 입력하면 위와 같이 성공적으로 팝업 창이 띄워진다!

이로써 XSS Point 찾기 - 세 번째 문제는 Reflected XSS로 해결! 👍

Last updated