3.代码审计之 命令注入
命令注入
一 基础讲解
1所谓的命令注入就是调用函数后输入的代码可以当命令行执行的功能
WINDOWS 和 LINUX下常用的函数有
system、exec、passthru、·· 反引号、shell_exec、popen、proc_open、pcntl_exec(Linux下的)
其函数的原型为,他们的功能都相当于反引号的功能
string system ( string $command [, int &$return_var ] )
string exec ( string $command [, array &$output [, int &$return_var ]] )
void passthru (string command, int &return_var)
string shell_exec (string command)
`` 反引号
二 接下来看操作
1 首先测试的是system函数
测试代码
运行后在URL里面输入相应的CMD命令就可以执行了
如输入whoami查看当前权限
后面几个功能一样 测试一下 不再贴图
2 测试代码如下
<?php //代码审计命令注入 $action = $_GET['cmd']; echo "<pre>"; //1.system($action); //2.echo exec($action); //3.passthru($action); //4.echo shell_exec($action); //5.echo `$action`; 注意是反引号 数字1旁边的那个 //echo popen($action,'r'); echo "<pre/>" ?>
3 命令执行漏洞的防御函数
主要使用escapeshellarg()_或escapeshellcmd() 来对参数进行过滤
escapeshellarg ( string $arg )
会过滤掉arg 中存在的一些特殊字符。在输入的参数中如果包含中
文传递给escapeshellarg,会被过滤掉。
escapeshellcmd ( string $command )
escapeshellcmd()函数会转义命令中的所有shell 元字符来完成工作。这些元字符包括:# & ; ` ,
| * ? ~ < > ^ ( ) [ ] { } $ \\。
4 先看没过滤前,在URL中输入echo “sadasd” >> 1.txt
意思是在根目录下将sadasd输出并生成到1.txt里面
然后看使用escapeshellcmd之后 >>被过滤转义 成了输出