当前位置:  首页  >  凯发国际娱乐下载  >  PHP 安全  >  防注入

PHP漏洞全解(二)-命令注入攻击

本文主要介绍针对PHP网站常见的攻击方式中的命令攻击。CommandInjection,即命令注入攻击,是指这样一种攻击手段,黑客通过把HTML代码输入一个输入机制(例如缺乏有效验证限制的表格域)来改变网页的动态生成的内容。使用系统命令是一项危险的操作,尤其在你试图使用远程数据来构造要执行的命令时更是如此。如果使用了
命令注入攻击 PHP中可以使用下列5个函数来执行外部的应用程序或函数 system、exec、passthru、shell_exec、“(与shell_exec功能相同) 函数原型 string system(string command, int &return_var)     command 要执行的命令     return_var 存放执行命令的执行后的状态值 string exec (string command, array &output, int &return_var)     command 要执行的命令     output 获得执行命令输出的每一行字符串     return_var 存放执行命令后的状态值 void passthru (string command, int &return_var)     command 要执行的命令     return_var 存放执行命令后的状态值     string shell_exec (string command)     command 要执行的命令 漏洞实例 例1:
  1. //ex1.php 
  2. $dir = $_GET["dir"]; 
  3. if (isset($dir)) 
  4. echo " "
  5. system("ls -al ".$dir); 
  6. echo "
  7. "
  8. ?> 
我们提交http://www.sectop.com/ex1.php?dir=| cat /etc/passwd 提交以后,命令变成了 system("ls -al | cat /etc/passwd"); eval注入攻击 eval函数将输入的字符串参数当作PHP程序代码来执行 函数原型: mixed eval(string code_str) //eval注入一般发生在攻击者能控制输入的字符串的时候
  1. //ex2.php 
  2. $var = "var"
  3. if (isset($_GET["arg"])) 
  4. $arg = $_GET["arg"]; 
  5. eval("\$var = $arg;"); 
  6. echo "\$var =".$var
  7. ?> 
当我们提交http://www.sectop.com/ex2.php?arg=phpinfo();漏洞就产生了; 动态函数
  1. php 
  2. func A() 
  3. dosomething(); 
  4. func B() 
  5. dosomething(); 
  6. if (isset($_GET["func"])) 
  7. $myfunc = $_GET["func"]; 
  8. echo $myfunc(); 
  9. ?> 
程序员原意是想动态调用A和B函数,那我们提交http://www.sectop.com/ex.php?func=phpinfo漏洞产生 防范方法 1、尽量不要执行外部命令 2、使用自定义函数或函数库来替代外部命令的功能 3、使用escapeshellarg函数来处理命令参数 4、使用safe_mode_exec_dir指定可执行文件的路径 esacpeshellarg函数会将任何引起参数或命令结束的字符转义,单引号“’”,替换成“\’”,双引号“"”,替换成“\"”,分号“;”替换成“\;” 用safe_mode_exec_dir指定可执行文件的路径,可以把会使用的命令提前放入此路径内 safe_mode = On safe_mode_exec_dir = /usr/local/php/bin/
吐了个 "CAO" !
扫码关注 PHP1 官方微信号
PHP1.CN | 中国最专业的PHP中文社区 | 凯发国际娱乐 | 凯发国际娱乐下载 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | PHP问答
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved PHP1.CN 第一PHP社区 版权所有