返回
顶部

前言

划水的时候无意中看到了一篇关于极致CMS代码审计的文章,正好无事可做,照着文章上的复现一波,在此记录一下

参考文章:

审计思路以及环境准备

从极致CMS官网的版本更新日志中发现最新版本较上一版本的更新差异

1595954837950

查看v1.8的更新日志

1595954912058

说明在上一版本存在SQL语句报错信息直接显示到页面上的问题,因此我们将v1.7.1版本下载下来,进行代码审计,重点审计SQL注入

这里代码调试环境我们选择JetBrains的IDEA,通过xdebug进行php代码的调试

CMS源代码下载链接:极致CMS--v1.7.1

由于一些我也不太清楚的原因,我只能把代码解压到网站根目录才可以正常进行安装和访问,之前审计laravel时也出现过问题,通过设置vhost解决

审计过程

我们直接切入主题,查看SQL语句执行的地方,随便找一个SQL查询的语句

1595956660164

通过上面的方式,找到进行SQL查询的代码

1595956792961

打开对应文件C:\phpStudy\PHPTutorial\WWW\123\jizhicms_Beta1.7.1\FrPHP\Extend\DB_API.php查看SQL查询相关代码

1595957545245

跟入getData方法

1595956865135

跟入query方法

1595956923059

可以看到这里SQL语句是没有进行任何过滤的

直接调用pdo的query方法进行数据库的查询,这里我们全局搜索一下DB_API这个类调用的地方,发现一共只有一处:C:\phpStudy\PHPTutorial\WWW\static\common\user\uedit\php\Uploader.class.php的387行,且只调用了其set_table方法,因此这个地方我们并没有办法去利用,因此需要再去寻找一处可以进行传参的SQL语句查询代码

通过参考文章了解到,该CMS查询SQL的方法为find和findAll,因此我们只需要全局搜索find方法出现的地方即可

1595958434810

C:\phpStudy\PHPTutorial\WWW\Home\c\MypayController.php找到符合条件的代码

1595959367505

1595959354382

使用chrome的postman插件构造出报错注入的payload即可触发SQL报错注入:

构造请求http://localhost/index.php/mypay/alipay_return_pay?out_trade_no=1%27%20and%20updatexml(1,concat(0x7e,(select%20version()),0x7e),1)--+%22

1595959523898