我这里还是采用小皮面板搭建
创建好后访问/install目录安装即可
MVC基础
由于是第一篇MVC模型的CMS审计,简单介绍一下
-
Controller截获用户发出的请求;
-
Controller调用Model完成状态的读写操作;
-
Controller把数据传递给View;
-
View渲染最终结果并呈献给用户。
网上的图
我们使用IDA查看它的源码
c/下是控制器
存放网站功能的调用文件
m/下是模块
存放网站功能的调用文件的具体实现
template/下是视图
存放我们执行结果后的返回页面
我们首页访问
http:
//lmxcms14:86/index.php?m=content&a=index&classid=11&id=8
推导出它的代码段
m=content,控制器名为content,我们在前端文件中找
a=index,模块名为index,我们寻找index方法
它调用contents模块,我们可以跟一下
这就是前端代码的实现,那也就是说我们找对了
&classid=11&id=8,这两个就是index下的参数了
我们可以尝试输出点东西,来判断是否是这段代码调用。
成功输出
漏洞一:代码执行
我们通过eval关键词全局搜索
定位到AcquisiAction.class.php文件的对应代码段
eval中有两个变量,$data值是$temdate['data'],那么我们就是看$temdate['data']我们能否可控。
$temdata = $this->model->caijiDataOne($_GET['cid']);
发现$temdata的值是caijiDataOne执行cid的结果,我们跟一下caijiDataOne()
发现它这里好像有执行sql语句,根据注释也可知,它这里会根据我们传入的id值进行数据的读取,它这里有执行个cj_data_tab();,我们跟一下
发现它指向一个数据表,我们打开数据库看一下
那我们的cid接收的就是这个表的id值,data就是表中的data,这样大概的逻辑我们就清楚了
根据文件构造url访问
http:
//lmxcms14:86/admin.php?m=Acquisi&a=showCjData
提示sql语句错误,那我们把a的值删掉,来到对应功能点
其实这个功能点,在代码的注释中已经提示了,我们直接进入后台就能看到
它是在数据库中取数据嘛,我们尝试添加,它这里是要添加采集后,创建节点,最后采集数据,采集完成后看下数据库
数据已经有了,我们要修改一下data的值,修改后的值为
我们来看一下eval执行的语句
eval('$data = '.$temdata['data'].';');
修改后的值为,点是连接符,我这里去掉
eval('$data = '1;phpinfo();//';');
分号的作用是把前面的代码闭合,两斜杠是注释后面的代码,执行语句就会变成
eval($data = 1;phpinfo(););
我们构造访问地址:
http:
//lmxcms14:86/admin.php?m=Acquisi&a=showCjData&cid=1
爆sql语句错误,我们复制它这里块功能点的url
http:
//lmxcms14:86/admin.php?m=Acquisi&a=caijiDataList&lid=2&id=2
发现还有lid和id两个参数,我们回到代码中查看
$cjData =
$this
->model->getOneCjData(
$this
->lid);
$jdData =
$this
->model->getOne(
$this
->id);
其实这里只要加上这两个值就行了,我们也可以跟一下getOneCjData和getOne看下获取的是哪个表的值
getOneCjData
再跟
查看lmx_cj_list表
对应上了
getOne的看法一样
那我们的完整url就是
http:
//lmxcms14:86/admin.php?m=Acquisi&a=showCjData&cid=1&lid=2&id=2
漏洞存在
漏洞二:代码执行
在网站后台存在模板功能,通常这种模板功能比较容易产生漏洞,我们打开看下
通过内容可以发现是首页的文件
我们根据url访问对应文件
可以发现它这里使用了smarty,我们使用php标签插入php代码
访问首页
漏洞存在
漏洞三:后台sql注入
其实就是在我们第一处命令执行那里
从我们前面跟的流程来看,它这三次接收的产生,好像没做过滤就带入的数据库中,而且是数字型
我们尝试注入一下
and 1=2发现报错
1=1正常
那么就可以确定存在注入了
poc:
http:
//lmxcms
14:
86
/admin.php?
m
=Acquisi&a=showCjData&id=
2
&lid=
2
&cid=
1
%20and%20updatexml(
1
,concat(
0x3a
,(
select
%20user())),
1
)
漏洞存在
漏洞四:任意文件删除
全局搜索unlink(
找到BackdbAction.class.php中的代码段
查看一下谁使用了这个delOne
点第一处查看
delbackdb使用了删除函数,然后它这里好像也没有对filename做检测
我们在delone中echo一下$dir
我们构造访问地址
http:
//lmxcms14:86/admin.php?m=Backdb&a=delbackdb&filename=1
我们在网站后台创建个文件
我们向上跳转两级到根目录,再跟上要删除的文件
poc:
http:
//lmxcms14:86/admin.php?m=Backdb&a=delbackdb&filename=../../c/admin/caigo.txt
文件删除成功,漏洞存在,我们可以删除install/install_ok.txt文件,这样网站就会重新安装,这样新的管理员账号密码不就由我们控制。
原文始发于微信公众号(菜狗安全):代码审计-lmxcms(梦想CMS)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论