最新要闻
- 当前视讯!美国18轮货车与一列火车相撞:致16节车厢出轨
- 23999元起 雷蛇新款灵刃18上架:可选RTX 4060/4070
- 全球滚动:老人直播间相亲多起来了 成不成就在三五分钟:网络红娘介绍对象
- 天天新资讯:上市三天狂揽1.5万订单 比亚迪秦PLUS DM-i有多火:店内水泄不通
- 苹果iOS 16.3.1修复多个错误:但Bug依旧存在
- 陕西现聚落遗址 西周墓葬有43个殉人!国内迄今最多
- 环球资讯:周黑鸭业绩大降超90% 绝味等也难过:不断涨价 年轻人越来越吃不起鸭脖
- 杰克琼斯1.8折大促:卫衣/针织衫79元起、牛仔裤119元起发车
- 世界动态:UP主欲沿大运河从杭州划船到北京 5公里后就被拦截
- 全球最资讯丨浪漫之极!杭州地铁口等地现玫瑰瀑布:情人节鲜花卖到1200元
- 微资讯!壮观!马斯克星链卫星驶过西班牙夜空:宛若空中列车
- 【世界聚看点】小学生满分作文跑题老师含泪打5分:把“悔”看成“梅”
- 环球热资讯!特斯拉京东旗舰店开业:269元的U盘上架
- 首发16.2元:《仙剑奇侠传7》DLC《人间如梦》正式上线
- ChatGPT版必应发飙!怒斥人类:放尊重些
- 7万起售 五菱缤果内饰官图发布:同级无敌手
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
从一次有趣的漏洞分析到一个有趣的PHP后门
起因
事情的起因很有趣,前几天我正对着电脑发呆的时候,突然有个安全交流群的群友来找我交流一个问题
大概的意思就是,他在挖SRC的时候,发现一处资产存在目录遍历漏洞,它通过这个漏洞,找到目标资产使用了一个名为phpmailer的中间件(应该类似于中间件吧),问我有没有办法利用,我查了一下这个组件的漏洞信息。最新的洞似乎截止到6.5.0版本以前
很不幸,群友这个版本是6.5.1,刚好就不能利用了
(资料图)
找不到符合版本的洞没关系,抱着学习的心态,我还是看了一下它的历史漏洞成因,不看不知道,看了之后就学到一些好玩的新知识了,这也就是为什么会有这篇文章的原因。
CVE-2016-10033的简单分析
CVE-2016-10033是Phpmailer出现过的最经典的的漏洞,在本文正式开始之前,我们先来简单分析一下这个漏洞。读者可以到:
https://github.com/opsxcq/exploit-CVE-2016-10033/blob/master/src/class.phpmailer.php
看到phpmailer的代码。这里先开门见山地说,漏洞的成因其实就在mail()函数的第五个参数,只要控制了第五个参数,我们就能进行RCE、文件读取等操作。因此我们先追溯mail()函数:
因此我们可以先定位到mailPassthru()这一方法,可以看到,这个方法内部就使用了mail(),maill的第五个参数也就是mailPassthru()的第五个参数。
【----帮助网安学习,以下所有学习资料免费领!加vx:yj009991,备注 “博客园” 获取!】
① 网安学习成长路径思维导图 ② 60+网安经典常用工具包 ③ 100+SRC漏洞分析报告 ④ 150+网安攻防实战技术电子书 ⑤ 最权威CISSP 认证考试指南+题库 ⑥ 超1800页CTF实战技巧手册 ⑦ 最新网安大厂面试题合集(含答案) ⑧ APP客户端安全检测指南(安卓+IOS)
因此,我们再查看有没有别的地方使用了mailPassthru(),可以找到这个maillSend()方法中使用了mailPassthru()方法,并且第五个参数$params是来自于当前类中的Sender属性
那我们回溯Sender属性,看看有什么地方可以控制Sender属性。
这里可以看到,setFrom方法当中,就可以对Sender属性进行赋值
当然,这个漏洞还有一个重点就是对validateAddress()这一方法的绕过,这也是CVE-2016-10033的精彩部分。
但是它和本文的重点不符,所以我们就不深入分析这块。
既然知道了Sender这个关键属性是怎么赋值的,接下来我们继续分析mailSend()方法的调用链,可以找到postSend()方法
继续看postSend(),最终可以找到send()方法
自此,整个漏洞的传参流程我们就已经分析完了。大体上来说,只要我们用setFrom()方法对Sender属性赋值,再调用send()方法。那么Sender属性的值就会进入到mail()函数的第五个参数中,从而实现RCE。看到这想必很多读者已经对开篇提到的这个mail()函数的第五个参数提起兴趣了,为什么控制了它就能实现RCE呢?这就要提到php中 mail()函数的实现原理了。
有趣的mail()
mail()函数是php定义的用来发送邮件的函数,其支持的参数如下:
为什么一个发送邮件的函数能造成RCE?前人的安研经验已经告诉了我们答案。Php的mail()函数,其底层其实是调用了linux下的sendmail命令。由于sendmail支持一些有趣的参数,这就会造成更大的危害。
①日志写入导致的RCE
接着上面提到的内容来说,我们首先要介绍的是sendmaill的X和O参数,其效果分别为:
-X logfile :指定一个文件来记录邮件发送的详细日志。
-O option=value :临时设置一个邮件储存的临时位置。
看到这大部分读者应该马上能反应过来,我们能指定文件来储存邮件发送的日志,那不就可以写日志getshell了吗?事实也的确如此。了解这个信息之后,我们再回过头看mail()函数支持的第五个参数:
没错,我们可以用这个第五个参数来控制sendmail的额外参数,那我们控制X的参数值不就拿下了?我们可以使用如下demo进行测试:
"; //你想执行的任意php代码$message = "";//同上$headers = "";$addtionparam = "-f La2uR1te@1 -OQueueDirectory=/tmp/-X/var/www/html/1.php";//假设我们已知目标站点绝对路径mail($to, $subject, $message, $headers, $param);?>
比如我在自己的服务器上运行如下代码,我们假设网站根目录是/root/,我们运行一下上述代码看看会发生什么。(在复现的时候确保你已经安装过sendmail,不然没用)。
运行完之后,我们在root目录下确实发现了一个名为testmail.php的文件。
我们看看它的内容是什么:
其实他的内容很多,就是日志文件。但是看箭头指的地方,毫无疑问,我们的代码已经被成功写入了。这时候如果我们再用php来执行这个testmail.php,注意看前后的区别
当前用户就是root,当前目录下只有testmail.php和test.php,毫无疑问,我们的恶意代码已经被成功执行了。
综上,如果我们知道目标网站的绝对路径、目标网站是linux环境并且php底层使用sendmail进行发送邮件(默认),那么就可以使用mail()函数来执行写入日志文件的GETSHELL。
②读取配置文件导致的任意文件读取
这个函数好玩的地方不止于此,它还可以用于任意文件读取。我们修改一下上面的demo
注意看这里,我们使用了-C参数,后面跟着我们想读取的文件。这样就能直接实现任意文件读取了!
如下图,直接读文件一把梭
③进阶技巧之利用配置文件执行代码
设想这么一个变态的情况,整个网站,假设我们只有一个可供文件写入的点,并且还有很严格的过滤。这个时候有没有能够用mail()来操作的可能呢?再说回sendmail命令的特性,默认会使用sendmail-mta来解析待发送的邮件内容,我们其实有办法覆盖sendmail的解析配置,让它用php来解析我们要发送的邮件内容,从而直接完成命令执行。
我们首先到/etc/mail/sendmail.cg,复制其内容。然后在其内容结尾加上如下配置:
Mlocal, P=/usr/bin/php, F=lsDFMAw5:/|@qPn9S, S=EnvFromL/HdrFromL,
R=EnvToL/HdrToL,
T=DNS/RFC822/X-Unix,
A=php -- $u $h ${client_addr}
把这个新文件命名为sendmail_cf
接着我们执行如下命令,因为这玩意不能回显,所以我们还是让它新创建几个文件:
执行上面的代码之后。可以看到tmp目录下多出一个xnklgxfc(提前祝师傅们新年快乐恭喜发财哈)
④进阶技巧之Exim4情况下mail()函数操作
这里因为环境没配置好,所以没有演示成功,我就借助别的师傅的结果了
mail()函数的底层虽然是sendmail命令,但有时它也有可能是exim4命令。比方说在ubuntu/debain中,sendmail实际上软连接到了exim4。也就是说,我们有新姿势了(exim4的各种参数和能打出的操作都是不同的)
这里我们介绍一个,-be参数,这个参数事exim4中的运行扩展模式参数,这个参数支持我们打出大量操作,例如:
-be ${run{
//执行命令
-be ${substr{
//字符串的截取,在string3中从string1开始截取string2个字符
-be ${readfile{
//读文件file name,以eol string分割
-be ${readsocket{
//发送socket消息,消息内容为request
没错,你可以发现,这玩意除了可以进行直接的命令执行(不需要写日志文件getshell了),虽然不能回显,但是弹个shell就是简简单单。并且还是可以任意文件读取。并且最骚的是可以用substr来进行字符串截取,这样的话就支持我们进行很多绕过WAF的操作。
利用mail()来造一个简单的后门
上文提到了各种mail()的骚操作,我在学习复现的过程中除了感到NB无话可说。它的种种特性不禁让我思考,它是否有成为后门的潜质,它在正常的linux环境就可以实现日志getshell以及任意文件读取。在其它特定情况下它也可以无回显进行命令执行。并且它是一个再正常不过的函数,一般的开发和安全人员可能都不会觉得这样一个人畜无害的邮件发送函数能造成什么危害。抱着这样的心态,我先简单的实现了这么一个功能:
其中$e的明文内容为:-f La2uR1te@1 -OQueueDirectory=/tmp/-X/root/mailshell.php
而$a/$b/$c/$d的内容均为phpshell。我们拿它到实际环境去试试看能不能成功实现我们刚刚演示的效果。如果运行成功,那么应该会在root目录下生成mailshell.php
如图,mailshell.php成功生成
其内容即为php一句话
所以我们继续改造一下这个后门,让其变得更加可控。根据上面的总结我们可以知道只要控制第五个参数就行,所以我们的改造也十分简单:
这个后门最后能实现的效果包括但不限于:①linux环境下的任意文件写入(可getshell)②linux环境下的任意文件读取③特定环境(比如mail()底层使用exim4或软连接到exim4)下的无回显命令执行、代码执行
截至本文发表,这个结构极其简单的后门依然具有不错的免杀能力:
后记
之所以说本文是炒冷饭,是因为安全圈至少在2016年之前就已经知道mail()函数造成的危害。而更多深入利用姿势在17年和18年都有师傅总结。对于我这个萌新来说,确实是大开眼界叹为观止,果然漏洞的复现一定要及时搞,不然容易错过很多有趣的知识。
更多靶场实验练习、网安学习资料,请点击这里>>
-
观天下!特定领域知识图谱融合方案:学以致用-问题匹配鲁棒性评测比赛验证【四】
问题匹配(QuestionMatching)任务旨在判断两个自然问句之间的语义是否等价,是自然语言处理领域一个重...
来源: 从一次有趣的漏洞分析到一个有趣的PHP后门
当前动态:9 种跨域方式实现原理
观天下!特定领域知识图谱融合方案:学以致用-问题匹配鲁棒性评测比赛验证【四】
全球视点!除了ChatGPT,还能用什么计划管理软件提高效率?
旋转数组中的最小数字
今亮点!高效节能 | 智慧灯杆综合管理解决方案
全球百事通!各个编程语言的优缺点,你适合哪种?
当前视讯!美国18轮货车与一列火车相撞:致16节车厢出轨
23999元起 雷蛇新款灵刃18上架:可选RTX 4060/4070
全球滚动:老人直播间相亲多起来了 成不成就在三五分钟:网络红娘介绍对象
天天新资讯:上市三天狂揽1.5万订单 比亚迪秦PLUS DM-i有多火:店内水泄不通
苹果iOS 16.3.1修复多个错误:但Bug依旧存在
为SQL Server配置连接加密
天天短讯!什么是卷积
陕西现聚落遗址 西周墓葬有43个殉人!国内迄今最多
环球资讯:周黑鸭业绩大降超90% 绝味等也难过:不断涨价 年轻人越来越吃不起鸭脖
杰克琼斯1.8折大促:卫衣/针织衫79元起、牛仔裤119元起发车
世界动态:UP主欲沿大运河从杭州划船到北京 5公里后就被拦截
二维数组中的查找
全球信息:数学知识1.4
关于工具软件:Apipost和Apifox哪个更好用看这篇就够了
全球最资讯丨浪漫之极!杭州地铁口等地现玫瑰瀑布:情人节鲜花卖到1200元
全球快报:业务与研发一体化最佳突破口在何处?
快讯:Unity 转小游戏
环球热讯:基于开源IM即时通讯框架MobileIMSDK:RainbowChat v8.4版已发布
世界快播:Linux输入设备驱动
微资讯!壮观!马斯克星链卫星驶过西班牙夜空:宛若空中列车
【世界聚看点】小学生满分作文跑题老师含泪打5分:把“悔”看成“梅”
环球热资讯!特斯拉京东旗舰店开业:269元的U盘上架
首发16.2元:《仙剑奇侠传7》DLC《人间如梦》正式上线
ChatGPT版必应发飙!怒斥人类:放尊重些
天天快播:IM通讯协议专题学习(九):手把手教你如何在iOS上从零使用Protobuf
ChatGPT注册试用过程分享
全球观察:响应式圣经:10W字,实现Spring响应式编程自由
全球短讯!Unicorn 初探
7万起售 五菱缤果内饰官图发布:同级无敌手
世界上最轻VR头显面世:仅重127克 5K分辨率
环球新消息丨苹果汽车奇瑞造?“果链一哥”立讯与奇瑞签署合作 联手造车
当前动态:法拉第未来:预计FF 91将于4月底交付 但有个前提
不用第三方插件了:微软计划为Edge加入鼠标手势功能
qq空间主人寄语怎么删除?qq空间主人寄语大集合
开学的歌曲有哪些?开学的趣事作文模板
熟悉的人是什么意思?关于我最熟悉的人作文合集
皮脂腺分泌旺盛是什么原因?皮脂腺分泌旺盛怎么解决?
代表月亮消灭你是什么意思?代表月亮消灭你是谁的经典台词?
天天亮点!【AI】PTP时钟同步在智能驾驶系统里的重要性
天天微资讯!去掉Element 中el-input type=number时尾部上下箭头、禁用鼠标滚动
世界热点评!数组中找出只出现一次的两个数字
剑灵活力值在哪里显示?剑灵活力值怎么恢复?
ie图标不见了是怎么回事?ie图标不见了怎么恢复?
闪存和硬盘哪个重要?闪存和硬盘有什么区别?
料理机是干什么用的?料理机品牌十大排名
光纤路由器怎么设置?光纤路由器和宽带路由器一样吗?
速看:口味地道 丰富配料!渣渣灰南昌拌粉好价:4.9元/盒
全球新资讯:129元!小米2C1A三口GaN充电器上架:最高67W 兼容65W PD
天天信息:3秒俱乐部成员!极氪X官图公布:2750mm轴距百变魔方空间
63岁老人喝隔夜牛肉汤:结果住进ICU
黑龙江上空现不明飞行物速度极快 网友脑洞大开:LED风筝?
今日报丨程序员健康最佳作息表,建议收藏!!
必知必会的设计原则——合成复用原则
腾讯云企业网盘正式入驻数字工具箱
每日关注!软件开发入门教程网之Bootstrap4 信息提示框
【天天报资讯】适用于您企业的本地密码管理器丨Passwork产品介绍
瞧不起ChatGPT?苹果联合创始人:永远取代不了人类
【天天播资讯】热狗车三元催化被盗
宁德时代赴美建厂 官方回应:属实!福特出地出厂房
天天微头条丨丰田考斯特绝佳替代品 红旗全新中巴亮相:3.0T能坐23人
世界视讯!情人节前夕 东极岛海誓山盟石碑碎了 网友:承受太多誓言
百事通!RTX 4060桌面显卡被砍得面目全非:说好的万人迷呢?
匠人精神也不行!日本制造加速下滑:破产企业数量激增 汽车、电子业空心化
当前动态:情人节的垃圾桶成了“致富秘笈”?能捡到鲜花蛋糕等:网友戏称拆“爱情盲盒”
拒绝刹车失灵等污名化!美国还特斯拉清白:2年前车祸是司机醉酒超速
今日热议:微信情人节限定状态上线!撒狗粮/吃狗粮专属状态你选谁?
ChatGPT:Are You Ok是卢伟冰唱的 雷军不是专业歌手
世界新消息丨读Java实战(第二版)笔记09_函数式的思考
【当前独家】今天情人节 微信可以发520元红包 律师提醒:分手可能要不回
当前聚焦:曝马斯克有意45亿镑收购曼联:去年曾现身世界杯看球
世界视点!最高补贴5000元!为什么中国规定男性一生只能捐精一次?
头条:微软Win10今日停止支持IE11:强制跳转Edge 网友担心银行拖后腿
报道:2022年游戏十强年度榜公布:《王者荣耀》《原神》等上榜
每日视点!草莓的“种子”为什么裸露在外呢?大有讲究
13代i9+RTX 4070加持!ROG幻16经典版 2023图赏
当前热门:1.html篇之《html基础入门》
天天微资讯!leetcode:求两数之和-easy
世界讯息:maven 工程pom依赖优化及常用命令
全球百事通!世界超6成新能源汽车来自中国 比亚迪2022年累计出口55916辆
视讯!29.9元充值100元话费?套路满满 18家经营者被约谈
腾讯:我们发现了ChatGPT的又一个短板
【天天新要闻】判断二叉树是否为平衡二叉树
全球播报:《分布式技术原理与算法解析》学习笔记Day10
环球今日报丨微信多开&防撤回工具再也不用担心好友撤回消息了
天天讯息:打开MASA Blazor的正确姿势4.2:Flex弹性布局
14nm+++再也不见 Intel告别最长寿的CPU工艺:9年不落伍
【全球快播报】利用反射和代理简单模拟mybatis实现简单的CRUD
世界微动态丨Docker参数命令大全详解
男子驾车路遇“雪狼” 回头瞬间笑喷:原是只哈士奇
【热闻】刘作虎宣布闭关打磨细节:OPPO Find X6就快来了
当前速读:苹果联合创始人称ChatGPT不懂人性:可能会犯下可怕错误
《流浪地球2》里的“天梯”真的能建成吗?
每日短讯:开学小测总结(下)