TCTF 2019 ghost pepper wp

刚开始一看是jetty和karaf,一直在去调jetty,想用jetty那个泄露绝对路径的漏洞,第一天晚上一直在调,后来发现看错版本号了,这个版本里没有那个漏洞。

第二天就在分析karaf,没有找到输入点,所以网上的漏洞基本最后都挂掉了。

在第二天下午的时候,刷/system/console得到302,遂进入控制台,在gogo中得到flag,但是当时一脸迷茫,flag如下flag{DOYOULOVEJOLOKIA?ILOVEITVERYMUCH},于是搜了一把JOLOKIA,发现是一个jmx的东西https://jolokia.org

出题人以为我们的脑洞是这样的

-w1281

简单的一搜,还真的有漏洞
https://www.freebuf.com/vuls/166695.html
https://blog.gdssecurity.com/labs/2018/4/18/jolokia-vulnerabilities-rce-xss.html

当时光记得看jndi了,于是常规起ldap服务器,扔poc,打了几次一直报错,说我json请求无效。
-w1608

后来发现需要去掉content-type头,结果去掉content-Type头后依然报错。刚开始以为是我ldap服务有毛病,于是开新服务器,监听80和1389,发现确实没有数据包出来,遂看了眼报错。
-w1608

1.5.0后默认不开代理,报错让看文档的proxy。
https://jolokia.org/reference/html/proxy.html

恩,不开代理的话没有办法jndi。
需要另辟蹊径。

文章里有讲可以通过访问/jolokia/list来查看可用的MBeans。
-w950

于是就访问了一下,json拷出来,放进vscode,结构如下。

刚开始看着也一脸懵逼,不知道这东西怎么用,然后看了一个文章上发送的请求,对比了一下其中的参数,大概了解到了一点门路。尝试构造了几个包,看了看文档发现,operation需要用EXEC,而attribute用READ/WRITE,详细见jolokia的文档。
-w408

既然提示讲了karaf,那必然要往karaf上走。

google “org.apache.karaf” “随便找了个方法(记不清了)”
发现这东西在karaf的定义上有详细的定义。

-w983

通过阅读文档发现这个jmx就是个操作命令行的接口,跟直接操作命令行的效果是一样的。因为之前我们通过system/console来得到的flag,所以思路就出来了,通过jmx调用mbeans去安装webconsole,然后访问就好了,这也能之前解释为什么我们能够访问到webconsole了。

找了一下,确实存在这个接口,命令行执行如下:
-w953

看了一下list的feature中,确实存在响应的方法,搜一下。
-w966

于是构造如下数据包,想测一下,结果报错。

-w1608

刚开始没有发现这个报错的原因,后来又测了几个mbeans发现,有的发现正常,有的爆这个错误。于是看一下list,总结发现只要是有多参数的操作都会出现这种情况,刚开始以为会自动识别参数类型,然后进行调用相应的重载方法,后来考虑是不是调用有问题。

于是搜索了一下,发现还真是这样。

http://jolokia.963608.n3.nabble.com/Sending-other-than-strings-to-jolokia-exec-parameters-td4023958.html

-w1142

需要指定参数类型,于是带上参数类型请求。

执行成功。打开console

-w1348

gogo获取flag

-w1348

⬆︎TOP