PHP代码审计之命令注入攻击
PHP漏洞-命令注入攻击
命令注入攻击
PHP中可以使用下列5个函数来执行外部的应用程序或函数
system、exec、passthru、shell_exec、``(与shell_exec功能相同)
函数原型
1 string system(string command,int&return_var)
2 command 要执行的命令
3 return_var 存放执行命令的执行后的状态值
1 string exec(string command,array&output,int&return_var)
2 command 要执行的命令
3 output 获得执行命令输出的每一行字符串
4 return_var 存放执行命令后的状态值
1 void passthru(string command,int&return_var)
2 command 要执行的命令
3 return_var 存放执行命令后的状态值
1 string shell_exec(string command)
2 command 要执行的命令
举个栗子:
system 命令执行
1 <?php
2 $cm=$_GET["cm"];
3 if(isset($cm)){
4 echo"<pre>";
5 system("ls-al".$cm);
6 echo"</pre>";
7 }
8?>
通过输入http://www.xxx.com/index.php?cm=|cat /etc/passwd 进行命令执行
提交以后,命令变成了system("ls-al|cat/etc/passwd");
再举个梨子:
1 <?php
2 $var="var";
3 if(isset($_GET["arg"])){
4 $arg=$_GET["arg"];
5 eval("\$var=$arg;");
6 echo"\$var=".$var;
7 }
8 ?>
当我们提交http://www.xxx.com/index.php?arg=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/
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
本文作者:mt0u的Blog
本文链接:https://www.cnblogs.com/mt0u/p/15986113.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步