命令执行漏洞
命令执行漏洞是指攻击者可以随意执行系统命令。
OS命令执行漏洞
部分Web应用程序提供了一些命令执行的操作。例如,想要测试http://www.xxser.com是否可以正常连接,那么Web应用程序底层就很可能去调用系统操作命令,如果此处没有过滤好用户输入的数据,就很有可能形成系统命令执行漏洞
在Windows中,"&&"的作用是将两条命令连接执行,在Linux系统下同样适用
在测试DVWA提供的命令执行漏洞测试模块,输入"www.xxser.com&&Command"
系统将会执行输入Command。这就是命令执行漏洞
命令执行模型
PHP命令执行
PHP提供了部分函数用来执行外部应用程序,例如:system(),shell_exec(),exec(),passthru()
1. 命令执行
<?php
$host=$argv[1];
system("ping".$host);
?>
使用PHP.EXE执行此文件,命令为"php.exe cmd.php www.xxser.com",PHP将会调用系统ping命令。
攻击者可能输入"php.exe cmd.php "|net user""
2. 代码执行
PHP提供了一个叫做eval()的函数,可以把字符串按照PHP代码执行,就是可以动态的执行PHP代码。
使用eval需要注意:必须输入的字符串是合法的PHP代码,并且以分号结尾
CMD.PHP中存在以下代码:
<?php eval($_REQUEST['code'])?>
提交http://www,xxser,com/cmd.php?code=phpinfo();后,会执行phpinfo()
动态函数调用
<?php
function A(){
return "A()函数..";
}
function B(){
return "B函数..";
}
$fun=$_REQUEST['fun'];
echo $fun(); //动态调用函数
?>
PHP解析器可以根据$fun的值来调用对应的函数。
输入:http://www.xxser.com/function.php?fun=phpinfo
$fun()所对应的函数即为phpinfo();
程序员还可能这样传递参数
<?php
$fun=$_GET['fun'];
$par=$_GET['par'];
$fun($par);
?>
当提交URL: http://www.xxser.com/function.php?fun=system&par=net user最终执行函数为: system("net user")
PHP函数代码执行漏洞
在PHP中,代码执行漏洞出现较多,像preg_replace(),ob_start(),array_map()等函数都存在代码执行的问题,例
<?php
$arr=$_GET['arr'];
$array=array(1,2,3,4,5);
$new_array=array_map($arr,$array);
?>
array_map()的作用是返回用户自定义的函数处理后的数组,现在输入URL:http://www.xxser.com/function.php?arr=phpinfo
发现,phpinfo代码已被执行
更多PHP危险函数,可以参阅《高级PHP应用程序漏洞审核技术》