Stored XSS : LAB [2]
DATE : 2024/1/8
Last updated
DATE : 2024/1/8
Last updated
이번 LAB도 앞에서 푼 Stored XSS : LAB [1]과 마찬가지로 팝업 창을 띄우는 것이 최종 목표이다.
LAB으로 접속해 블로그를 하나 선택해준다!!
이전 LAB을 풀었던 방식대로 댓글 창에 스크립트를 삽입해보았다.
작성한 댓글은 Comments 에서 확인할 수 있는데
스크립트가 화면에 출력 되는 걸 보면 스크립트가 아닌 문자열로 처리된 거라 예측할 수 있을 것이다.
이 페이지의 Response를 확인해봤더니
태그를 삽입하기 위해 사용한 angle bracket 기호가 대체 문자로 치환되고 있음을 발견했다..!
혹시나 해서 Name에도 스크립트를 작성해봤지만
Comment와 동일하게 HTML entity 처리가 되어 특정 기호가 치환 되고 있음을 확인했다.
그렇다는 건 Comment & Name에는 스크립트를 삽입할 수 없다는 뜻으로
다른 포인트를 찾아봐야 한다.
댓글 창에는 Comment & Name을 제외하고 Email & Website를 입력하는 칸이 제공되는데
이 중에서도 Website에 어떤 데이터를 입력하면 아래와 같이
Name에 입력한 값에 링크가 걸리는 걸 확인할 수 있을 것이다.
링크 내용을 확인하기 위해 Name에 마우스를 가져다 올리면
좌측 하단에서 위와 같은 URL을 확인할 수 있다.
이때 URL 내용을 확인해보면 사용자가 Website에 입력했던 값임을 알 수 있는데
사용자가 위와 같이 댓글을 입력했다고 할 때 Packet 상에서 이 부분을 찾아보면
Website에 입력한 값이 <a> tag에 href 속성으로 들어가는 걸 파악할 수 있을 것이다.
앞에서 확인했던 정보를 토대로 정리해보면 사용자가 데이터를 서버에 저장할 수 있는 부분은
Comment, Name, Email, Website이고 Comment, Name은 <script> tag를 삽입할 수 없는 상태이다.
그 와중에 Website에 입력한 내용이 <a> tag - href 속성으로 들어간다는 사실을 알게 되었다.
만약 href 속성에 팝업 창을 띄우기 위한 javascript 내용을 삽입한다면
<script> tag를 넣을 필요 없이 스크립트를 실행할 수 있을 지도 모른다.
공격을 시도해보기 위해 Website에 javascript 내용을 작성해 서버로 보내 보았다.
스크립트를 포함하는 Website 내용을 보낸 뒤, 다시 블로그로 들어가 Name을 누르면
Name에 걸린 링크 javascript:alert(1)이 실행되면서 팝업 창이 뜨는 걸 볼 수 있다. 👍