命令注入
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 进行转义