目录
Insecure CAPTCHA(不安全的验证码/不安全的验证流程)
File Inclusion(文件包含)
File Inclusion,即文件包含,是指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),require()和include_once(),require_once())利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。
文件包含漏洞分为本地文件包含漏洞与远程文件包含漏洞,远程文件包含漏洞是因为开启了php配置中的allow_url_fopen选项(选项开启之后,服务器允许包含一个远程的文件)。
包含,往往用在复用的地方,比如写了一个连接数据库的方法,直接ctrl+c,ctrl+v就可以用,不用自己再写,是使用include关键字来引用你的方法
DVWA是通过文件包含,来调用file1.php/file2.php/file3.php
文件包含:
开发人员将相同的函数写入单独的文件中,需要使用某个函数时直接调用此文件,无需再次编写,这种文件调用的过程称文件包含。
文件包含漏洞:
开发人员为了使代码更灵活,会将被包含的文件设置为变量,用来进行动态调用,从而导致客户端可以恶意调用一个恶意文件,造成文件包含漏洞。
二、文件包含漏洞用到的函数
require:找不到被包含的文件,报错,并且停止运行脚本。
include:找不到被包含的文件,只会报错,但会继续运行脚本。
require_once:与require类似,区别在于当重复调用同一文件时,程序只调用一次。
include_once:与include类似,区别在于当重复调用同一文件时,程序只调用一次。
相关的 php.ini 配置参数:
allow_url_fopen = on (默认开启)
allow_url_include = on (默认关闭)
(low)
查看源码
<?php
// The page we wish to display
//直接获取page参数,未做任何过滤
$file = $_GET[ 'page' ];
?>
我们先点击一下,发现page的参数值,就是点击的文件名
点击下面的三个链接,服务器会包含相应的文件,并将结果返回。
服务器包含文件时,不管文件后缀是否是php,都会尝试当做php文件执行,如果文件内容确为php,则会正常执行并返回结果,如果不是,则会原封不动地打印文件内容,所以文件包含漏洞常常会导致任意文件读取与任意命令执行。
尝试查看phpinfo.php文件
File Upload(文件上传)
在文件上传的功能处,若服务端脚本语言未对上传的文件进行严格验证和过滤,导致恶意用户上传恶意的脚本文件时,就有可能获取执行服务端命令的能力,这就是文件上传漏洞。
文件上传漏洞对Web应用来说是一种非常严重的漏洞。一般情况下,Web应用都会允许用户上传一些文件,如头像、附件等信息,如果Web应用没有对用户上传的文件进行有效的检查过滤,那么恶意用户就会上传一句话木马等Webshell,从而达到控制Web网站的目的。
文件上传漏洞成因
1.未过滤或Web前端过滤被绕过
2.文件检测被绕过
3.中间件解析
4.不完善的黑名单扩展名
5.文件路径截断
6.HTTP不安全方法(PUT协议)