命令执行漏洞介绍
应用程序有时需要调用一些执行系统命令的函数、如在PHP中,以下函数:
system:system()—执行shell命令也就是向dos发送一条指令。
exec:exec—方便的PHP函数发送一个字符串供操作系统的命令行处理。
shell_exec:shell_exec— 通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回。
passthru:passthru ()只调用命令,不返回任何结果,但把命令的运行结果原样地直接输出到标准输出设备上。输入/输出—
ppopen:popen ()函数打开一个进程管道来执行给定的命令,返回一个文件句柄。
proc_popen:类似popen() 函数, 但是 proc_open() 提供了更加强大的控制程序执行的能力。
以上函数可以执行系统命令。当黑客能控制这些函数中的参数时,就可以将恶意的系统命令拼接到正常命令中,从而造成命令执行攻击,这就是命令执行漏洞。
换句话说就是**代码调用系统命令的时候,过滤没做好,**从而导致攻击者可以使用命令来干非法的事情。
远程命令执行
利用系统函数实现远程命令执行
在PHP,允许命令执行的函数有:
eval()
assert()
preg_replace()
call_user_func()
…
如果页面中存在这些函数并且对于用户的输入没有做严格的过滤,那么就可能造成远程命令执行漏洞。
eval()函数
1.定义和用法
eval() 函数把字符串按照 PHP 代码来计算。
该字符串必须是合法的 PHP 代码,且必须以分号结尾。
如果没有在代码字符串中调用 return 语句,则返回 NULL。如果代码中存在解析错误,则 eval() 函数返
回 false。
2.语法
eval(phpcode)
phpcode 必需。规定要计算的 PHP 代码。
3.例子
<?php
$a = $_GET['a'];
eval($a);
?>
4.访问测试地址
http://127.0.0.1/1.php?a=phpinfo();
assert()函数
1.定义和用法
检查一个断言是否为 FALSE
2.语法
PHP 5
bool assert ( mixed assertion [, stringdescription ] )
PHP 7
bool assert ( mixed assertion [, Throwableexception ] )
assert() 会检查指定的 assertion 并在结果为 FALSE 时采取适当的行动
3.例子
<?php
$a