DVWA靶场实战(四)

四、File Inclusion:

1.漏洞原理:

  随着网站的业务的需求,程序开发人员一般希望代码更加灵活,所以将被包含的文件设置为变量,用来进行动态调用,但是正是这种灵活性通过动态变量的方式引入需要包含的文件时,用户对这个变量可控而且服务端又没有做合理的校检或者校检被绕过就造成了文件包含漏洞。

2. 常见函数:

(1) include()当前使用该函数包含文件时,只有代码执行到include()将文件包含起来,发生错误时给出一个警告,然后将继续执行语句。

(2) include_once()功能和include()相同,区别当重复调用一个文件时,程序只调用一次。

(3) require()执行如果发生错误,函数会发出错误信息,并终止脚本运行。

(4) require_once和require()相同区别在于当重复调用一个文件时,程序只调用一次。

(5) nighcight_file(),show_source()函数对文件进行语法高亮显示,通常可以看见源代码。

(6) readfile(),file_get_contents()函数读取一个文件,并写入缓冲。

(7) fopen(),打开一个文件或url

注:几乎所有的脚本语言中都提供文件包含的功能,但是文件包含漏洞在PHP中居多,而在jsp/ASP/ASP.NETC程序中非常少,甚至没有文件包含漏洞的存在。

3. 漏洞分类:

(1)本地文件包含漏洞:

当被包含的文件就在服务器本地时,就形成了本地文件包含漏洞。一般会有以下的代码环境:

<?php

$file=$_GET[“file”];

Include($flir);

?>

(2)远程文件包含漏洞:

本地文件包含和远程文件包含造成漏洞的原因是一样的,当php.ini中的配置选项allow_url_fope和alliw_url_include为ON的话,则包含的文件可以是第三方服务器中的文件,就形成了远程文件包含漏洞。

4. 防御手段:

(1)文件名验证防护:包含文件验证是指对可保护文件名设置黑名单或白名单、文件后缀名固定等。如果需要使用文件包含,则通过使用白名单的方法对要包含的文件进行限制,这样可以做到既使用了文件包含,又可以防止问价包含漏洞。

(2)文件名验证绕过防护:这种防护手段主要有两种方式,第一种方式就是在文件后缀名处下手,另一个方式是通过目录长度限制来截断。严格限制包含中的参数,取消那些不可控的参数。

(3)中间件安全配置防护:合理地配置中间件的安全选项也会有良好的防护效果,这主要是通过调整中间件及PHP的安全配置,使得用户在调整文件时进行基本的过滤及限制。

(4)禁用相应函数防护:如果不需要文件包含,则关闭相应的文件包含的函数,这防止远程文件包含,这是最安全的办法。

(5)关闭威胁配置防护:可以将PHP中的一些危险配置直接关闭,由于远程文件的不可信任性及不确定性,在开发中直接禁用远程文件文件包含选项。

5. 漏洞危害:

(1)web服务器的文件被外界浏览导致信息泄露。

(2)脚本被任意执行,典型影响如下:

① 篡改网站;

② 执行非法操作;

③ 攻击其他网站;

6. 注意事项:

  在攻击靶场过程中可能会遇到File Inclusion这样的报错。“The PHP function allow_url_include is not enabled.”

  遇到以上情况,我们找到我们安装phpstudy_pro目录的“Extensions”文件夹,找到“php”文件夹,然后找到名称为“php.ini”的文件,找到“allow_url_include=Off”选项,然后将其改为“allow_url_include=On”保存,然后重新启动小皮面板就ok了。

7. 实战:

(1) Low

  代码分析:

  这里我们可以看出该文件没有进行任何的过滤,这导致我们可以包含任何的文件。当上传问及那不存在时,可以看到,发生了报错,并且把网站的路径都给暴露出来了。所以第一行的意思就是,找不到我们指定名称文件,所以WARNING。而第二行的警告是因为前面没有找到指定文件,所以包含的时候就出警告了。但同时暴露了服务器文件的绝对路径“D:\phpstudy_pro\WWW\DVWA\vulnerabilities\fi\index.php” 

  所以我们就可以开始构造url,此时我们产生本地包含使用“192.168.1.22:81/dvwa/vulnerabilities/fi/?page=../../phpinfo.php”就可以访问phpinfo.php界面。也可以尝试本地包含百度,可以发现也是成功的。

(2)Medium:

  代码分析:

  这里“$file=str_replace(array(“http://”,”https://”),””,$file);”的意思就是将“http://”、“https://”、“../”、“..\”全部替换为了空(就是删了),所以这里我们采用双写过滤的方式绕过。

  我们这里采用“....//....//phpinfo.php”的payload进行攻击,在替换后就相当于“../../phpinfo.php”说明此方法可行,所以如果我们要利用文件包含漏洞访问“hhtp://www.baidu.com”就只用写为“hthttp://tp://www.baidu.com”就可以绕过。

(3)High:

  代码分析:

  这里我们看出来他使用了fnmatch函数,该函数的功能是指定的模式来匹配文件名或字符串。

  我们可以看见这里运用了fnmatch函数检查page参数,要求参数开头必须是file,服务器才回去包含相应文件。所以这里只能用伪协议包含,伪协议也就是“file://”来访问本地文件系统,关于“伪协议包含”补充以下:

伪协议

作用

file://

访问本地文件系统

http://

访问HTTP网址

https://

访问HTTPS网址

ftp://

访问FTP URL

php://

访问输入输出流

zlib://

压缩流

data://

数据

ssh2://

security shell2

expect://

处理交互式的流

glob://

查找匹配的文件路径

  注:伪协议后文件必须是绝对路径。

  了解完这些后我们开始进行攻击,这里我们将url进行构造选择将之前在low中我们获取的绝对路径加上“file:///”变成“file:///[绝对路径]”的格式,“http://192.168.1.22:81/dvwa/vulnerabilities/fi/?page=file:///D:\phpstudy_pro\WWW\DVWA\phpinfo.php”然后构造以上payload进行攻击,得到phpinfo。

(4)Impossible:

  代码分析:

  这里使用白名单进行保护,所以已经没有了文件包含漏洞。

DVWA靶场实战(四)——File Inclusion的更多相关文章

  1. DVWA靶场实战(五)——File Upload

    DVWA靶场实战(五) 五.File Upload: 1.漏洞原理: File Upload中文名叫做文件上传,文件上传漏洞是指用户上传了一个可执行脚本文件(php.jsp.xml.cer等文件),而 ...

  2. DVWA靶场实战(三)——CSRF

    DVWA靶场实战(三) 三.CSRF: 1.漏洞原理: CSRF(Cross-site request forgery),中文名叫做"跨站请求伪造",也被称作"one c ...

  3. DVWA靶场实战(六)——Insecure CAPTCHA

    DVWA靶场实战(六) 六.Insecure CAPTCHA: 1.漏洞原理: Insecure CAPTCHA(不安全的验证码),CAPTCHA全程为Completely Automated Pub ...

  4. DVWA靶场实战(七)——SQL Injection

    DVWA靶场实战(七) 七.SQL Injection: 1.漏洞原理: SQL Inject中文叫做SQL注入,是发生在web端的安全漏洞,主要是实现非法操作,例如欺骗服务器执行非法查询,他的危害在 ...

  5. DVWA靶场实战(二)——Command Injection

    DVWA靶场实战(二) 二.Command Injection: 1.漏洞介绍: Command Injection,中文叫做命令注入,是指通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令 ...

  6. DVWA靶场实战(一)——Brute Force

    DVWA靶场实战(一) 一.Brute Force: 1.漏洞原理: Brute Force是暴力破解的意思,大致原理就是利用穷举法,穷举出所有可能的密码. 2.攻击方法: Burpsuite中的In ...

  7. DVWA靶场实战(九)——Weak Session IDS

    DVWA靶场实战(九) 九.Weak Session IDS: 1.漏洞原理: Weak Session IDS也叫做弱会话,当用户登录后,在服务器就会创造一个会话(session),叫做会话控制,接 ...

  8. DVWA靶场实战(十)——XSS(DOM)

    DVWA靶场实战(十) 五.XSS(DOM): 1.漏洞原理: XSS全称为Cross Site Scripting,由于和层叠样式表(Cascading Style Sheets,CSS)重名,所以 ...

  9. DVWA靶场实战(十一)——XSS(Reflected)

    DVWA靶场实战(十一) 十一.XSS(Reflected): 1.漏洞原理: XSS被称为跨站脚本攻击(Cross Site Script),而Reflected被称作反射型XSS.不同于DOM和S ...

随机推荐

  1. UDP协议的网络编程

    public class UDPTest { //发送端@Testpublic void sender() throws IOException { DatagramSocket socket = n ...

  2. 齐博X1-栏目的调用1

    本节来说明下系统提供的几个栏目调用的方法 一节我们制作了一个公共导航,本节我们在首页index中演示下栏目的相关调用 至于其他的数据内容,参考第二季的标签调用即可,直接{qb:tag}调用就可以调用出 ...

  3. Python基础之模块:7、项目开发流程和项目需求分析及软件开发目录

    一.项目开发流程 1.项目需求分析 明确项目具体功能: 明确到底要写什么东西,实现什么功能,在这个阶段的具体要询问项目经理和客户的需求 参与人员: 产品经理.架构师.开发经理 技术人员主要职责: 引导 ...

  4. Codeforces Global Round 23 D.Paths on the Tree(记忆化搜索)

    https://codeforces.ml/contest/1746/problem/D 题目大意:一棵n节点有根树,根节点为1,分别有两个数组 s[i] 顶点 i 的魅力值 c[i] 覆盖顶点 i ...

  5. Electron是什么以及可以做什么

    新用户购买<Electron + Vue 3 桌面应用开发>,加小册专属微信群,参与群抽奖,送<深入浅出Electron>.<Electron实战>作者签名版. 1 ...

  6. IO学习笔记

    IO File 概述 构造方法 代码实现: public class FileDemo001 { public static void main(String[] args) { File f1 = ...

  7. AtCoder Beginner Contest 277 题解

    掉大分力(悲 A - ^{-1} 直接模拟. #include<bits/stdc++.h> #define IOS ios::sync_with_stdio(false) #define ...

  8. Pthread 并发编程(二)——自底向上深入理解线程

    Pthread 并发编程(二)--自底向上深入理解线程 前言 在本篇文章当中主要给大家介绍线程最基本的组成元素,以及在 pthread 当中给我们提供的一些线程的基本机制,因为很多语言的线程机制就是建 ...

  9. Installing ClickHouse-22.10.2.11 on openEuler

    一.Installing ClickHouse-22.10.2.11 on openEuler 1 地址 https://clickhouse.com https://packages.clickho ...

  10. mindxdl--common--validators.go

    // Copyright (c) 2021. Huawei Technologies Co., Ltd. All rights reserved.// Package common this file ...