본문 바로가기
Portswigger/XSS

Portswigger - Stored XSS into onclick event with angle brackets and double quotes HTML-encoded and single quotes and backslash escaped solution

by jh117jh 2023. 10. 10.
728x90

이번 문제는 onclick 이벤트에서 태그(<,>)와 더블쿼터(")는 HTML인코딩이 되어 있고 싱글쿼터(')와 백슬래쉬(\)는 이스케이프 처리가 되어 있다.

 

우선 onclick 이벤트가 어디 있는지 찾아야 한다.

찾아보니 각 게시물에 댓글 기능에서 댓글 작성 시 작성자 id를 누르면 등록된 웹사이트로 이동되는 onclick 이벤트가 존재한다.

더블쿼터(")와 태그(<,>)는 작동을 안 하고 싱글쿼터(')와 백슬래쉬(\)는 이스케이프 처리 된 걸 확인할 수 있다.

 

id를 누를 시 onclick으로 인해 tracker함수가 실행되고 웹사이트 주소에 입력한 주소값이 호출되게 된다.

 

그럼 임의 주소를 입력(www.naver.com)을 입력하고 뒤에 alert함수를 입력하여 회출하면 될 것 같다.

그러려면 싱글쿼터(')를 해결해야 되는데 이는 간단하게 해결할 수 있다.

 

HTML 엔티티를 사용하면 되는데 

HTML 엔티티란?

HTML 안에서 특수문자를 쓰기 위해 사용하는 예약어이다.

예를 들어 "안녕하세요 저는 <p> 태그 라고 합니다"라는 문장을 출력하고 싶은데 

html에서는 문장 안에 <p>를 태그로 인식해 오류가 나는 것이다.

이를 방지하기 위해 엔티티를 사용한다. (특수문자를 문자열로 인식)

 

위 사진에 나타나있는 게 자주 쓰이는 HTML엔티티다. (싱글쿼터는 &apos;)

 

이를 이용하여 웹사이트에 https: www.naver.com&apos;+alert(0)+&apos;를 입력해 주면

 

alert함수가 호출되는 걸 확인할 수 있다.

728x90