深入解读命令执行:基本概念、攻击技术和防范应对( 五 )


RCE攻击的一种常见的原因是未对用户输入进行充分的验证和过滤 。当应用程序接受来自用户的数据,包括表单提交、、HTTP 请求参数等,在不经过严格验证和过滤时将它们插入到shell命令等语句中,攻击者可以通过构造特定的输入来注入恶意代码,并执行任意系统命令 。
1)远程系统命令执行- exec函数
在 PHP 中,exec() 函数是一个常用的执行系统命令的函数 。攻击者可能利用 exec() 函数构造恶意输入来执行任意系统命令,实现远程系统命令执行( Code,RCE)攻击 。
当 exec() 函数中包含用户输入或其他不受信任的数据且未经过充分验证和过滤时,攻击者可以构造特定的输入来注入可执行的系统命令,并利用服务器上的权限,从而控制该服务器、窃取敏感信息或者破坏服务器上的数据 。
例如,假设存在以下代码:
$userInput = 'some user input'; // 这是用户输入 $cmd = 'ls -la ' . $userInput; $result = exec($cmd);
在这个例子中,由于程序未对 $ 参数进行有效的过滤和验证,攻击者可以通过引入 shell 控制字符来注入可执行的系统命令,并使 $cmd 变量直接从用户控制的输入字符串中构建而成 。因此攻击者可以构造如下可以执行删除根目录下所有文件的命令:
$userInput = '; rm -rf /'; $cmd = 'ls -la ' . $userInput; $result = exec($cmd);
为避免此类问题,请始终对从外部来源到应用程序中的所有数据进行严格的输入验证和过滤,并尽可能避免直接在应用程序中执行不可信的系统命令 。相反,您应该考虑使用安全性更高的 API 函数来替换 exec(),例如 、、 等,并始终在调用这些函数之前进行充分的数据验证和过滤,以确保用户输入仅包含预期的数据 。
利用示例:
在php的www目录下创建一个exec.php文件,内容如下:

深入解读命令执行:基本概念、攻击技术和防范应对

文章插图
?访问:
?
执行的结果和在命令行中运行时一样的
2)远程系统命令执行- 函数
在 PHP 中,() 函数是一个常用的执行系统命令的函数 。攻击者可能利用 () 函数构造恶意输入来执行任意系统命令,实现远程系统命令执行( Code,RCE)攻击 。
当 () 函数中包含用户输入或其他不受信任的数据且未经过充分验证和过滤时,攻击者可以构造特定的输入来注入可执行的系统命令,并利用服务器上的权限,从而控制该服务器、窃取敏感信息或者破坏服务器上的数据 。
例如,假设存在以下代码:
$userInput = 'some user input'; // 这是用户输入 $cmd = 'ls -la ' . $userInput; $result = system($cmd);
在这个例子中,由于程序未对 $ 参数进行有效的过滤和验证,攻击者可以通过引入 shell 控制字符来注入可执行的系统命令,并使 $cmd 变量直接从用户控制的输入字符串中构建而成 。因此攻击者可以构造如下可以执行删除根目录下所有文件的命令:
$userInput = '; rm -rf /'; $cmd = 'ls -la ' . $userInput; $result = system($cmd);
为避免此类问题,请始终对从外部来源到应用程序中的所有数据进行严格的输入验证和过滤,并尽可能避免直接在应用程序中执行不可信的系统命令 。相反,您应该考虑使用安全性更高的 API 函数来替换 (),例如 、exec、 等,并始终在调用这些函数之前进行充分的数据验证和过滤,以确保用户输入仅包含预期的数据 。