phpBB <= 2.0.10

2005-12-30 01:13

phpBB 是一套使用很廣的討論區系統 , 使用 php + mysql
但近一兩年來連續爆出了許多 High Risk 的大漏洞 ,
例如以下這個 vulnerability 是 phpBB 版本 <= 2.0.10 ,
可使遠端使用者執行任意的程式碼.



關鍵點是 viewtopic.php 並未對 highlight 這個使用者傳來的參數做檢查 ,
相關的 source code 如下 -


if (isset($HTTP_GET_VARS['highlight']))
{
$words = explode(' ', trim(htmlspecialchars(urldecode($HTTP_GET_VARS['highlight']))));
for($i = 0; $i < sizeof($words); $i++)
{
if (trim($words[$i]) != '')
{
$highlight_match .= (($highlight_match != '') ? '|' : '') . str_replace('*', '\w*', phpbb_preg_quote($words[$i], '#'));
}
}
}
.....
if ($highlight_match)
{
$message = str_replace('\"', '"', substr(preg_replace('#(\>(((?>([^><]+|(?R)))*)\<))#se', "preg_replace('#\b(" . $highlight_match . ")\b#i', '\\\\1‘, ‘\\0′)”, ‘>' . $message . ‘<'), 1, -1));
}

其中使用了 preg_replace 這個支援 regular expression 的 function ,
並使用了 #xxx#e 的技巧來代換字串 ,
所以就可以玩填字遊戲 , 塞入任意的程式碼讓它執行了.

例如放個
viewtopic.php?t=1&highlight=%2527%252esystem(ls)%252e%2527
就會去執行 system(ls)


Patch :

官方版本的 patch 方式是將 viewtopic.php 中
$words = explode(' ‘, trim(htmlspecialchars(urldecode($HTTP_GET_VARS['highlight']))));
=>
$words = explode(' ‘, trim(htmlspecialchars($HTTP_GET_VARS['highlight'])));

不要用 urldecode 去解開參數中的特殊字元 , 則後來帶入 preg_replace 時就會因語法錯誤而失敗了.



Reference :

http://www.securityfocus.com/bid/10701
http://webhostingforum.com/showthread.php?t=753



Vulnerability 類別的文章 :
mediawiki 1.5.2 and priorphpBB <= 2.0.17

新增留言

*

*

Trackback this post  |  訂閱這則留言的 RSS Feed


各分類文章

最近的 20 篇文章