본문 바로가기
Portswigger/XSS

Portswigger - DOM XSS in innerHTML sink using source location.search solution

by jh117jh 2023. 8. 25.
728x90

저번 문제와 동일하게 검색기능에 DOM-based XSS 취약점이 존재하고 이번에 innerHTML을 사용해 div요소의 HTML내용을 바꿀라 한다. alert함수를 호출하면 문제가 풀린다.

 

script문을 입력했을때 

입력값이 출력되지 않아 처음엔 필터링이 되어 있는 줄 알았다.

script문뿐만 아니라 태그(<>)를 사용하면 태그 안에 내용이 출력되지 않았다.

 

찾아보니 innerHTML은 <script>태그를 일반 text문자로 인식하게 되어 있다.

이는 code injection과 같은 공격을 방지하기 위해서 그렇다.

https://security.stackexchange.com/questions/60861/why-are-scripts-injected-through-innerhtml-not-executed-whilst-onerror-and-other

 

Why are scripts injected through innerHTML not executed whilst onerror and other on<event> attributes on elements are? - Google

SPOILER ALERT : Do not continue if you do not want to be spoiled I am currently doing the Google XSS Challenge Level 2 . I am injecting XSS code that is inserted into the document using element.

security.stackexchange.com

https://www.w3.org/TR/2008/WD-html5-20080610/dom.html#innerhtml0

 

HTML 5

If the document has an active parser<!--XXX xref-->, then stop that parser, and throw away any pending content in the input stream. what about if it doesn't, because it's either like a text/plain, or Atom, or PDF, or XHTML, or image document, or something?

www.w3.org

 

그래서 우린 다른 방법을 찾아야 되는데

img 태그를 이용하기로 했다.

 

img 태그의 onerror 기능을 사용할 것인데 

<img src="qwe" onerror=alert(0);>로 src에는 이미지의 경로를 쓰고 만약 이미지를 불러오지 못하거나 에러가 났을 경우 onerror가 실행된다. 

 

이 경우엔 일부로 에러를 발생시켜 alert() 함수가 호출되게 한다.

 

 

728x90