文件包含漏洞—Hack之路

文件包含安全

PHP文件包含漏洞的产生原因是在通过PHP的函数引人文件时,由于研发人员的疏忽,传人的文件名没有经过合理的校验,从而被攻击者操作了预想之外的文件,导致文件泄露。甚至恶意的代码注人导致攻击者可构造参数,包含并执行一个本地或远程的恶意脚本文件,从而获得webshell.攻击者可通过webshell控制整个网站,甚至是服务器操作系统

文件包含漏洞

按照文件被包含的形式不同,将文件包含漏洞分成简单文件包含漏洞、受限制的文件包含漏洞、ZIP文件包含漏洞、远程文件包含漏洞等几类

简单文件包含漏洞
下面的代码是一个简单文件包含漏洞的示例。程序的正常逻辑是,当浏览器不传入fle参数时,默认显示首页的页面;当file 参数为list.php时,显示列表页面:当file参数为content.php时,显示内容页面

<?php
$file=$_ GET[ ‘file’] ;
if (empty($file)) {
$file=” index .php”;
}
include (“include/” .$file) ;
?>

代码在处理请求参数时,没对参数进行任何校验和处理,直接将客户端传过来的文件名称引人代码逻辑中。由于没有对输入进行限制和过滤,造成了文件包含漏洞,攻击者可以在file参数中构造各种路径,例如以下形式。

包含日志:file=…/…/…/…/…/var/log/niginx/access.log
包含系统文件:file=…/…/…/…/…/etc/passwd
读取session文件:file=…/…/…/…/…/tmp/sess_iuy76ds9nds75d0sduip

受限制的文件包含漏洞

有些研发人员封意限制被包含文件的类型,如为了防止简单文件包含浦含漏洞的发生,如下面的代码在原来来代码的基础上添加php文件类型限制。

<?php
$file=$_ GET[‘file’];
if (empty($file)){
$file=”index”;
}
include (“include/” .$file.” .php”);
?>

在路径里指定了后缀,只能包含.php文件,限制了文件类型。但是即使这样也很容易被攻击者绕过,只要添加%00文件截断就可以让程序包含自己希望的文件。

/root/ .ssh/authorized_keys%00
/root/ .ssh/id_ rsa%00
/root/ .ssh/id_rsa.pub%00

ZIP文件包含漏洞

在PHP中可以直接读取2IP压缩包里的文件流,所以在使用ZIP压缩的时候一定要注意以下命令

<?php
$file = $_ GET[‘file’];
include $file.’ .php’;

将phpinfo.php添加到ZIP文件中的命令如下

<?php
phpinfo.php() ;

通过请求http://localhost/shell.php?file=zip://phpinfozip%23phpinfo使ZIP文件中的PHP代码顺利执行,执行结果如下

文件包含漏洞---Hack之路

网站地址:https://www.hackzl.cn;发布者:hack之路,转转请注明出处:https://www.hackzl.cn/index.php/2020/09/27/%e6%96%87%e4%bb%b6%e5%8c%85%e5%90%ab%e6%bc%8f%e6%b4%9e-hack%e4%b9%8b%e8%b7%af/

发表评论

邮箱地址不会被公开。 必填项已用*标注