Author: Badcode@知道創宇404實驗室
Date: 2018/08/20
Update: 目前WAM已開源 https://github.com/knownsec/wam
404實驗室內部的WAM(Web應用監控程序,文末有關于WAM的介紹)監控到 MetInfo 版本更新,并且自動diff了文件,從diff上來看,應該是修復了一個任意文件讀取漏洞,但是沒有修復完全,導致還可以被繞過,本文就是記錄這個漏洞的修復與繞過的過程。
漏洞簡介
MetInfo是一套使用PHP和Mysql開發的內容管理系統。 MetInfo 6.0.0~6.1.0版本中的 old_thumb.class.php文件存在任意文件讀取漏洞。攻擊者可利用漏洞讀取網站上的敏感文件。
漏洞影響
- MetInfo 6.0.0
- MetInfo 6.1.0
漏洞分析
看到\MetInfo6\app\system\include\module\old_thumb.class.php
<?php
# MetInfo Enterprise Content Management System
# Copyright (C) MetInfo Co.,Ltd (http://www.metinfo.cn). All rights reserved.
defined('IN_MET') or exit('No permission');
load::sys_class('web');
class old_thumb extends web{
public function doshow(){
global $_M;
$dir = str_replace('../', '', $_GET['dir']);
if(strstr(str_replace($_M['url']['site'], '', $dir), 'http')){
header("Content-type: image/jpeg");
ob_start();
readfile($dir);
ob_flush();
flush();
die;
}
......
從代碼中可以看到,$dir直接由$_GET['dir']傳遞進來,并將../置空。目標是進入到第一個 if 里面的readfile($dir);,讀取文件。看看 if 語句的條件,里面的是將$dir中包含$_M['url']['site']的部分置空,這里可以不用管。外面是一個strstr函數,判斷$dir中http字符串的首次出現位置,也就是說,要進入到這個 if 語句里面,$dir中包含http字符串即可。
從上面的分析可以構造出 payload,只要$dir里包含http字符串就可以進入到readfile函數從而讀取任意函數,然后可以使用..././來進行目錄跳轉,因為../會被置空,所以最終payload 如下
?dir=..././http/..././config/config_db.php

對于這個任意文件讀取漏洞,官方一直沒補好,導致被繞過了幾次。以下幾種繞過方式均已提交CNVD,由CNVD通報廠商。
第一次繞過
根據WAM的監測記錄,官方5月份的時候補了這個漏洞,但是沒補完全。
看下diff

可以看到,之前的只是把../置空,而補丁是把../和./都置空了。但是這里還是可以繞過。可以使用.....///來跳轉目錄,.....///經過str_replace置空,正好剩下../,可以跳轉。所以payload是
?dir=.....///http/.....///config/config_db.php

第二次繞過
在提交第一種繞過方式給CNVD之后,MetInfo沒多久就更新了,來看下官方的修復方式。
diff

這里加了一個判斷,$dir要以http開頭,變換一下之前的payload就可以繼續繞過了。
?dir=http/.....///.....///config/config_db.php

第三次繞過
再次提交之后,官方知悉該繞過方式,又補了一次了。
看下diff

看到補丁,又多加了一個判斷條件,使用strpos函數查找./首次出現的位置,也就是說不能有./。沒了./,在Windows下還可以用..\來跳轉目錄。所以payload
?dir=http\..\..\config\config_db.php

遺憾的是,這個只能在Windows環境下面才可以。
最終
目前在官網供下載的最新的6.1.0版本中,old_thumb.class.php這個文件已經被刪除。
總結
一次次的修補,一次次的繞過,感覺開發者應該是沒有理解到漏洞利用的原理,一直以類黑名單的形式在修復,而黑名單的形式總是容易被繞過。除了刪除文件外,根據實際功能,可以考慮使用白名單方式修復,例如限定所能讀取的文件類型為圖片類型。
關于WAM
WAM 應用監控:通過監控互聯網開源 Web 應用的版本更新,自動化 Diff 審計源代碼,發送漏洞告警郵件,第一時間發現漏洞及后門植入。
功能特性
- 目前已支持150種 Web 應用的版本源碼監控
- 支持監控 Web 應用歷史版本源碼包下載
- 監控 Web 應用版本發布頁面自動下載更新
- 自動 Diff 版本,比較文件更新,高亮顯示,自動審計可疑漏洞或后門
- 自動郵件告警可以漏洞/后門審計結果
好消息來了,黑哥計劃在 2018 KCon 大會上直接將 WAM 開源發布。
本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/676/
暫無評論