bagecms的代码审计
老的一个cms了,用来学习一下代码审计
BageCMS 是一套基于 PHP 和 MySQL 的跨平台的内容管理系统
在配合phpstudy安装后,进行代码审计,因为已经下载过源码了
先扫一波
上去就看见我们最爱的文件包含漏洞
这个源码是在网站上搜的,当然可能会有人故意在里面加后门,然后利用谷歌语法进行网站的攻击
1
跳转到可疑的变量进行查看
filename的参数是通过trim函数去掉空格来进行的
并且后面对数据进行了base64加密
$data['filename'] = XUtils::b64decode( $filename );
XUtils是一个开发框架
根据之前的liscen的txt文本提示的登录后台,使用r参数进行传递
然后根据路径进行传递
?r=admini/Template/Update&filename=Li4vLi4vLi4vcHJvdGVjdGVkL2NvbmZpZy9tYWluLnBocA==
这个poc的解读的意思是说在admini目录下(这个是因为调用admini就等于调用整个controllers模板块下的文件,然后我们可以指定调用模板,自己尝试如果要带TemplateController来进行也不行,必须去掉controller,当然也可以进行任意模块的调用)调用TemplateController.php的功能的函数行为为Update的参数的filename来进行任意读取文件,(中间出现一个错误,就是读取文件的向上翻不能多,也不能少,不然会报错)
2
当然有了任意文件读取,就可以登录后台进行后门的利用,其实也可以使用模块,利用admini的来进行template的操作模块,插入后门
插入最常利用的页面地址
总结
这是最简单的两个了,还有很多,自己太菜了,其实尽量在index.php或者admini的管理后台下审计比较现实,因为其他的很难关联上url上
关于第一个可以采取替换,从而取代敏感信息
对filename进行替换
$str="***";
$safe_filename=preg_replace("/(\.\.\/)/",$str,$filename);
这个的意思是执行一个正则表达式进行替换
意思是匹配filename的字符与/(\.\.\/)/正则相关的进行替换成str变量的
关于这个正则的意思就是对../进行处理
\是对字符的一种转义,所以括号里就是../
( ) 标记一个子表达式的开始和结束位置
最外面的//就是一个正则的基本包含内容
第二个关闭模块的任意利用
不允许创建或编辑模板在config里设置为N
别人都在不停的努力,自己又怎么会停