XSS - Reflected XSS

2022. 9. 7. 03:32애플리케이션 보안

XSS(Cross Site Scripting) : 공격자가 공격하고자 하는 사이트에 스크립트를 삽입하는 기법으로 해당 사이트에 접속하는 일반 사용자는 공격자가 삽입한 스크립트를 실행시켜 공격을 받게 됩니다.

스크립트는 공격자에 따라 다양하게 작성이 가능하기 때문에 공격 또한  다양하게 가능합니다.

대표적으로 Reflected XSS, Stored XSS, DOM XSS가 있습니다.

 

모의 해킹 실습에는 DVWA를 사용했습니다.

DVWA(Damn Vulnerable web Application) : 웹 취약점에 대한 실습을 할 수 있도록 단계별로 보안이 적용된 웹 애플리케이션 입니다.

 

1. Reflected XSS

Reflect, 반사하다 즉 말 그대로 사용자가 입력한 값을 그대로 실행시켜 사용자한테 보여줍니다.

 

1) 보안 단계 low

 

<script>alert('hinamnor')</script>

- alert은 단순히 경고창을 출력해주는 코드입니다. alert 코드를 사용해서 연습한 이유는 스크립트를 입력했을때 입력한 스크립트가 정상적으로 작동하는지 확인 하기 위해서입니다. 실제 공격은 alert 코드가 아닌 공격 코드가 들어갑니다.

 

 

스크립트가 정상적으로 실행되어 hinamnor이라고 경고창을 띄우는 것을 볼 수 있습니다.

 

Hello 라는 빨간색 문구는 스크립트가 아닌 어떤것을 입력하든 출력이 되며 스크립트가 정상 실행되었을시 Hello만 출력되고 스크립트가 정상 실행되지 않거나 스크립트가 아닌 문장을 입력 했을 때 입력된 문장이 Hello 뒤에 출력 됩니다.

 

좌 스크립트 정상 실행                                                             우 스크립트가 아닌 문장이 입력되었을때 (sir 입력)

 

 

1) 보안 단계 medium


보안 단계를 low -> medium으로 올린뒤 같은 스크립트를 입력 해 보았더니 스크립트가 정상적으로 실행되지 않아 alert('hinmnor')가 Hello 뒤에 출력된것을 확인 할 수 있습니다.

 

 

오른쪽 하단에 View Source 버튼이 있는 것을 볼 수 있습니다. 이 버튼을 통해 입력한 데이터가 어떤식으로 처리되는지 확인 할 수 있습니다.

 

보안 단계가 low일 때 소스코드

 

보안 단계가 medium일 때 소스코드

 

보안 단계가 low 일때와 medium일 때의 차이는 str_replace() 함수임을 알 수 있습니다.

 

 

<script> 태그를  ' '  공백으로 치환 해버리기 때문에 <script>alert('hinamnor')</script> -> alert('hinamnor')</script> 로 바뀌어 스크립트로써의 기능을 못하게 되는 것입니다.

 

* Hello alert('hinamnor')</script>가 아니라 Hello alert('hinamnor')로 출력되는 이유???

 

우회하는 방법?

  • 대문자 사용 (전부 대문자로 변경, 한문자만 대문자로 변경 등)

<Script>, <ScRiPt>, <SCRIPT> 등등

 

  • 이중 태그 사용

<scri<script>pt> : <script> 태그가 공백으로 치환되면 <scri + pt>가 합쳐져 <script> 태그 사용 가능

 

  • 스크립트 태그 안에 속성 추가

<script img=a> : 의미 없는 속성을 추가

<script > : 태그 내부에 공백 추가, 단 script 뒤에 공백 추가해야 합니다. <scr ipt> 이런식의 공백 추가는 스크립트 태그로서의 작동을 하지 않습니다.

 

str_replace() 함수와 같이 치환 하는 방식으로 보안을 강화하는 것은 우회할 수 있는 방법이 많이 있습니다.

그렇기 때문에 치환 방법이 아닌 가장 적절한 대응 방법은 secure coding 함수인 htmlspecialchars() 함수를 사용하는 것입니다.

 

* htmlspecialchars() : 특정한 특수 문자를 HTML 엔티티로 변환해주는 함수입니다.

& : &amp;

" : &quot;

' : &#039;

< : &lt;

> : &gt;

 

 <script>alert('hinamnor')</script> -> &lt;script&gt;alert('hinamnor')&lt;/script&gt;

좌를 입력시 우로 변환 시켜주는 함수인 것입니다. 웹 브라우저를 통해 확인 해보면 정상적으로 보이지만 실제로는 실행 되지 않습니다.

 

보안 단계를 최고인 imppossible로 변경한뒤 소스코드를 확인 하면 htmlspecialchars() 함수를 사용하는 것을 확인 할 수 있으며 스크립트 또한 실행도지 않는 것을 알 수 있습니다.

 

 

 

XSS - Stored XSS (tistory.com)

'애플리케이션 보안' 카테고리의 다른 글

모의해킹 시나리오 - Hashcat  (0) 2023.01.16
CSRF(Cross-Site Request Forgery)  (0) 2022.12.25