每天分享更多黑客技能,工具及体系化视频教程(免费领)

一、背景

在本篇文章当中会一permeate生态测试系统为例,参考文档:利用PHP扩展Taint找出网站的潜在安全漏洞实践(https://segmentfault.com/a/1190000016032501#articleHeader11)

二、漏洞简介

在实践漏洞之前,先大略先容一下XSS漏洞,不过XSS的干系观点先容并不是本文的重点,因此不会过多细讲;

php中的xss漏洞若何快速找出网站中可能存在的XSS破绽 Vue.js

如果事理都懂,可以直接跳过往下翻至第三节

XSS的漏洞类型紧张分为三类:反射型、存储型、DOM型

2.1 漏洞成因

XSS的漏洞紧张成因是后端吸收参数时未经由滤,导致参数改变了HTML的构造,如下图所示

在图中可以看到攻击者的参数被原样放到了HTML代码当中,导致原来的构造被改变,当这份代码被浏览器实行之后,将实行alert事宜。

2.2 反射型

反射型XSS的定义是、如果URL地址当中的恶意参数会直接被输出到页面中,导致攻击代码被触发,便称之为反射型XSS,如下图所示

在图中可以看到,此处原来是输入一个名字,单实际通报了一个script标签,此标签也被原样放到了HTML构造当中,结果script标签代码中的代码被触发

2.3 存储

存储型XSS,顾名思义便是恶意参数被存储起来了,常日存储在后端做事器当中,以是存储型XSS在URL地址当中不会包含恶意参数

对付受害者来说,很难创造已经被攻击了,如下图存储型XSS被触发

在图中并没有在URL地址当中看到script代码

但是攻击代码依然被触发,解释攻击代码来自于做事器,而这个攻击代码确实是由攻击者通报到做事器当中去的。

一样平常情形下,当攻击者将攻击代码通过表单通报到做事器当中去,会得到一个新页面的地址,这个地址中URL并没有明显非常,比如如下URL地址

http://permeate.songboy.net/article/1

但当存在存储型XSS时,受害者打开此URL,攻击代码将会被触发,这种情形下便称之为存储型XSS漏洞。

2.4 DOM型

DOM型XSS较为分外,前面反射型XSS和存储型XSS都因此传播办法来区分的,而DOM型XSS和传参办法无关

而是当开拓者做了一些安全防护之后,涌现安全问题的一种征象,如下图所示

在图片中,可以看到参数name已经利用函数转义了,按理说此时将参数通报到前端页面是不会产生XSS漏洞的;

但当JavaScript代码将参数进行DOM节点操作之后,原来被转义的代码又会被还原,因此还是会被触发,如下图所示

在图中看到XSS代码已经被触发,这种DOM型XSS相对来说更加暗藏

以是防御XSS漏洞的不能仅仅依赖后端开拓者,前端开拓者也应该理解XSS漏洞。

三、反射型挖掘

经由上面的事理先容,相信大家对XSS已经有一些理解,现在须要进行手工XSS漏洞挖掘,在手工挖掘之前须要先走走网站有哪些功能点

如下图是permeate的界面

3.1 思路剖析

在知道反射型XSS,是通过URL地址传播的,那么就须要思考那些地方会让URL地址的参数在页面中显示;

相信你们都用过一些网站的站内搜索,在站内搜索的位置每每会将搜索的关键词展示在页面当中,如下图所示

而在首页也瞥见此网站有搜索功能,因此可以从搜索位置动手,可以在搜索位置输入一个大略的payload,参考如下

<script>alert(123)</script>

当点击搜索后,会自动跳转到以下URL当中,此时浏览器的URL地址已经发生了变革,URL地址如下:

http://permeate.songboy.net/home/search.php?keywords=<script>alert(123)</script>

搜索的表单是利用了GET传参,知足了测试反射型的第一步哀求

3.2 漏洞考验

接下来就须要看看payload有没有被触发,结果很意外,不但没有被触发回被浏览器所阻挡了,如下图

这里就须要跟读者解释一下,谷歌内审阅读器自带XSS筛选器,以是对付反射型XSS测试,只管即便不该用谷歌浏览器,建议利用火狐浏览器进行测试;

3.3 结果剖析

现在将上面的URL地址复制下来,并粘贴到火狐浏览器当中,并按下回车,看到效果如下图

此时payload已经被触发,解释找到了一个反射型XSS的漏洞,这种漏洞相对来说非常低级,随着浏览器的XSS筛选器变得更加智能,这种漏洞也越来越少,不才面的内容当中将会提到存储型XSS挖掘与绕过。

四、存储型挖掘

现在来探求存储型XSS,存储型的攻击代码是存储在做事端,因此须要找出一些会将表单内容存储到做事真个位置

在之前已经对permeate做了一番理解,因此知道permeate拥有发帖和回帖功能,这些功能正是须要将参数存储起来并展示的地方。

4.1 创造漏洞

在首页点击XSS板块,进入到了板块列表当中,如下图

在右下角能看到有一个发帖按钮,点击发帖按钮后,即可进入发帖界面,如下图

在permeate渗透测试系统当中,如果要揭橥帖子,那么就须要有账号,这里随便注册一个账号,注册过程就不详细讲解了

4.2 考验漏洞

在注册账号完成并上岸之后,再次打开拓帖页面,并在标题处和内容处都填写payload,参考内容如下:

<script>alert(123)</script>

在标题处和帖子内容等分别填写payload,填写好之后,应与下图同等

填写好内容之后,点击下方的揭橥按钮,即可进行发帖,发帖成功会弹出一个提示成功,如下图所示

点击确定之后,会跳转到发帖列表,并弹出一个123的提示框,如下图所示

如果看到这个弹框,解释payload已经被实行,点击确定就可以看到列表的内容,如下图所示

在列表中只显示标题,以是帖子内容中的payload并没有被实行;

4.3 抓包绕过

现在点击标题,进入帖子详情页面,在详情页创造payload也只触发了一次,而且内容当中的标签被直接显示了出来,如下图

当标签被直接显示出来,这解释参数被转义了;

转义分为两种,前端转义和后端转义,如果是后端转义常日会放弃测试,如果是前端转义则可以绕过这个限定;

在这里创造标题没有被转义,而内容被转,预测可能是前端做的转义,因此可以通过浏览器的审核对象将数据包拷贝下来;

首先重新打开拓帖页面,然后在网页随便一个位置单击鼠标右键->选择审查元素->切换到network标签并勾选Preserve log,

打开网络并勾选Preserve log的目的是让揭橥帖子之后

能在网络要求中找到该记录,现在可以填写新的payload,如下图

点击揭橥按钮之后,可以在掌握台中找到刚才的post要求

从要求中可以看出,这个数据发出去就已经被转义了,如下图

4.4 编码更换

当确定这个地方存在前端做了转义处理,如果后端没有做处理,

就可以绕过它,现在将要求复制出来,然后改变里面的数据,如下图

复制出来的数据如下

curl 'http://permeate.songboy.net/home/_fatie.php?bk=6&zt=0' -H 'Connection: keep-alive' -H 'Cache-Control: max-age=0' -H 'Origin: http://permeate.songboy.net' -H 'Upgrade-Insecure-Requests: 1' -H 'Content-Type: application/x-www-form-urlencoded' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8' -H 'Referer: http://permeate.songboy.net/home/fatie.php?bk=6' -H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8' -H 'Cookie: __cfduid=defc970ef7081e30aedd761da5762b1891532003579; UM_distinctid=1655a61a23343c-03f0904540a333-34657908-1fa400-1655a61a234323; PHPSESSID=rufhm0741qfv55cpfnc80k1g4l' --data 'csrf_token=3908&bk=6&title=222%3Cscript+%3Ealert%28123%29%3C%2Fscript%3E&content=%3Cp%3E222%26lt%3Bscript+%26gt%3Balert%28123%29%26lt%3B%2Fscript%26gt%3B%3C%2Fp%3E' --compressed

找到参数中的title和content参数值,将title的参数值复制下来,然后更换content的参数值,更换后的内容如下

curl 'http://permeate.songboy.net/home/_fatie.php?bk=6&zt=0' -H 'Connection: keep-alive' -H 'Cache-Control: max-age=0' -H 'Origin: http://permeate.songboy.net' -H 'Upgrade-Insecure-Requests: 1' -H 'Content-Type: application/x-www-form-urlencoded' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8' -H 'Referer: http://permeate.songboy.net/home/fatie.php?bk=6' -H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8' -H 'Cookie: __cfduid=defc970ef7081e30aedd761da5762b1891532003579; UM_distinctid=1655a61a23343c-03f0904540a333-34657908-1fa400-1655a61a234323; PHPSESSID=rufhm0741qfv55cpfnc80k1g4l' --data 'csrf_token=3908&bk=6&title=222%3Cscript+%3Ealert%28123%29%3C%2Fscript%3E&content=222%3Cscript+%3Ealert%28123%29%3C%2Fscript%3E' --compressed

更换完成之后,将此内容复制到终端当中(如果用的是windows操作系统,可以下载一个cmder),然后按下回车键,结果如下图

4.5 结果剖析

在返回结果当中可以看到提示发帖成功,此时就已经成功发布了一个新帖子,回到帖子列表当中看到有三条帖子,在末了面的帖子则是新发布的,如下图

打开详情页,被弹了两次提示框,解释标题和内容当中的payload都被触发,并且在掌握台当中也可以看到script变成了DOM节点,而不是文本展现出来,如下图所示

看到此处解释已经成功绕过前端XSS过滤器

本日你会废了嘛

作者:汤青松

地址:https://zhuanlan.zhihu.com/p/42604854