기본적으로 자바스크립트 코드를 페이지내에 주입하려고 시도하는 것입니다
또한 대상을 탐색하고 텍스트 상자 또는 URL 파라미터를 사용하고 있는 form에 주입하려고 시도한느 것입니다
대상 사이트의 URL이 http://target.com/page.php?something=something 라고 가정합니다
이 때 URL은 파라미터를 사용하고 있으므로 something 파라미터의 매개변수에 자바스크립트 코드를 주입 하려고 시도합니다
http://target.com/page.php?something=<script>alert("XSS")</script>
먼저 Reflected XSS입니다
특징으로
실습을 위해 DVWA에 접속했습니다
XSS Reflected 탭으로 이동했습니다
이름을 입력하는 form을 확인하고 테스트를 위해 입력해봤습니다
사용자의 입력값을 그대로 보여주고 있다는 결과를 확인할 수 있습니다
<script>alert("XSS")</script>
라는 간단한 자바스크립트를 작성 후 주입했습니다
XSS 취약점을 발견했습니다
또한 URL을 이용하여 시도했습니다
dvwa/vulnerabilities/xss_r/?name=<script>alert("XSS")<%2Fscript>#
간단한 자바스크립트를 주입한 후 URL을 확인해보면 특수문자는 HTML 이스케이프 문자를 사용하고 있는 것을 확인할 수 있었습니다
URL 파라미터에서도 같은 작업을 진행했습니다
dvwa/vulnerabilities/xss_r/?name=<script>alert("XSS")</script>
위와 똑같이 경고창이 발생하는 것을 확인할 수 있었습니다
URL을 배포하고 희생자가 해당 URL을 클릭한다면 희생자의 컴퓨터에서 스크립트가 실행될 것입니다
보안 수준이 Low 레벨에서 브라우저의 Inspect 기능을 사용했습니다
Hello라는 문자는 웹페이지에 생성되어 있으며 주입한 소스코드는 그 이후에 위치하여 실행되고 있었습니다
DVWA의 보안 수준을 중간단계로 이동하고 또한 실습을 진행했습니다
똑같은 페이로드를 사용하여 진행했습니다
<script>alert("XSS")</script>
자바 스크립트의 기능은 실행되지 않고 alert("XSS")라는 문자가 그대로 보여지는 것을 확인했습니다
마찬가지로 Inspect 기능을 활용하여 소스 코드를 확인했습니다
이전과 다르게 스크립트 태그가 필터링되어서 삭제된 후 문자만 보이도록 되어있다고 확인할 수 있었습니다
SQL 인젝션 부분에서도 사용했던 것과 비슷하게 일부 문자를 대문자로 변경하면 이를 우회할 수도 있습니다
이제 변경한 페이로드를 사용하여 주입을 시도했습니다
<sCripT>alert(’xss’)</scRipt>
정상적으로 동작하고 있습니다
또한 이러한 XSS를 위한 치트 시트가 존재합니다
해당 치트 시트에는 XSS 우회하는 스크립트나 여러가지 스크립트가 존재합니다
그 중에 하나를 예시로 사용해봤습니다
<IMG SRC=/ onerror="alert(String.fromCharCode(88,83,83))"></img>
이미지에 대한 잘못된 소스코드를 제공하여 오류가 있을 때 실행되는 onerror를 이용한 XSS 스크립트 방법입니다
이 또한 정상적으로 동작하는 것을 확인했습니다