ThinkPHP framework 任意代碼執(zhí)行漏洞預(yù)警
發(fā)布時(shí)間:2012-04-11 15:32:28 作者:佚名
我要評(píng)論

最近官方發(fā)布了一個(gè)安全補(bǔ)丁,官方表述是:該URL安全漏洞會(huì)造成用戶在客戶端偽造URL,執(zhí)行非法代碼
ThinkPHP是一個(gè)國(guó)內(nèi)使用很廣泛的老牌PHP MVC框架。貌似國(guó)內(nèi)有不少創(chuàng)業(yè)公司或者項(xiàng)目都用了這個(gè)框架。
最近官方發(fā)布了一個(gè)安全補(bǔ)丁,官方表述是:該URL安全漏洞會(huì)造成用戶在客戶端偽造URL,執(zhí)行非法代碼。
可是貌似大多數(shù)開發(fā)者和使用者并沒(méi)有注意到此漏洞的危害性,應(yīng)者了了,更不用說(shuō)有多少人去升級(jí)了。隨后我對(duì)其進(jìn)行了分析,發(fā)現(xiàn)此問(wèn)題果然是一個(gè)非常嚴(yán)重的問(wèn)題,只要使用了thinkphp框架,就可以直接執(zhí)行任意php代碼。特此發(fā)帖預(yù)警各位。
我們來(lái)分析一下官方的補(bǔ)丁:
/trunk/ThinkPHP/Lib/Core/Dispatcher.class.php
125 - $res = preg_replace('@(w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr,$paths));
125 + $res = preg_replace('@(w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']=\'\\2\';', implode($depr,$paths));
這個(gè)代碼是把pathinfo當(dāng)作restful類型url進(jìn)行解析的,主要作用是把pathinfo中的數(shù)據(jù)解析并合并到$_GET數(shù)組中。
然而在用正則解析pathinfo的時(shí)候,主要是這一句:
$res = preg_replace('@(w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr,$paths));
這里明顯使用了preg_replace的/e參數(shù),這是個(gè)非常危險(xiǎn)的參數(shù),如果用了這個(gè)參數(shù),preg_replace第二個(gè)參數(shù)就會(huì)被當(dāng)做php代碼執(zhí)行,作者用這種方式在第二個(gè)參數(shù)中,利用PHP代碼給數(shù)組動(dòng)態(tài)賦值。
'$var[\'\\1\']="\\2";'
而這里又是雙引號(hào),而雙引號(hào)中的php變量語(yǔ)法又是能夠被解析執(zhí)行的。因此,攻擊者只要對(duì)任意一個(gè)使用thinkphp框架編寫的應(yīng)用程序,使用如下方式進(jìn)行訪問(wèn),即可執(zhí)行任意PHP代碼:
index.php/module/action/param1/${@print(THINK_VERSION)}
由于是雙引號(hào)執(zhí)行,這里為了保險(xiǎn)起見,不給出更有危害性的代碼,利用這個(gè)還是需要點(diǎn)技巧的。
總之這個(gè)問(wèn)題非常嚴(yán)重,找了一下,發(fā)現(xiàn)目前沒(méi)有修補(bǔ)漏洞的網(wǎng)站還是很多的。而ThinkPHP框架的特征其實(shí)非常好識(shí)別,有意者直接寫個(gè)scanner進(jìn)行掃描也未必不可能。
為了不造成更大損失,特地發(fā)帖希望引起各位使用thinkphp做開發(fā)的同學(xué)關(guān)注。盡早升級(jí)官方的安全補(bǔ)丁
作者:GaRY
最近官方發(fā)布了一個(gè)安全補(bǔ)丁,官方表述是:該URL安全漏洞會(huì)造成用戶在客戶端偽造URL,執(zhí)行非法代碼。
可是貌似大多數(shù)開發(fā)者和使用者并沒(méi)有注意到此漏洞的危害性,應(yīng)者了了,更不用說(shuō)有多少人去升級(jí)了。隨后我對(duì)其進(jìn)行了分析,發(fā)現(xiàn)此問(wèn)題果然是一個(gè)非常嚴(yán)重的問(wèn)題,只要使用了thinkphp框架,就可以直接執(zhí)行任意php代碼。特此發(fā)帖預(yù)警各位。
我們來(lái)分析一下官方的補(bǔ)丁:
/trunk/ThinkPHP/Lib/Core/Dispatcher.class.php
復(fù)制代碼
代碼如下:125 - $res = preg_replace('@(w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr,$paths));
125 + $res = preg_replace('@(w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']=\'\\2\';', implode($depr,$paths));
這個(gè)代碼是把pathinfo當(dāng)作restful類型url進(jìn)行解析的,主要作用是把pathinfo中的數(shù)據(jù)解析并合并到$_GET數(shù)組中。
然而在用正則解析pathinfo的時(shí)候,主要是這一句:
復(fù)制代碼
代碼如下:$res = preg_replace('@(w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr,$paths));
這里明顯使用了preg_replace的/e參數(shù),這是個(gè)非常危險(xiǎn)的參數(shù),如果用了這個(gè)參數(shù),preg_replace第二個(gè)參數(shù)就會(huì)被當(dāng)做php代碼執(zhí)行,作者用這種方式在第二個(gè)參數(shù)中,利用PHP代碼給數(shù)組動(dòng)態(tài)賦值。
復(fù)制代碼
代碼如下:'$var[\'\\1\']="\\2";'
而這里又是雙引號(hào),而雙引號(hào)中的php變量語(yǔ)法又是能夠被解析執(zhí)行的。因此,攻擊者只要對(duì)任意一個(gè)使用thinkphp框架編寫的應(yīng)用程序,使用如下方式進(jìn)行訪問(wèn),即可執(zhí)行任意PHP代碼:
復(fù)制代碼
代碼如下:index.php/module/action/param1/${@print(THINK_VERSION)}
由于是雙引號(hào)執(zhí)行,這里為了保險(xiǎn)起見,不給出更有危害性的代碼,利用這個(gè)還是需要點(diǎn)技巧的。
總之這個(gè)問(wèn)題非常嚴(yán)重,找了一下,發(fā)現(xiàn)目前沒(méi)有修補(bǔ)漏洞的網(wǎng)站還是很多的。而ThinkPHP框架的特征其實(shí)非常好識(shí)別,有意者直接寫個(gè)scanner進(jìn)行掃描也未必不可能。
為了不造成更大損失,特地發(fā)帖希望引起各位使用thinkphp做開發(fā)的同學(xué)關(guān)注。盡早升級(jí)官方的安全補(bǔ)丁
作者:GaRY
相關(guān)文章
thinkphp代碼執(zhí)行g(shù)etshell的漏洞解決
本文來(lái)介紹一下thinkphp官方修復(fù)的一個(gè)getshell漏洞,框架對(duì)控制器沒(méi)有進(jìn)行足夠的檢測(cè)導(dǎo)致的一處getshell,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨2018-12-12記 FineUI 官方論壇discuz所遭受的一次真實(shí)網(wǎng)絡(luò)攻擊
這篇文章主要介紹了記 FineUI 官方論壇discuz所遭受的一次真實(shí)網(wǎng)絡(luò)攻擊,需要的朋友可以參考下2018-11-30- 這篇文章主要介紹了Linux 下多種反彈 shell 方法,需要的朋友可以參考下2017-09-06
- 這篇文章主要為大家介紹了基于反射的XSS攻擊,主要依靠站點(diǎn)服務(wù)端返回腳本,在客戶端觸發(fā)執(zhí)行從而發(fā)起Web攻擊,需要的朋友可以參考下2017-05-20
- 這篇文章主要介紹了SQL注入黑客防線網(wǎng)站實(shí)例分析,需要的朋友可以參考下2017-05-19
ASP+PHP 標(biāo)準(zhǔn)sql注入語(yǔ)句(完整版)
這里為大家分享一下sql注入的一些語(yǔ)句,很多情況下由于程序員的安全意識(shí)薄弱或基本功不足就容易導(dǎo)致sql注入安全問(wèn)題,建議大家多看一下網(wǎng)上的安全文章,最好的防范就是先學(xué)2017-05-19- 對(duì)于目前流行的sql注入,程序員在編寫程序時(shí),都普遍的加入防注入程序,有些防注入程序只要在我們提交一些非法的參數(shù)后,就會(huì)自動(dòng)的記錄下你的IP地址,提交的非法參數(shù)和動(dòng)作等,2017-04-29
XSS繞過(guò)技術(shù) XSS插入繞過(guò)一些方式總結(jié)
我們友情進(jìn)行XSS檢查,偶然跳出個(gè)小彈窗,其中我們總結(jié)了一些平時(shí)可能用到的XSS插入方式,方便我們以后進(jìn)行快速檢查,也提供了一定的思路,其中XSS有反射、存儲(chǔ)、DOM這三類2016-12-27Python 爬蟲使用動(dòng)態(tài)切換ip防止封殺
這篇文章主要介紹了Python 爬蟲使用動(dòng)態(tài)切換ip防止封殺的相關(guān)資料,需要的朋友可以參考下2016-10-08使用爬蟲采集網(wǎng)站時(shí),解決被封IP的幾種方法
這篇文章主要介紹了使用爬蟲采集網(wǎng)站時(shí),解決被封IP的幾種方法的相關(guān)資料,需要的朋友可以參考下2016-10-08