远程代码执行漏洞
代码执行漏洞也叫代码注入漏洞,指用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令,可能会允许攻击者通过改变 $PATH 或程序执行环境的其他方面来执行一个恶意构造的代码。
修复方案:禁用 eval(),system() 等可以执行命令的函数。如果一定要使用这些函数,则需要对用户的输入数据进行处理。此外,在PHP/JSP中避免动态include远程文件,或者安全地处理它。代码注入往往是由于不安全的编程习惯所导致的,危险函数应该尽量避免在开发中使用,可以在开发规范中明确指出哪些函数是禁止使用的。这些危险函数一般在开发语言的官方文档中可以找到一些建议(摘自:白帽子讲Web安全)。
例如下面的代码,我们创建了一个 index2.php 文件
<?php
eval($_REQUEST['code']); #执行code代码
?>
当我们访问 http://127.0.0.1/file/index2.php?code=phpinfo(); 时,系统就会执行 phpinfo(); 这个命令
在一些编程语言中,有一些函数是可以对操作系统进行操作的。 比如,php中以下函数可以对系统进行操作:
- system():执行一个外部的应用程序的输入并显示输出的结果
- exec():执行一个外部的应用程序,但不显示输出的结果
- passthru():执行一个系统命令并显示原始的输出
- shell_exec():执行shell命令并返回输出的结果的字符串
- `` :与shell_exec函数的功能相同
我就拿system这个函数解释一下
system:system函数可以用来执行一个外部的应用程序的输入并将相应的执行结果输出。
string system(string command , int & return_var)
- command参数是要执行的命令,
- return_var参数存放返回的值,可不写该参数
那么,假如我们访问这个链接看会发生什么情况:
http://127.0.0.1/file/index2.php?code=system("ipconfig");
可以看到,他执行了system("ipconfig"); 代码,而这个代码执行了系统的ipconfig命令,所以把当前的网络配置给列出来了
假如我们把命令换成这个呢? http://127.0.0.1/file/index2.php?code=system("net user hack 123 /add");
这里因为我们新建了一个用户,所以360发现是黑客攻击
那么,如果某些人的电脑上没有360这种安全软件呢?
那他就会执行新建用户这个命令!那样,黑客就能远程随意操控用户的电脑了!