命令注入
1、漏洞的危害
1、继承Web 服务器程序权限(Web 用户权限)读写文件、执行系统命令
2、反弹Shell(服务器主动连接攻击方)
3、控制整个服务器
2、相关命令
1、system()函数
system() 能够将字符串作为OS 命令执行,自带输出功能,需要等待命令执行完成后才会返回结果并输出
<?php
$str=$_GET['cmd'];
system($str);
?>
提交参数 ?cmd=ipconfig
2、exec()函数
exec() 函数能将字符串作为OS命令执行,需要输出执行结果
<?php
$str=$_GET['cmd'];
print(exec($str));
?>
提交参数 ?cmd=whoami (返回结果有限)
3、shell_exec()函数
shell_exec()函数能将字符串作为OS命令执行,需要输出执行结果
<?php
$str=$_GET['cmd'];
print(shell_exec($str));
?>
提交参数 ?cmd=whoami (使用最多)
4、passthru()函数
passthru()函数 能够将字符串作为OS 命令执行,自带输出功能,
<?php
$str=$_GET['cmd'];
passthru($str);
?>
提交参数 ?cmd=whoami
4、popen()函数
popen()函数,将命令执行结果需要导出到别的文件
<?php
$str=$_GET['cmd'].">> 1.txt";
popen($str,'r');
?>
查看1.txt文件
提交参数 ?cmd=whoami
5、反引号
反引号[``] 内的字符串,也会解析成OS 命令
<?php
$str=$_GET['cmd'];
print `$str`;
?>
提交参数 ?cmd=whoami
3、防御方法
1、尽量减少命令执行函数的使用,并在disable_functions 中禁用
2、在进入命令执行的函数或方法之前,对参数进行过滤
3、参数的值尽量使用引号包裹,并在拼接前调用addslashes 进行转义