본 실습은 DVWA에서 실행할 예정이다.
DVWA 설치에 대해서는 아래 게시물을 참조하자.
[웹 해킹] 1. 웹 해킹 연습을 위한 DVWA 설치하기
웹 해킹 연습을 위해 아무 사이트나 해킹하는 것은 엄연한 불법이다.하지만 그렇다고 해서 연습을 안 할 수는 없는 법. 이 때 사용하는 것이 DVWA이다. DVWA(Damn Vulnerable Web Application)은 웹 보안 교
mr-relax.tistory.com
먼저 왼쪽 메뉴에서 Reflected XSS를 클릭해 보자.
들어가면 다음과 같은 화면을 볼 수 있다.
이름을 입력하면 입력한 이름을 반환하는 형식의 사이트이다.
다음과 같은 결과를 보여준다.
1. Low 단계에서의 Reflected XSS 공격
먼저 DVWA 난이도를 Low로 설정한다.
난이도 설정에 대해서는 아래 글을 참고한다.
[웹 해킹] 2. DVWA 보안 난이도 조정하기
DVWA를 실행하면 다음과 같은 화면이 나타난다.우선 왼쪽 메뉴 중 DVWA Security를 클릭하자. 여기서는 DVWA의 보안 난이도를 정할 수 있다.지금은 Impossible로 되어 있는데 이 난이도는 해킹이 거의
mr-relax.tistory.com
빈 칸에 다음과 같이 입력해 본다.
<script>alert(document.cookie)</script> |
그러면 쿠키 정보가 화면에 출력되는 것을 볼 수 있다.
XSS 공격이 성공한 것이다.
2. Medium 단계에서의 Reflected XSS 공격
난이도를 Medium으로 높이면 Low에서는 성공했던 공격이 이뤄지지 않는다.
<script>와 </script>를 인식하지 못하도록 코딩한 듯 하다.
Medium 단계의 소스를 보자.
XSS를 방어한 소스 부분은 다음과 같다.
<script>라는 문구가 입력되면 이를 빈 칸으로 바꾸는 것이다.
$name = str_replace( '<script>', '', $_GET[ 'name' ] ); |
그렇다면 다른 방식으로 공격을 해 보자.
입력창에 아래와 같이 입력하자.
<SCRIPT>를 대문자로 입력한 것이다.
<SCRIPT>alert(document.cookie)</script> |
공격이 성공하는 것을 볼 수 있다.
이번에는 다음과 같이 입력해 보자.
이것도 공격이 성공하는 것을 볼 수 있다.
<s<script>cript>alert(document.cookie)</script> |
Medium 단계에서의 XSS 방어 코드는 <script>를 하나밖에 인식할 수 없다.
따라서 <s<script>cript>처럼 이중으로 코드를 입력하면
가운데 <script>를 공백으로 만들어 버리기 때문에 XSS공격이 성공하는 것이다.
3. High 단계에서의 Reflected XSS 공격
난이도를 High로 높여 보자.
High의 소스는 다음과 같다.
High 단계에서는 script를 대문자로 입력해도,
<script>를 이중화 해도 공격이 먹히지 않는다.
이 경우 다른 방법을 사용해야 한다.
빈 칸에 다음 명령어를 입력해 보자.
<img src=x onerror=alert(document.cookie)> |
img src는 원래 그림을 삽입하는 태그이며
onerror는 그림 삽입에 실패했을 때 대체할 행동을 정의할 때 사용한다.
img src에 의도적으로 존재하지 않는 값을 삽입하고
onerror에 악성 스크립트를 삽입한 형식의 공격이다.
이를 입력하면 다음과 같이 공격이 성공하는 것을 볼 수 있다.
이번에는 입력 창에 다음과 같이 입력해 보자.
위와 마찬가지로 xss 공격이 성공하는 것을 볼 수 있다.
<svg onload=alert(document.cookie)> |
원래 svg는 벡터 이미지를 정의할 때 사용한다.
onload는 요소가 로드될 때 실행하는 이벤트 핸들러이다.
이 방법을 사용하면 <script> 태그를 사용하지 않아도 xss 공격을 할 수 있다.
4. Impossible 단계에서의 Reflected XSS 공격
Impossible 단계에서는 모든 XSS 공격이 통하지 않는다.
다만 이 단계의 소스 코드를 공부하는 것은 XSS 방어법을 공부하는데 도움이 된다.
소스는 다음과 같다.
위 소스 중 XSS를 방어하기 위해 추가된 소스는 아래와 같다.
$name = htmlspecialchars( $_GET[ 'name' ] ); |
htmlspecialchars는 입력한 문자열 중 몇몇 특수문자를 HTML 엔티티로 변환시킨다.
이를 통해 변환되는 문자는 다음과 같다.
변환 전 | 변환 후 |
< | < |
> | > |
& | & |
" | " |
' | ' |
이로 인해 XSS 공격을 시도해도 브라우저에서는 HTML 태그가 아닌 단순한 텍스트로 인식한다.
'모의 해킹' 카테고리의 다른 글
[웹 해킹] 7. 저장형 XSS(Stored XSS) 공격과 방어 (0) | 2024.07.09 |
---|---|
[웹 해킹] 5. 크로스 사이트 스크립팅(XSS) 개요 (0) | 2024.07.05 |
[웹 해킹] 4. SQL Injection 방어_Prepared Statements (0) | 2024.07.02 |
[웹 해킹] 3. SQL Injection 공격 (0) | 2024.06.28 |
[웹 해킹] 2. DVWA 보안 난이도 조정하기 (0) | 2024.06.26 |