欧美一区2区三区4区公司二百,国产精品婷婷午夜在线观看,自拍偷拍亚洲精品,国产美女诱惑一区二区

歡迎來(lái)到夢(mèng)飛科技

網(wǎng)絡(luò)技術(shù)

當(dāng)前優(yōu)惠活動(dòng):

preg_replace的e修飾符與PHP安詳

PHP以其易用性和可移植性正被遍及應(yīng)用于WEB開(kāi)拓。然而,在我們利用的進(jìn)程中,,也要十分小心,從到處可見(jiàn)的XSS(新浪微博發(fā)送大量垃圾信息事件)到前段時(shí)間爆出來(lái)的Hash斗嘴的DDOS進(jìn)攻,最近,wooyun上面宣布了一個(gè)關(guān)于ThinkPHP框架的裂痕(最新版已經(jīng)修復(fù)),以前也是我用過(guò)的第一個(gè)框架,昨晚花時(shí)間重現(xiàn)了一下,查閱了下措施的道理。本文主要來(lái)重現(xiàn)該裂痕,然后闡明代碼,給出裂痕的原因,用這個(gè)裂痕去檢討大概對(duì)系統(tǒng)造成的粉碎,最后總結(jié),防御的要領(lǐng)。

裂痕主要是由mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit]) 這個(gè)函數(shù)引起的,我們先看官方說(shuō)明:

/e 修 正符使 preg_replace() 將 replacement 參數(shù)看成 PHP 代碼(在適當(dāng)?shù)哪嫦蛞锰鎿Q完之后)。提示:要確保 replacement 組成一個(gè)正當(dāng)?shù)?nbsp;PHP 代碼字符串,不然 PHP 會(huì)在陳訴在包括 preg_replace() 的行中呈現(xiàn)語(yǔ)法理會(huì)錯(cuò) 誤。

我們不妨先看一下這個(gè)示例

preg_replace("/test/e",$_GET["h"],"jutst test");

假如我們提交?h=phpinfo(),phpinfo()將會(huì)被執(zhí)行(利用/e修飾符,preg_replace會(huì)將 replacement 參數(shù)看成 PHP 代碼執(zhí)行)。這個(gè)正則被正確的匹配到,在舉辦替換的進(jìn)程中,需要將$_GET["h"]傳入的String看成函數(shù)來(lái)運(yùn)行,因此phpinfo()被樂(lè)成執(zhí)行。

<?php
preg_replace("/test/e",$_GET["h"],"jutst test");
?>

會(huì)見(jiàn)的url : ?h=phpinfo()

進(jìn)而,我們進(jìn)入ThinkPHP的源碼,下載2.1版(2.1今后已經(jīng)被修復(fù))。在/ThinikPHP/Lib/ThinkPHP/Util/Dispatcher.class.php的dispatch函數(shù)中,找到這句話:preg_replace的e修飾符與PHP和平

在ThinkPHP的路由成果中,許多處所用到了preg_replace函數(shù)的/e參數(shù),然而最嚴(yán)重的是這個(gè)文件中的這句話,因?yàn)殡U(xiǎn)些影響了所有利用Thinkphp的項(xiàng)目。

顯然,這個(gè)利用了/e函數(shù),會(huì)導(dǎo)致第二個(gè)參數(shù)看成函數(shù)利用。我們來(lái)闡明一下這句話:

正則匹配的是 :字母開(kāi)頭,加上“/”脫離符,后頭跟一個(gè)非”/”的元素,被替換成$var["脫離符前的字母"]=脫離符后的值;作者的本意是要將這么一對(duì)一對(duì)的參數(shù)/值的形式的url寫(xiě)入到 $var[$key] = $value的數(shù)組中。

譬喻:URL,index.php?s=/model/action/par1/value1

將被理會(huì)成 :model模塊的action要領(lǐng),參數(shù)的處理懲罰放在這句話中,$deprde的值是“/”,由于/par1/value1(剩余的URL參數(shù))匹配到了正則表達(dá)式,則會(huì)用第二個(gè)參數(shù)去舉辦替換。那么第二個(gè)參數(shù)應(yīng)該被看成一個(gè)php語(yǔ)句來(lái)執(zhí)行,他是一個(gè)賦值語(yǔ)句,執(zhí)行的功效為:$var["par1"] = “value1″,作者以此來(lái)到達(dá)闡明url的目標(biāo),也實(shí)現(xiàn)了ThinkPHP的C層。

可是在賦值的時(shí)候,利用的是雙引號(hào)。危險(xiǎn)的處所實(shí)際上在這里,在 php中,雙引號(hào)內(nèi)里假如包括有變量,php表明器會(huì)將其替換為變量表明后的功效;單引號(hào)中的變量不會(huì)被處理懲罰。可以先做如下測(cè)試:

$a = “{${phpinfo()}}”;   phpinfo會(huì)被樂(lè)成執(zhí)行。因此,我們將第二個(gè)變量替換成我們需要的函數(shù),結(jié)構(gòu)出來(lái)的進(jìn)攻url大抵如下:

http:[email protected](THINK_VERSION)}

我們利用ThinkPHP2.1_full_with_extend ,利用examlpe內(nèi)里的Blog示例,快速搭建一個(gè)Thinkphp項(xiàng)目,然后會(huì)見(jiàn)http:[email protected](THINK_VERSION)},可以在左上角打印出當(dāng)前的TP版本,操作這個(gè)來(lái)執(zhí)行php函數(shù),相當(dāng)于開(kāi)啟了一個(gè)PHP的一句話后門(mén)。

詳細(xì)闡明是:這句話的/par [email protected](THINK_VERSION)}將匹配到正則表達(dá)式,將會(huì)執(zhí)行第二個(gè)參數(shù),詳細(xì)語(yǔ)句是$var['par'] = “[email protected](THINK_VERSION)} “; 問(wèn)題出在雙引號(hào)上面,這個(gè)會(huì)執(zhí)行內(nèi)里的語(yǔ)句,包括許多危險(xiǎn)的語(yǔ)句,包括phpinfo(),讀取數(shù)據(jù)庫(kù)設(shè)置等等。

preg_replace的e修飾符與PHP和平

停止今朝,在Google上還可以找到很多這樣的站點(diǎn),許多站點(diǎn)都可以直接執(zhí)行phpinfo(),在新版的ThinkPHP中已經(jīng)修復(fù)了這個(gè)裂痕,將第二個(gè)參數(shù)的雙引號(hào)改為單引號(hào):


'$var['\1']='\2';'

在我們今后利用preg_replace的/e修飾符的時(shí)候,需要留意這個(gè)雙引號(hào)和單引號(hào),像框架類(lèi)的裂痕,一般影響的范疇都很是的廣。

夢(mèng)飛科技 - 全球數(shù)據(jù)中心基礎(chǔ)服務(wù)領(lǐng)先供應(yīng)商

Copyright © 2003-2019 MFISP.COM. 國(guó)外服務(wù)器租用 IDC公司 版權(quán)所有 ? 粵ICP備11019662號(hào)

主站蜘蛛池模板: 右玉县| 措美县| 彰武县| 商洛市| 太保市| 彭阳县| 吐鲁番市| 历史| 宝鸡市| 德格县| 舞阳县| 张家港市| 焉耆| 沂南县| 民和| 新密市| 保亭| 大余县| 邯郸县| 横峰县| 民和| 滨海县| 会泽县| 和顺县| 溧阳市| 平顶山市| 三穗县| 密云县| 通辽市| 砀山县| 玉山县| 宣化县| 无极县| 营口市| 永德县| 绥阳县| 寿阳县| 江油市| 浦城县| 临城县| 南江县|