前言
前段时间在先知社区看到一篇文章代码审计之某汽车网源码 。作者介绍了两个sql注入漏洞,我在学习之余对该套代码进行进一步审计也发现了几个有趣的漏洞。
代码结构
1 | admin --后台文件夹 |
越权添加管理员
该漏洞是个几个小漏洞组合而成,待我一一分析。
前台有限制的任意文件包含漏洞
该网站的功能都是直接通过include包含其他php使用的。在入口文件index.php中我们可以看到里面的包含规则:
1 |
|
获取GET传来的$m参数拼接到文件路径中,如果文件存在就直接包含。当然这里也对$m参数也进行路径穿越的过滤,但是绕过并不是很难。
过滤代码在include/function.func.php
22-32行之间,如下
1 | function _filter($value) { |
使用str_replace函数进行关键词过滤是非常不安全的,尤其是这种把关键词替换成空的情况。例如该函数把select关键词替换成空,我们只需改成selselectect即可。当函数把selelct替换成空前后合在一起就又成了我们所需要的select关键词。
这里的绕过同理,我测试的payload为:.../...//....///
经过一轮替换后可以变成我们需要的../
。
但是因为这里限定后缀只能是php所以在这里这个漏洞还是很鸡肋。
后台不安全的资源访问
在admin文件夹下文件都会在开头加上这一行代码来防止普通用户来访问后文件资源
1 | if (!defined('APP_IN')) exit('Access Denied'); |
如果APP_IN这个常量没有被定义就直接退出系统。但是该定义APP_IN这个常量的文件竟然在公共文件common.inc.php
处。
而这个文件正好也被前面所说的index.php包含着。所以思路就很明确在index.php处包含后台文件即可使用网站后台资源了。
添加管理员
我们利用该漏洞尝试在没有进行后台登陆的情况下添加管理员,效果如下图
然后我们查看是否添加成功:
存储型xss
该站存在的xss其实并不少,这里挑选个利用相对简单的存储型xss聊聊
漏洞在公司注册处:http://qzqcms.top/?m=register
漏洞代码在index/register.php
处
可以看到参数nicname和company没有进行任何的xss过滤操作就直接带入到了数据库。
这里利用的需要注意两点:
- 1.数据库限制了nicncame参数的长度范围,所以真正好利用是公司名称company参数。
- 2.这些参数都有前端的限制我们可以在burp中修改绕过限制。
登陆后台查看,xss果然被触发:
- 本文作者: EASY
- 本文链接: http://example.com/2020/07/02/某汽车网源码的进一步代码审计/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!