这几天工作抽闲审了两个cms,本来想水水cve的,发现都没过,看了下不是冲突,也不是不够格(这两个cms连xss都能算cve)。不过仔细想想,也对,我还是个新手,不能太急功近利了,那就更一下审计日志吧。
-------7月24日更|发现cve过了。。。真的是迟来的cve
Bigtree cms 4.2
Developer getwebshell:
在 /core/inc/bigtree/admin.php line 662
createCallout()
line 698
把传入的resource数组的id键值 直接拼接到$file_contents中,如果经过恶意构造,即可拼接任意php语句,可以getwebshell。测试:
添加resources,id为 */ phpinfo(); ?>/*
我们可以看到callouts目录下生成了test2.php然后创建一个分组
编辑模板,加入callouts
编辑一个页面,添加上面的callouts
我们可以看到成功执行phpinfo()
修改建议:对传入的resource进行过滤或waf拦截,或直接禁用掉注释符号。
后台sql注入
在/core/admin/auto-modules/process.php
line 77
接收用户post进来的tag
tags = _POST["_tags"];
然后如果是publish操作$tags被直接代入publishPendingItem函数
接着被代入createItem 函数
可以看到这里直接被拼接到sql语句中,可以进行盲注
成功延迟5秒
修改建议:使用’配合自带的sqlescape进行防御
exponent2.4.1
/framework/core/subsystems/database/mysqli.php
selectObject函数 line729
接受传进来的where经过injectProof的检查
直接拼接到sql语句上
/framework/core/subsystems/expDatabase.php
injectProof函数
line 1113
function injectProof(string) { quotes = substr_count("'", string); if (quotes % 2 != 0) string = this->escapeString(string); dquotes = substr_count('"', string); if (dquotes % 2 != 0) string = this->escapeString(string); return string; } 如果使用 \’’或\””就可绕过
/framework/modules/ealerts/controllers/ealertController.php
send_auto ()函数
line 111
ealert = db->selectObject('expeAlerts','module="'.this->params['model']. '" AND src="'.src.'"');
构造model = payload即可http://172.16.91.142/exp/index.php?controller=ealert&action=send_auto&src=1&model=22\%22%22%20union%20select%201,2,3,4,5,6,7%20from%20dual%20where%20sleep(5)%23
成功延迟(此处这个模块需要管理员权限,即后台注入)
/framework/modules/ecommerce/controllers/eventregistrationController.php
eventregistration_process()
line 496
同理,构造event中有payload,可进行前台注入http://172.16.91.142/exp/index.php?controller=eventregistration&action=eventregistration_process
还有其他调用点,就不列了。
发表评论