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. SpringBoot(五) - Java8 新特性

    1.Lambda表达式 Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递).使用它可以写出更简洁.更灵活的代码.作为一种更紧凑的代码风 ...

  2. Linux系统管理_网络管理

    常用网络指令 yum -y install net-tools #安装ifconfig工具 ifconfig #查看网络配置 ifup ens33 #启用网卡 ifdown ens33 #禁用网卡 s ...

  3. 记一次 .NET 某娱乐聊天流平台 CPU 爆高分析

    一:背景 1.讲故事 前段时间有位朋友加微信,说他的程序直接 CPU=100%,每次只能手工介入重启,让我帮忙看下到底怎么回事,哈哈,这种CPU打满的事故,程序员压力会非常大, 我让朋友在 CPU 高 ...

  4. NLP之基于Seq2Seq和注意力机制的句子翻译

    Seq2Seq(Attention) @ 目录 Seq2Seq(Attention) 1.理论 1.1 机器翻译 1.1.1 模型输出结果处理 1.1.2 BLEU得分 1.2 注意力模型 1.2.1 ...

  5. Java多线程(5):CAS

    您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来- 在JDK1.5之前,Java的多线程都是靠synchronized来保证同步的,这会引起很多性能问题,例如死锁.但随着Java的不断完善,JNI ...

  6. 八、Django的组件

    8.1.中间件 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.因为改变的是全局,所以需要谨慎实用,用不好会影响 ...

  7. docker容器化业务

    1.环境准备: 设备 IP地址 作用 系统版本 mysql-master 192.168.100.213 Nginx-Web服务器 Ubuntu2004 mysql-slave 192.168.100 ...

  8. xlwings 模块总结

    基本使用 在子线程中使用时,有时需要在子线程函数中加入以下.有时不需要加入,目前还不明白具体的原因 import pythoncom # 导入的库 pythoncom.CoInitialize() # ...

  9. Django更换数据库和迁移数据方案

    前言 双十一光顾着买东西都没怎么写文章,现在笔记里还有十几篇半成品文章没写完- 今天来分享一下 Django 项目切换数据库和迁移数据的方案,网络上找到的文章方法不一,且使用中容易遇到各类报错,本文根 ...

  10. 什么是 X.509 证书以及它是如何工作的?

    X.509 证书是基于广泛接受的国际电信联盟 (ITU) X.509 标准的数字证书,该标准定义了公钥基础设施 (PKI) 证书的格式. 它们用于管理互联网通信和计算机网络中的身份和安全. 它们不显眼 ...