探索web世界——任务五

探索web世界——任务五

任务内容:
1.学习file inclusion(文件包含),了解各种伪协议姿势;
2.完成dvwa第三个模块file inclusion;
3.继续学习php.

一,file inclusion(文件包含)和各种伪协议姿势

(一)文件包含

找了找资料,理解到它的大概意思如下:

文件包含漏洞:即File Inclusion,意思是文件包含(漏洞),是指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),require()和include_once(),require_once())利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。文件包含漏洞分为本地文件包含漏洞与远程文件包含漏洞,远程文件包含漏洞是因为开启了php配置中的allow_url_fopen选项(选项开启之后,服务器允许包含一个远程的文件)。服务器通过php的特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不严,从而可以去包含一个恶意文件,而我们可以构造这个恶意文件来达到自己的目的。

文件包含分为两种类型:

(1)本地文件包含
当被包含的文件在服务器本地时,就形成本地文件包含;
(2)远程文件包含
当被包含的文件在第三方服务器时,就是远程文件包含。

PHP的文件包含函数有四种:

require():require()与include()的区别在于require()执行如果发生错误,函数会输出错误信息,并终止脚本的运行 。使用require()函数包含文件时,只要程序一执行,立即调用文件,而include()只有程序执行到函数时才调用 .require()在php程序执行前执行,会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部分。

require_once():它的功能与require()相同,区别在于当重复调用同一文件时,程序只调用一次。

include():当使用该函数包含文件时,只有代码执行到include()函数时才将文件包含进来,发生错误时只给出一个警告,程序继续向下执行。

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

关于文件包含的实际操作,在第二部分的DVWA中的file inclusion 部分再继续学习。

(二)伪协议

是指PHP支持的协议和封装协议,有以下类型:

  • file://—访问本地文件系统
  • http://—访问HTTP(s)网址
  • ftp:// — 访问 FTP(s) URLs
  • php:// — 访问各个输入/输出流(I/O streams)
  • zlib:// — 压缩流
  • data:// — 数据(RFC 2397)
  • glob:// — 查找匹配的文件路径模式
  • phar:// — PHP 归档
  • ssh2:// — Secure Shell 2
  • rar:// — RAR
  • ogg:// — 音频流
  • expect:// — 处理交互式的流
    参考PHP网站上的讲解内容,非常详细:链接

二、DVWA 的file inclusion模块

1、首先让服务器开启allow_url_include选项:

  • 在PHP中打开配置文件php.ini,直接用记事本打开(点击一下它自己就以记事本方式打开了)
  • 找到allow_url_fopen这一行,将allow_url_fopen = Off改为allow_url_fopen = On;在这里插入图片描述
  • 最后重启一下Apache,就可以啦。(本来的dvwa的页面会提醒你还没有改,改完刷新一下就没有那个提示了)变成这样:在这里插入图片描述

2、下面首先对四种安全等级下的代码进行简单的对比分析:在这里插入图片描述

low等级

可以看到,服务器端对page参数没有进行任何的过滤和检查。服务器期望的是用户点击下面给出的三个链接,服务器会包含相应的文件,并将结果返回。在这里插入图片描述
点击file1.php后,出现如下界面:
在这里插入图片描述
点击file2.php后,出现如下界面:在这里插入图片描述
点击file3.php后,出现如下界面:在这里插入图片描述

  • 漏洞利用:
    首先是本地文件的获取,获取php.ini文件,文件在DVWA-master中,所以用…/…/往前挑两级目录,所以就表示为page=…/…/php.ini
    成功获取到文件,显示如下:
    在这里插入图片描述
    再看远程文件执行:phpinfo.php这个文件可以显示PHP的配置信息,我们把之前的url参数中的php.ini换成phpinfo.php执行,显示如下:
    在这里插入图片描述
    这说明文件包含不但能读文件,还能执行文件。
    远程文件执行还可以执行本地构造的文件:
    在本地网站创建一个phpinfo.txt文件写入php代码如图:在这里插入图片描述
    然后执行我们的文件包含,就是在page后面加上刚才文件的url,执行后如图所示:
    在这里插入图片描述
    执行成功说明不管是不是php文件,只要包含PHP代码就可以执行。
Medium等级

在此等级下按照low等级的方法执行url是失败的,根据前面的关于代码的分析可知,这时的服务器过滤了…/这个字符,也就它他不起作用了。但是…\也能进行翻转,验证一下:
在读取本地文件时,发现可以运行成功:
在这里插入图片描述
更改一下文件名,也可以成功:在这里插入图片描述
它也对http://进行了过滤,我们可以改用输入httphttp://来避过排查。
在执行远程文件,当这样输入时,也可以实现目标:在这里插入图片描述

High等级

将前面同样的方法用到这个等级下面,发现都不行(其实可以想到肯定不行了,它的安全防御措施越来越来严密全面了)。经过分析High等级下的代码,可以大概得知,他应该只能支持读取file*开头的参数,根据前面学的file协议的相关内容,可知它的用法有以下几种:在这里插入图片描述
在这里我用的圈红的形式,执行成功如下:在这里插入图片描述
由于file协议只支持读取本地文件,不支持远程文件执行,不能进行远程文件的漏洞利用(可以利用文件上传漏洞配合执行文件包含)。

Impossible等级

在此等级下,之前的方式都不能成功了,从此等级的代码可以看到,它只允许四个文件名,所以它能能够有效地防止文件包含漏洞。

三、继续学习PHP

在菜鸟教程上按照分好的模块来一步步进行学习,进行中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值