webmin远程命令执行漏洞(cve-2019-15107)深入分析
漏洞描述
近日Webmin被发现存在一处远程命令执行漏洞,经过分析后,初步猜测其为一次后门植入事件。
Webmin是目前功能最强大的基于Web的Unix系统管理工具。管理员通过浏览器访问Webmin的各种管理功能并完成相应的管理动作。据统计,互联网上大约有13w台机器使用Webmin。当用户开启Webmin密码重置功能后,攻击者可以通过发送POST请求在目标系统中执行任意命令,且无需身份验证。
漏洞分析
首先分析msf给出的插件
根据插件,还原出poc如下:
当poc执行后,会向password_change.cgi发送POST请求
接下来看下password_change.cgi
位于37行到188行处,存在if-else语句
他们分别是
1、if ($wuser)
2、elsif ($gconfig{‘passwd_cmd’})
3、elsif ($in{‘pam’})
4、else
我们需要确认,程序到底进入那个if分支了
我们先print $wuser
从上图打印结果看,wuser不为空,所以这里直接进入if ($wuser)分支
在if ($wuser)分支中,首先执行encrypt_password方法,如下图红框处
encrypt_password方法位于aclacl-lib.pl
该方法的底层,调用了crypt方法,如下图,位于acl/md5-lib.pl中
传入该crypt方法的第一个参数为$passwd
打印此时passwd
可见值为 AkkuS|dir,也就是POST请求中的old参数值
encrypt_password底层调用crypt进行编码后,将计算值return,赋值给$enc,如下图
由于我们传入的pass(AkkuS|dir)并不是root用户的密码,下图红框处的eq结果为false
因此触发pass_error,系统需要把Failed to change password : The current password is incorrect这个信息反馈给用户
但是注意上图红框处,在pass_error方法的传参中,$in{’old’}被 qx/ /包裹
了解下qx/ /在perl中的用法:
qx执行外部程序,相当于“
也就是说,$in{’old’}的值会被执行。$in{’old’}就是POST中传入的old参数,可控,所以这里造成了任意代码执行漏洞。
值得注意的是,POST中的old参数,是用户修改密码时所提交的旧密码。众所周知,密码是一个字符串,而非可执行代码,这里将传入的旧密码字符串拿来执行,并非正常业务逻辑所为。
不仅如此,$in{‘old’}的值在被执行后,会拼接在$text{‘password_eold’}参数后面,一同传入pass_error中,如下图
打印$text{‘password_eold’},查看它的值
当我们的$in{’old’}传入”AkkuS|dir”时,dir执行后的返回值会拼接到The current password is incorrect后,传入pass_error
接着,在pass_error中被打印出来
这里不仅仅将用户旧密码拿来执行,更是通过pass_error,把返回值直接打印到返回值中,更加落实了被植入后门的猜测
对比官网 SourceForgegithub三个不同地方下载的Webmin代码发现,官网 SourceForge存在代码执行点,而github不存在
1、官网与SourceForge:
这里存在qx包裹的$in{‘old’}
再来看github上下载的同版本Webmin代码
Pass_error中竟然没有被qx包裹的$in{‘old’}
对比如下:
也就是说,github上下载的Webmin不存在代码执行漏洞,而官网和SourceForge上却存在
被植入后门依据
1、 将用户提交的旧密码通过qx直接执行
正常业务逻辑中旧密码为字符串,而非可执行代码,这里将密码字符串拿来直接执行,不符合逻辑
2、 将执行结果通过报错打印到返回值中
如果仅仅是执行代码,攻击者无法判断后台执行是否成功,以及无法得到执行成功后的返回值,例如”dir”、”ifconfig”这类指令,是需要看回显值的。因此,在这里通过pass_error将执行成功的返回值隐蔽的返回
3、 官网 SourceForge代码中存在漏洞,github代码中无漏洞
通过以上三点,初步猜测,Webmin代码被移植入后门
POC无需管道符
目前业界流传的poc,都是需要使用管道符 “|”的形式:
例如msf给出的poc:”AkkuS|dir ”
但是经过漏洞深入的分析发现,old中的值最终会被直接执行,因此并不需要管道符
可以构造如下poc
有大佬写了一个MSF利用模块,链接:https://www.exploit-db.com/exploits/47230
GitHub上有个Python检测脚本,链接:https://github.com/jas502n/CVE-2019-15107
Webmin官方对Webmin源代码被植入后门的解释说明:http://webmin.com/exploit.html
webmin远程命令执行漏洞(cve-2019-15107)深入分析相关推荐
- CVE-2019-15107 Webmin远程命令执行漏洞复现
0X1 漏洞概述 Webmin的是一个用于管理类Unix的系统的管理配置工具,具有网络页面.在其找回密码页面中,存在一处无需权限的命令注入漏洞,通过这个漏洞攻击者即可以执行任意系统命令.它已知在端口1 ...
- flexpaper php 代码,FlexPaper 2.3.6 远程命令执行漏洞 附Exp
影响版本:小于FlexPaper 2.3.6的所有版本 FlexPaper (https://www.flowpaper.com) 是一个开源项目,遵循GPL协议,在互联网上非常流行.它为web客户端 ...
- 【注意】关于Redis存在远程命令执行漏洞的安全公告
点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 来源:CNVD漏洞平台 安全公告编号:CNTA-2019-0024 2019年7月10日,国 ...
- rmi远程反序列化rce漏洞_Oracle WebLogic 反序列化远程命令执行漏洞预警
报告编号:B6-2019-041901 报告来源:360-CERT 报告作者:360-CERT 更新日期:2019-04-19 0x00 事件背景 2019年4月17日,国家信息安全漏洞共享平台(CN ...
- 远程执行漏洞修复方案_请马上修复!SaltStack远程命令执行漏洞
[漏洞预警]SaltStack远程命令执行漏洞(CVE-2020-11651.CVE-2020-11652) 2020年5月3日,阿里云应急响应中心监测到近日国外某安全团队披露了SaltStack存在 ...
- 详述WebLogic反序列化远程命令执行漏洞的处理过程,云和恩墨技术通讯精选
各位亲爱的用户/读者朋友们: 为了及时共享行业案例,通告共性问题,达成知识共享和提前预防,我们整理和编辑了<云和恩墨技术通讯>(5月刊),通过对过去一段时间的知识回顾和故障归纳,以期提供有 ...
- CVE-2019-19781 Citrix ADCNetScaler远程命令执行漏洞
未经允许,不得擅自转载,违者必究 一.前言 @Adminxe 因为最近在刷edusrc,由此发现这个漏洞,涉及多所高校,所以过来给大家实战POC测试一波,可直接进行命令执行,Citrix产品中的漏洞使 ...
- 邮件传输代理Exim远程命令执行漏洞细节披露,影响全球近一半邮件服务器
注意:是远程命令执行,不是远程代码执行 Exim是一个MTA(Mail Transfer Agent,邮件传输代理)服务器软件,该软件基于GPL协议开发,是一款开源软件.该软件主要运行于类UNIX系统 ...
- 【知道创宇404实验室】Oracle WebLogic远程命令执行漏洞预警
2019年04月17日,国家信息安全漏洞共享平台(CNVD)官方发布安全公告 http://www.cnvd.org.cn/webinfo/show/4989 称Oracle WebLogic wls ...
最新文章
- 正则表达式测试工具 Regex Tester 的使用方法
- 手机AI、购物AI...还有哪个“AI+”被忽略了?
- 信息收集渠道:文本分享类网站Paste Site
- HTML最常用的字符实体
- css3实现烟花效果,CSS3 带颤动效果的简易烟花动效
- OpenGL Deferred Shading延迟阴影实例
- 这个黑科技小音箱,不用连蓝牙、一触即播
- 0 0/2 * * * ? linux文本含义,Linux基础2.0
- 9.霍夫变换:圆——圆的算法、投票使用技巧、优点和缺点_2
- 为什么Linux登录后显示“-bash-3.2#”-转
- 全网首发:char数组矩阵转bit的算法
- 简单的心形html代码,bat心形代码的简单示例
- Github上热搜的Java开源商城项目合集,这个是真的好
- springboot+nodejs+vue+Elementui网上商城购物系统
- 推荐几款好用的网站CMS管理系统
- Idea查看Java类图和接口实现关系
- 推荐7款珍藏已久的手机APP,非常实用
- 清华大学出来的工资有多高?
- Vue项目中实现改变屏幕尺寸重新刷新页面-计算页面尺寸
- 如何在 Android 上恢复删除屏幕截图/照片的四种方式