命令注入漏洞(CVE-2023-25826)
网上简单搜了一下发现没啥人写这个的分析,那我就发了。
debug环境懒得配了,静态看吧。
漏洞复现
先插一条数据:
1 |
|
然后发包。
1 |
|
可以看到key参数注了。进docker把环境copy出来,jadx打开lib/tsdb-2.4.1.jar
分析
全局搜索下/api/put
可以看到q这个路由了,GraphHandler看看。
首先看下payload:
明显是shell的命令注入,基础知识:Runtime肯定不能这么注。因为他对一些shell的符号如; & |做了处理,那么九成是ProcessBuilder了。
其实Runtime.exec就是封装了ProcessBuilder。
直接搜ProcessBuilder:
GNUPLOT
可以发现是bin目录下的这个
basepath
接下来关注下这个str参数。
是basepath
basepath怎么设置的,在这
这里我去config里看了下,没搜到tsd.http.cachedir, 所以我去/etc/openstdb.conf文件里看了下
plot
再看下这个参数,他在这里可能是干什么的。
如图,相当于一个map放了各种参数,在runGnuplot的时候直接把他dump到file里了。
根据上述分析我们已经知道了bashpath在哪了,直接去/tmp/opentsdb看看有什么
到这就很清晰了,这个路由的作用就是调用mygnuplot.sh脚本,get参数还可以设置到临时文件里,然后再调这个临时文件。但是由于过滤不当造成了shell命令注入。
现在回头看过滤。
很菜的过滤,直接就绕了。
总结:
其实和刚入门靶场里的system(“ping $_GET[1]”)没啥区别,只不过代码多了点。
命令注入漏洞(CVE-2023-25826)
http://example.com/2024/08/05/opentsdb命令注入漏洞CVE-2023-25826/