成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

在PHP應用程序開發中不正當使用mail()函數引發的血案

安全 應用安全
未正確校驗mail()函數的參數內容可能會產生一些安全問題,嚴重的話會引發遠程命令執行漏洞導致服務器被接管。本篇文章就可能產生的安全問題做了簡要的分析,同時對如何安全的使用mail()函數提出了一些建議

一、前言

在我們挖掘PHP應用程序漏洞的過程中,我們向著名的Webmail服務提供商Roundcube提交了一個遠程命令執行漏洞(CVE-2016-9920)。該漏洞允許攻擊者通過利用Roundcube接口發送一個精心構造的電子郵件從而在目標系統上執行任意命令。在我們向廠商提交漏洞,發布了相關的漏洞分析文章后,由于PHP內聯函數mail()導致的類似安全問題在其他的PHP應用程序中陸續曝出。在這篇文章中,我們將分析一下這些漏洞的共同點,那些安全補丁仍然存在問題,以及如何安全的使用mail()函數。

[[190463]]

二、淺析PHP的mail()函數

PHP自帶了一個內聯函數mail()用于在PHP應用程序中發送電子郵件。開發者可以通過使用以下五個參數來配置郵件發送。

http://php.net/manual/en/function.mail.php

  1. bool mail( 
  2.     string $to, 
  3.     string $subject, 
  4.     string $message [, 
  5.     string $additional_headers [, 
  6.     string $additional_parameters ]] 

這個函數的前三個參數這里就不細說了,因為這些參數一般情況下不會受到注入攻擊的影響。但是,值得關注的一點是,如果$to參數由用戶控制控制的話,那么其可以向任意電子郵件地址發送垃圾郵件。

三、郵件頭注入

在這篇文章中我們重點分析后兩個參數。第四個參數$additional_headers的主要功能是規定額外電子郵件報頭。比如From、Reply-To、Cc以及Bcc。由于郵件報頭由CRLF換行符\r\n分隔。當用戶輸入可以控制第四個參數,攻擊者可以使用這些字符(\r\n)來增加其他的郵件報頭。這種攻擊方式稱為電子郵件頭注入(或短電子郵件注入)。這種攻擊可以通過向郵件頭注入CC:或BCC:字段造成發送多封垃圾郵件。值得注意的是,某些郵件程序會自動將\n替換為\r\n。

四、為什么沒有正確處理mail()函數的第5個參數會引發安全問題

為了在PHP中使用mail()函數,必須配置一個電子郵件程序或服務器。在php.ini配置文件中可以使用以下兩個選項:

  • 配置PHP連接的SMTP服務器的主機名和端口
  • 配置PHP用作郵件傳輸代理(MTA)的郵件程序文件路徑

當PHP配置了第二個選項時,調用mail()函數的將導致執行配置的MTA(郵件傳輸代理)程序。盡管PHP內部可以調用escapeshellcmd()函數防止惡意用戶注入其他的shell命令,mail()函數的第5個參數$additional_parameters允許向MTA(郵件傳輸代理)中添加新的程序參數。因此,攻擊者可以在一些MTA中附加程序標志,啟用創建一個用戶可控內容的文件。

1. 漏洞演示代碼     

  1. mail("myfriend@example.com", "subject", "message", "", "-f" . $_GET['from']); 

在上述代碼中存在一個遠程命令執行漏洞,這個問題容易被沒有安全意識的開發人員忽略。GET參數完全由用戶控制,攻擊者可以利用該處輸入向郵件程序傳遞其他額外的參數。舉例來說,在發送郵件的過程中可以使用-O參數來配置發送郵件的選項,使用-X參數可以指定日志文件的位置。

2. 概念性驗證(PoC)

  1. example@example.com -OQueueDirectory=/tmp -X/var/www/html/rce.php 

這個PoC的功能是在Web目錄中生成一個PHP webshell。該文件(rce.php)包含受到PHP代碼污染的日志信息。因此,當訪問rce.php文件時,攻擊者能夠在Web服務器上執行任意PHP代碼。讀者可以在我們的發布的文章和這里找到更多關于如何利用這個漏洞的相關信息。

五、最新相關的安全漏洞

在許多現實世界的應用程序中,有很多由于mail()函數的第五個參數使用不當引發的安全問題。最近發現以下廣受關注的PHP應用程序受到此類漏洞的影響(多數漏洞由Dawid Golunski發現)。

受關注的PHP應用程序受到此類漏洞的影響

對應參考鏈接:CVE-2016-9920、DiscussionCVE-2016-10033、CVE-2016-10034、CVE-2016-10074CVE-2017-7692

由于一些廣泛使用的Web應用程序(如Wordpress,JoomlaDrupal)部分模塊基于以上庫開發,所以也會受到該類漏洞的影響。

五、為什么escapeshellarg()函數沒有那么安全?

PHP提供了escapeshellcmd()escapeshellarg()函數用來過濾用戶的輸入,防止惡意攻擊者執行其他的系統命令或參數。直觀來講,下面的PHP語句看起來很安全,并且防止了-param1參數的中斷:

  1. system(escapeshellcmd("./program -param1 ". escapeshellarg( $_GET['arg'] ))); 

然而,當此程序有其他可利用參數時,那么這行代碼就是不安全的。攻擊者可以通過注入"foobar' -param2 payload "來突破-param1參數的限制。當用戶的輸入經過兩個escapeshell*函數的處理,以下字符串將到達system()函數。

  1. ./program -param1 'foobar'\\'' -param2 payload \' 

從最終系統執行的命令可以看出,兩個嵌套的轉義函數混淆了引用并允許附加另一個參數param2。

PHP的mail()函數在內部使用escapeshellcmd()函數過濾傳入的參數,以防止命令注入攻擊。這正是為什么escapeshellarg()函數不會阻止mail()函數的第5個參數的攻擊。RoundcubePHPMailer的開發人員率先發布了針對該漏洞的補丁。

六、為什么FILTER_VALIDATE_EMAIL是不安全的?

另一種直接的方法是使用PHP的電子郵件過濾器(email filter),以確保在mail()函數的第5個參數中只使用有效的電子郵件地址。

  1. filter_var($email, FILTER_VALIDATE_EMAIL) 

但是,并不是所有可能存在安全問題的字符串都會被該過濾器過濾。它允許使用嵌入雙引號的轉義的空格。

由于函數底層實現正則表達式的原因,filter_var()沒有對輸入正確的過濾,導致構造的payload被帶入執行。   

  1. 'a."'\ -OQueueDirectory=\%0D<?=eval($_GET[c])?>\ -X/var/www/html/"@a.php 

對于上文給出的url編碼輸入,filter_var()函數返回true,將該payload識別為有效的郵件格式。

當開發人員使用該函數驗證電子郵件格式作為唯一的安全驗證措施,此時仍然是可以被攻擊者利用的:與我們之前的攻擊方式類似,在PHP程序發送郵件時,我們精心構造的惡意“電子郵件地址”會將將PHP webshell生成在Web服務根目錄下。

  1. <?=eval($_GET[c])?>\/): No such file or directory 

切記,filter_var()不適合用于對用戶輸入內容的過濾,因為它對部分字符串的驗證是不嚴格的。

七、如何安全的使用mail()函數

仔細分析應用程序中傳入mail()函數的參數,滿足以下條件:

1. $to 除非可以預期用戶的輸入內容,否則不直接使用用戶輸入

2. $subject 可以安全的使用

3. $message 可以安全的使用

4. $additional_headers 過濾\r、\n字符

5. $additional_parameters 禁止用戶輸入

事實上,當把用戶的輸入作為shell指令執行時,沒有什么辦法可以保證系統的安全性,千萬不要去考驗你的運氣。

如果在開發您的應用程序過程中第5個參數一定要由用戶控制,你可以使用電子郵件過濾器(email filter)將用戶輸入的合法數據限制為最小字符集,即使它違反了RFC合規性。我們建議不要信任任何轉義或引用程序,因為據歷史資料表示這些功能是存在安全問題的,特別是在不同環境中使用時,可能還會暴露出其他安全隱患。Paul Buonopane研究出了另一種方法去解決這個問題,可以在這里找到。

八、總結

許多PHP應用程序都有向其用戶發送電子郵件的功能,例如提醒和通知。雖然電子郵件頭注入是眾所周知的安全問題,但是當開發人員使用mail()函數時,往往會忽視不正當的使用有可能導致遠程命令執行漏洞。在這篇文章中,我們主要分析了mail()函數的第5個參數使用不當可能存在的安全風險,以及如何防范這種問題,防止服務器受到攻擊。

責任編輯:趙寧寧 來源: 安全客
相關推薦

2011-09-29 18:46:59

2013-09-26 10:50:16

搜狗360

2010-08-27 09:24:14

盛大

2015-11-18 21:40:36

360安全衛士搜狗

2010-06-02 10:52:34

金山奇虎360

2021-03-30 07:04:19

5G5G網絡5G終端

2009-11-17 09:26:39

騰訊搜狗輸入法

2009-05-27 14:31:53

NetBeansEclipsPHP

2023-12-07 08:22:58

Android應用

2009-10-28 09:34:01

2009-05-21 09:40:47

開心網千橡不正當競爭

2009-10-29 09:38:50

2011-11-30 21:56:31

ibmdwXPathPHP

2010-06-12 16:41:10

BlackBerry開

2021-01-11 05:30:04

Boot 單機片

2011-02-22 10:23:43

2022-02-14 18:20:34

寧德時代蜂巢能源電池

2011-09-29 10:09:03

LinuxWin8雙啟動

2021-08-10 14:57:50

騰訊電子借條移動應用

2021-02-20 09:57:02

人工智能移動應用
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美成人aaa级毛片在线视频 | 日韩在线视频观看 | 国产成人精品久久二区二区91 | 日韩三级一区 | 日本不卡视频 | 亚洲va欧美va天堂v国产综合 | 中文字幕乱码一区二区三区 | 亚洲精品大全 | 国产亚洲一区二区在线观看 | 9191在线播放 | 一a级片 | 精品国产一区二区三区久久久蜜月 | 一级做a爰片久久毛片 | 日韩电影中文字幕 | 99精品免费久久久久久久久日本 | 久久久久久中文字幕 | 中文字幕av一区 | 欧美精品综合在线 | 欧美一级在线免费观看 | 99亚洲精品| 噜久寡妇噜噜久久寡妇 | 国产美女精品 | 免费在线观看一区二区三区 | 亚洲不卡在线观看 | 国产在线97 | 中文在线一区 | 国产一区二区三区亚洲 | 超碰91在线 | 黑人中文字幕一区二区三区 | 一区二区三区中文字幕 | 久久网一区二区 | 日本一区二区三区视频在线 | 超碰激情 | 久草网址 | 国产日韩欧美综合 | 国产精品久久久久久久久图文区 | www.一区二区三区.com | 亚洲视频二区 | 国产主播第一页 | 日本视频免费 | 成人精品一区二区户外勾搭野战 |