php代码审计之bluecms
代码审计
一、审计方法
审计方法:
定位敏感关键字,回溯参数传递过程
定位敏感功能点,通读功能代码 (黑盒+白盒)
系统重装
文件上传
文件管理功能
登录认证
密码找回
订单支付
全文代码通读审计(index.php 跟踪调试)
实用工具:
seay 代码审计
rips
xdebug
二、Bluecms审计
2.0 审计环境
phpstudy
php5.2
bluecms1.6 sp1 (安装就不说了)
seay代码审计系统
2.1 ad_js.php sql注入漏洞
seay自动审计
疑似存在 sql注入漏洞
这里包含了网站的配置文件,且配置文件中有统一配置
对$*post、$*get、$*cookies和$*request统一进行gpc处理,对得到的参数转移特定的字符。
但是 ad_js.php 并没有使用单引号,所以可以直接绕过。
查看函数无过滤:
这里确实存在数字型注入。
可根据页面回显,
成功回显 7 的位置。
poc:
2.2 comment.php sql注入漏洞
:
配置文件中对$*post、$*get、$*cookies和$*request统一进行gpc处理,但是遗漏了$_SERVER。而且网站恰恰通过该变量获取ip地址,因此我们就可以对ip通过client-ip或x-forwarded-for等进行伪造。
phpstorm中快捷鍵在項目中搜索在哪調用了函数。
在中调用,
对进行转移避免 xss,
对其他参数进行gpc转译和字符的intval强制转换。
可这个函数就出了问题,没有过滤。那么我们就可以伪造 ip 造成sql注入了,
测试评论功能正常,
我们可以修改源码让其将执行的sql 语句执行出来,然后结束程序。
可以看到可成功伪造 ip
得到sql语句
INSERT INTO blue_comment (com_id, post_id, user_id, type, mood, content, pub_date, ip, is_check) VALUES ('', '1', '1', '1', '6', '123', '1613538389', '1.1.1.1,'1')那么我们在伪造 ip 的 评论处构造 sql语句,
poc:
发布评论成功
成功注入
2.3 文件包含漏洞
750行
分析代码,我们发现$_POST['pay']并没有做多余的安全检测,直接进行拼接,前文中说道,对post方法进行了重写,会对%00进行转译,所以利用%00进行截断是不行的。
在这里说一下各个截断的条件吧
应该是我本地环境配置原因,没复现成功,
后续可以上传头像,进行文件包含写shell.
2.4 用户注册xss 漏洞
这次不用Seay挖xss漏洞,我们通过关键功能测试来审计xss漏洞。 在后台->会员管理->会员列表处,管理员是可以查看会员信息的,要是此处信息能从前台插入xss代码,就能盗取管理员cookie。
来到前台会员注册处,尝试注册一个用户,可以看到可控的有用户名,邮箱,密码一般不考虑。
提交注册,抓包具体分析一下,可以看到走的是user.php的do_reg方法。
这里用户名长度不大于 16 ,邮箱前端验证。
我们选择邮箱处 xss.
成功 xss,
再去看看管理后台,成功弹窗
2.5 用户注册 sql注入
现在本地调一下代码
继续使用 email
可以看到满足 宽字节注入的条件,因为配置文件重写了 post 方法,所以注入的时候要注意单引号。
构造 paylaod
2.6 后台登录 sql 注入
文件方法 do_login
:
宽字节注入,
2.7 任意文件删除
792 行。
要使得为空,
BLUE_ROOT 问当前文件所在路径。
此功能点在用户修改信息处,抓包,填入face_pic3 得值即可删除任意文件。