XSS Point 3
DATE : 2023/12/22
Last updated
DATE : 2023/12/22
Last updated
앞선 POST와 마찬가지로 로그인을 한 후, 다음 내용을 진행하도록 하자.
이번에도 마이페이지부터 탐색을 시작하지 😏
마이페이지에 들어가면 위와 같이 개인정보를 수정할 수 있는 FORM을 볼 수 있을 것이다.
마이페이지로 접속할 때 서버로 전달된 Packet을 보면
user parameter를 통해 현재 로그인한 사용자 ID가 전달되고 있는 걸 볼 수 있다.
이때 user parameter로 전달된 값이 Response에 있는 첫 번째 <input>의 placeholder 내용과
동일한 상태임을 확인할 수 있다.
이는 Reflected XSS를 실행하기 위해서
"parameter를 통해 전달된 값이 응답 페이지에 바로 출력된다"는 조건을 만족하고 있는 것이다.
그렇다면 user parameter 값이 정말placeholder에 사용되고 있는 게 맞는지 확인해볼 필요가 있다.
그래서 user parameter 값을 hanhxx -> yunsoo로 바꿔보았다.
그 결과, placeholder 값이 user parameter에 입력한 값으로 수정됨을 확인할 수 있다.
즉 현재 mypage.php에서는 user parameter로 전달된 값을 가져다가
사용자 ID 정보로 출력하고 있는 것이다.
parameter 값에 따라 응답이 달라짐을 확인했으니, 이번엔 스크립트를 삽입하기 위해
특수 문자를 사용할 수 있을 지의 여부를 파악해보자.
총 4개의 문자를 덧붙여 Packet을 보내면
성공적으로 응답 속에 특수 문자 4개가 출력 되는 것을 확인할 수 있다.
그렇다면 이제 스크립트를 실행해볼 수 있다는 가능성이 확 열린다!
현재 user parameter가 들어가는 위치를 확인해보면 큰 따옴표로 감싸진 동시에
뒤에는 /> 가 <input> tag를 마감하고 있다.
아래와 같은 스크립트를 실행하기 위해서는
placeholder로 들어가는 값은 모두 문자열이 되어버리기 때문에
일단 큰 따옴표를 앞에 붙여 placeholder 자리에서 빠져나온 다음,
<input> tag 안에 <script>를 작성할 순 없으니 tag를 끝내기 위해 /> 기호도 적어준다.
user parameter에 위와 같은 값을 삽입하게 되면
결과적으로 <input> tag를 마무리하고 <script> tag를 작성한 형태가 되기 때문에
문자열이 아닌, 스크립트로써 동작할 수 있게 될 것이다.
Repeater에서 먼저 확인해보면,
설명한 바와 같이 <input> tag 뒤에 <script> tag가 삽입된 형태임을 볼 수 있다.
Response 상에서는 성공적으로 스크립트가 출력 되었으니,
마지막으로 브라우저에서 스크립트가 동작하는 지 확인해보자.
URL 바에 user parameter 값을 입력하면 위와 같이 성공적으로 팝업 창이 띄워진다!
이로써 XSS Point 찾기 - 세 번째 문제는 Reflected XSS로 해결! 👍