bagecms的代码审计

老的一个cms了,用来学习一下代码审计

BageCMS 是一套基于 PHP 和 MySQL 的跨平台的内容管理系统

在配合phpstudy安装后,进行代码审计,因为已经下载过源码了

image-20210905111808413

先扫一波

image-20210905112058481

上去就看见我们最爱的文件包含漏洞

这个源码是在网站上搜的,当然可能会有人故意在里面加后门,然后利用谷歌语法进行网站的攻击

1

跳转到可疑的变量进行查看

image-20210905151527316

filename的参数是通过trim函数去掉空格来进行的

并且后面对数据进行了base64加密

$data['filename'] = XUtils::b64decode( $filename );
XUtils是一个开发框架

根据之前的liscen的txt文本提示的登录后台,使用r参数进行传递

image-20210905152750823

image-20210905154750042

然后根据路径进行传递

?r=admini/Template/Update&filename=Li4vLi4vLi4vcHJvdGVjdGVkL2NvbmZpZy9tYWluLnBocA==

这个poc的解读的意思是说在admini目录下(这个是因为调用admini就等于调用整个controllers模板块下的文件,然后我们可以指定调用模板,自己尝试如果要带TemplateController来进行也不行,必须去掉controller,当然也可以进行任意模块的调用)调用TemplateController.php的功能的函数行为为Update的参数的filename来进行任意读取文件,(中间出现一个错误,就是读取文件的向上翻不能多,也不能少,不然会报错)

image-20210905155048614

2

当然有了任意文件读取,就可以登录后台进行后门的利用,其实也可以使用模块,利用admini的来进行template的操作模块,插入后门

image-20210905160031864

插入最常利用的页面地址

image-20210905160436190

image-20210905160624254

总结

这是最简单的两个了,还有很多,自己太菜了,其实尽量在index.php或者admini的管理后台下审计比较现实,因为其他的很难关联上url上

关于第一个可以采取替换,从而取代敏感信息

对filename进行替换
$str="***";
$safe_filename=preg_replace("/(\.\.\/)/",$str,$filename);
这个的意思是执行一个正则表达式进行替换
意思是匹配filename的字符与/(\.\.\/)/正则相关的进行替换成str变量的
关于这个正则的意思就是对../进行处理
\是对字符的一种转义,所以括号里就是../
( )  标记一个子表达式的开始和结束位置
最外面的//就是一个正则的基本包含内容

第二个关闭模块的任意利用

不允许创建或编辑模板在config里设置为N

posted @ 2021-09-05 17:03  testadm1n  阅读(183)  评论(0编辑  收藏  举报