前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >米斯特白帽培训讲义 漏洞篇 文件包含

米斯特白帽培训讲义 漏洞篇 文件包含

作者头像
ApacheCN_飞龙
发布2019-02-15 10:36:19
3550
发布2019-02-15 10:36:19
举报
文章被收录于专栏:信数据得永生信数据得永生

米斯特白帽培训讲义 漏洞篇 文件包含

讲师:gh0stkey 整理:飞龙 协议:CC BY-NC-SA 4.0

原理

文件包含就是将一个文件包含到自己的文件中执行。它可分为本地包含和远程包含,本地包含即包含本地磁盘上的文件,文件名称是相对路径或绝对路径,远程包含即包含互联网上的文件,文件名称是 URL。

示例代码

比如我们有一个test.txt文件,仅仅调用phpinfo来测试:

代码语言:javascript
复制
<?php phpinfo();?>

然后我们在相同目录下放置一个fileinclude.php,如下:

代码语言:javascript
复制
<?php
$file=@$_GET['file'];
$b=@$_GET['b'];
if($file!==null){
    echo "<center>File:".$file."<br/>Result:</center>";
    include $file;
}else if($b!==null){
    echo "<center>File:".$b."<br/>Result:</center>";
    require($b);
    require($b.".php");
}

第一行代码获取 URL 参数file的内容。第二行代码获得 URL 参数b的内容。3 ~ 5 行首先判断$file是否为空,若不为空,输出其内容,并将其作为文件名称包含。6 ~ 9 行,若$file为空,则判断$b是否为空,不为空的话,输出其内容,并将其作为文件名称包含。

我们在相同目录下执行php -S 0.0.0.0:80,之后访问http://localhost/fileinclude.php?file=test.txt,会看到phpinfo的输出。

为了演示远程包含,我们需要将 PHP 配置文件中的allow_url_include设置为on,之后重启 PHP。远程包含的话,我们需要将file参数改为http://localhost/text.txt,可以看到相同结果。

如何挖掘

首先对 URL 进行分析,看看是否和文件相关,比如www.test.com/xxx.php?file=yyy。带有文件相关的敏感名称都可以进行挖掘。

利用

当我们发现了本地或远程包含漏洞时,首先寻找上传点,比如用户头像上传功能。然后我们可以构造一个纯文本文件,内容为<?php phpinfo();?>,并将其命名为xxx.jpg

之后我们就可以把xxx.jpg上传上去,并通过应用得到它的位置,假设是/upload/xxx.jpg,然后我们就可以把file参数的值改为它。以前面的代码为例,URL 是http://localhost/fileinclude.php?file=/upload/xxx.jpg

要注意这个漏洞是无!视!扩!展!名!的!跟文件上传漏洞不一样,文件上传漏洞中如果我们上传的文件不是.php就执行不了(当然也有一些绕过手段),但是文件包含漏洞中的用户名是任意的,前面我们上传了.txt,证实有效,那么这个.jpg也是有效的。

如果我们把xxx.jpg的内容改为菜刀的一句话,那就可以用菜刀连接。

再说一下远程包含,远程包含的条件比较苛刻,目标网站需要把allow_url_open给打开。所以有本地包含不一定有远程包含,有远程包含一定就有本地包含。但是,远程包含的利用相对简单,只要将代码上传到自己博客,或者任何能通过 URL 访问到的地方就可以了。后续步骤是一样的。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年12月20日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 米斯特白帽培训讲义 漏洞篇 文件包含
    • 原理
      • 示例代码
        • 如何挖掘
          • 利用
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档