Web安全防护:高级XSS攻击(漏洞挖掘)
XSS漏洞类型主要分为三类:反射型、存储型、DOM型。在本文中,我们将通过环境测试渗透以系统为例,分析网络的功能,引导攻击思路,帮助读者快速发现网络可能存在的漏洞。
反射分析
我们知道反射型XSS大多是通过URL传播的,所以我必须考虑URL参数出现在页面的什么位置。我相信大多数读者脑子里的第一直觉就是搜索栏。特别是在本地搜索一些大网站时,搜索关键字会出现在当前页面上。比如搜索引擎:
我们测试的首页也有网页搜索功能,所以我们可以从搜索功能开始测试,看看是否可以进行XSS Payload。首先我们输入一个简单的Payload进行测试。测试代码为
当我们单击搜索按钮时,URL 应自动更改为 http://localhost:8888/home / search.php?keywords=
操作流程
我们来试试:
先输入搜索内容
然后搜索我们发现Google Chrome居然直接屏蔽了该事件,并且Payload没有启动。我必须告诉读者,Chrome核心带有一个XSS过滤器,可以自动捕获反弹的XSS,所以尽量不要使用Chrome进行测试。我们切换到 Firefox 并继续测试:
我们的 Payload 直接运行。
结果分析
该payload正在运行,这意味着我们发现了XSS漏洞。这个漏洞当然是非常初级的。大多数网站都进行了过滤操作。另外随着浏览器功能的增加,随着浏览器附带的XSS过滤器变得越来越强大,这种漏洞将变得越来越罕见。下面我将测试挖掘更常见的存储型 XSS,并展示如何解决它。
存储式XSS挖掘
思路分析
服务器端存在存储式XSS攻击代码。因此,我们需要找到一个网站功能来在后台存储数据。我们了解这个网站。你会发现permeate有发帖和回复功能。这是网站与后台沟通的渠道。所有帖子信息将存储在服务器上。有了这些信息,我们就可以进入该部分并进行发送操作了:
进入发送界面:
漏洞检测
现在我们在名称和内容中填写主要Payload:
https://www.cainiaoxueyuan.com/anquan/123 alert('https://www.cainiaoxueyuan.com/anquan/123' )
我们继续发布操作:
页面直接启动我们的Payload。我们点击确定,显示列表:
当我们进入帖子时,我们发现以下场景:
文章主体部分的Payload显然没有发生。究竟发生了什么发生了什么?
抓包
为什么标题内容可以加载而主内容却加载不出来?我们打开控制台,切换到网络再发个帖子看看:
可以看到对应的内容被泄露了。转义有两种,前端转义和后端转义。如果是后端转义,我们通常不需要测试,因为我们不知道服务器的内部代码。如果涉及到前端转义,Escaping可以绕过这个限制。
那该怎么办呢?
我们复制 URL
curl 'http://localhost:8888/home/_fatie.php?bk=5&zt=0' -H 'Connection: keep-alive' -H 'Cache-Control: max-age = 0' -H '来源:http://localhost:8888' -H '升级不安全请求:https://www.cainiaoxueyuan.com/anquan/1' -H '内容类型:application/x-www-form-urlencoded' -H '用户代理: Mozilla/5.0 (Macintosh; Intel Mac OS;q=0.9,image/webp,image/apng,*/*;q=0.8' -H 'Referer: http://localhost:8888/home/fatie.php ? bk =5' -H '接受编码:gzip、deflate、br' -H '接受语言:zh-CN,zh;q=0.9,en;q=0.8' -H 'Cookie: PHPSESSID=7690435026da38e20daf8a8' - - 数据'csrf_token=9https://www.cainiaoxueyuan.com/anquan/19https://www.cainiaoxueyuan.com/anquan/1&bk=5&title=https://www.cainiaoxueyuan.com/anquan/123%3Cscript%3Econsole.log%28232%29%3C%2Fscript%3E&content=%3Cp%3Ehttps://www.cainiaoxueyuan.com/anquan/123%26lt%3Bscript%26gt%3Bconsole.log%28262%2%2Fscript%26gt% 3B %3C%2Fp% 3E' --compressed
查找标题和内容,并将内容替换为标题内容:
curl 'http://localhost:8888/home/_fatie.php?bk=5&zt=0' -H '连接:保持活动' -H '缓存控制:max-age=0' - H '来源:http://localhost:8888' -H '升级不安全请求:https://www.cainiaoxueyuan.com/anquan/1' -H '内容类型:application/x-www-form-urlencoded' -H '用户代理:Mozilla/ 5.0 (Macintosh; Intel Mac OS,image/webp,image/apng,*/*;q=0.8' -H 'Referer: http://localhost:8888/home/fatie.php?bk=5' -H '接受-编码:gzip、deflate、br' -H '接受语言:zh-CN,zh;q=0.9,en;q=0.8' -H 'Cookie: PHPSESSID=7690435026da386df8a80e63f3da&2089' --9https://www.cainiaoxueyuan.com/anquan/1btok_en =https://www.cainiaoxueyuan.com/anquan/123%3Cscript %3Econsole .log%28232%29%3C%2Fscript%3E&content=https://www.cainiaoxueyuan.com/anquan/123%3Cscript%3Econsole.log%28232%29%3C%2Fscript%3E' --compressed
交换完成后,将此内容复制到终端并运行:
返回主页查看相关内容:
Payload被执行了两次,内容也被泄露。
结果分析
这说明我们已经成功绕过了前端XSS过滤,直接修改了内容,所以后端转义有时是必要的。
总结
漏洞研究是一个复杂的过程。手动挖矿是一种可靠的方法,但手动挖矿效率低下,有时还要看运气。目前,有很多自动检测XSS漏洞的工具和平台,这大大提高了漏洞检测的有效性,我将在接下来的章节中介绍一些工具以及如何防御XSS。
作者:梁寅
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网
