java exec 参数构造_Java安全之命令执行

原标题:Java安全之命令执行

e97c3503d50a93ae7f1d3f2871ccee06.png

前言

java安全里无论是反序列化还是什么其他漏洞,要说最终最能体现漏洞价值的话,那就是非命令执行莫属了。这次打算花点时间好好总结整理下java命令执行的几种方式,并做些浅面的分析。最近刚好看到了360BugCloud公众号的一篇java命令执行的调试分析文章,也跟着调试了一遍,期间学到了不少,链接会在文末贴出来。

首先总的的来说,java命令执行可以分为4种方法,分别是 java.lang.Runtime#exec、java.lang.ProcessBuilder#start、java.lang.ProcessImpl#start以及通过JNI的方式调用动态链接库,最后一种方式这篇文章暂不做分析,先看下前面比较常用的三种方法。

Runtime命令执行

在java反序列化中用到最多的就是Runtime类的exec方法来命令执行了,用法:

Runtime.getRuntime. exec( "whoami")

实际上Runtime类的exec的重载方法有6个,如下:

2e39a72352f4f7086412c871e14c656c.png

例如本地运行命令ipconfig查看网络配置并返回信息:

InputStream ins = Runtime.getRuntime.exec( "ipconfig").getInputStream;ByteArrayOutputStream bos = newByteArrayOutputStream;byte[] bytes = newbyte[ 1024];intsize;while((size = ins.read(bytes)) > 0)bos.write(bytes, 0,size);System. out.println(bos.toString);

但是这里有个问题,在渗透的过程中如果要遇到要写入文件的话,这里使用”echo xxx>test.txt”等类似的命令就会爆出如下的错误:

430408df2bd158bbee4dbc01ea827aec.png

下面就跟入代码调试查看下具体原因,直接在exec方法处打断点

428b01c925070d38e2379b26dd9751b1.png

首先是跳到另外一个exec的重载方法,envp参数为null,file类型的dir参数也为null

492f07ad692ff2736c8917e57609324a.png

接着将我们传入的command字符串带入到StringTokenizer类进行处理,跟入查看下

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值