第五次任务
**1.学习file inclusion(文件包含)
了解各种伪协议知识**
本件包含是包括两个方面:
①本地本件包含
②远程文件包含
文件包含漏洞,是指当服务器开启allow_url_include选项时,就可以通过php的某些特性include(),require(),include_once(),require_once()利用url去动态包含文件
如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。
然后有四个关于文件包含的比较重要的函数,要学习一下
include():只有代码执行到该函数时才会包含文件进来,发生错误时只给出一个警告并继续向下执行。
include_once():和 include()功能相同,区别在于当重复调用同一文件时,程序只调用一次。
require():只要程序执行就包含文件进来,发生错误时会输出错误结果并终止运行。
require_once():和 require()功能相同,区别在于当重复调用同一文件时,程序只调用一次。
其实我感觉include函数和require函数作用比较相同
就是区别就是我认为就是require是无条件包含,也就是如果一个流程里加入require,无论条件成立与否都会先执行require。 而且如果报错,require函数
会立马终止,而include不会,还会继续执行
然后服务器包含文件时,不管文件后缀是否是php,都会尝试当做php文件执行,如果文件内容确为php,则会正常执行并返回结果,如果不是,则会原封不动地打印文件内容。
所以文件包含漏洞常常会导致任意文件读取与任意命令执行。
关于伪协议的相关东西我是挑着几个我认为比较重要的来学习的
① file:// — 访问本地文件系统
file://协议在双off的情况下也是可以正常使用的。
allow_url_fopen :off/on
allow_url_include:off/on
file://是用来访问本地文件系统
使用方法是:file://文件的绝对路径和文件名。
就比如http://127.0.0.1/cmd.php?file=file://D:/phpStudy/WWW/php.txt这个样子就可以了
② data协议
主要用于数据流的读取。如果传入的数据是PHP代码,就会执行代码
使用方法:data://text/plain;base64,xxxx
③ php://协议
它不需要开启allow_url_fopen
php协议中还分了几种
php://filter 用于读取源码且在双off的情况下也可以正常使用
就比如Eg: http://127.0.0.1/cmd.php?file=php://filter/read=convert.base64-encode/resource=index.php
php://input需要post请求提交数据
**2完成DVWA中的file inclusion模块
还是老规矩,先启动phpstudy,进入dvwa主页
先将安全等级设为low级别,然后看看它的代码可以看见在low级别下是没有任何防护措施的
可以看见有三个可以点击的,随便点开一个,发现有一个index.php的后缀
有大佬说是在后面改成etc/passwd,而我进入发现以下情况:我去上网查,发现etc/passwd是在linus系统中的文件
而我是windows,所以这样的输入方式是不能成功的
又有大佬说可以通过绝对路径和相对路径的两种方式来进入,找到文件
于是我就去百度绝对路径和相对路径是什么意思
首先绝对路径是:是从盘符开始的路径,形如C:\windows\system32\cmd.exe
相对路劲是:是从当前路径开始的路径,如当前路径为C:\windows
现在就输入system32\cmd.exe 就可以了
明白了这两个是什么意思,于是我先用绝对路径尝试一下,因为刚刚虽然没有成功,但是暴露了它的位置
①直接在后面输入它的位置,显示成功②…/表示当前目录上一级目录的文件或文件夹
所以输入…/…/…/…/…/…/…/…/然后加上它的位置就可以了
然后是medium级别:
还是先看看它的代码str_replace这个函数是我在学习php语法中已经学习过的内容了,比较熟悉,在这个代码中是将…/和…"都转换为空格,还有第一行中的http://和https://也是如此
1.所以可以发现它是没有影响绝对路径的,所以用绝对路径的方法是完全可以进入的2.因为…/和…"被取代了,但是…\是没有被取代的,所以我又尝试输入…\Phpstudy\PHPTutorial\WWW\DVWA-1.9\php.ini,于是成功了
3.我看见网上有大佬说可以通过双写的方式来绕过
比如这样构造url:?page=…/./…/./…/./…/./…/./…/./…/./…/./…/./phpStudy\PHPTutorial\WWW\DVWA-1.9\php.ini
因为这样输入,经过函数之后就变成了:?page=…/…/…/…/…/…/…/…/…/phpStudy\PHPTutorial\WWW\DVWA-1.9\php.ini
然后是HIGH级别
看看它的代码是这样的就是要求必须以file的开头
网上说可以通过php://file协议绕过
于是想起就在第一个任务中学习的伪协议就有一个是关于file协议的
于是尝试性的构造了一个url:?page=file://D:\phpStudy\PHPTutorial\WWW\DVWA-1.9\php.ini
就成功了
最后是impossible级别
它的代码是这样的网上说这是最安全的白名单限制,无法攻破
于是上网搜索了一下关于白名单和黑名单的内容
简单来说,白名单是设置能通过的用户,白名单以外的用户都不能通过
黑名单是设置了不能通过的用户,而黑名单以外的用户不能通过
**3.继续学习php
这一周我在中国大学慕课上报了一个关于web中的php语法讲解的课
感觉这种有老师讲解的课还是比自己通过各种枯燥的语法来学习要吸收的快一些,而且课后还会有一些作业,更可以加深印象
就是跟着这个慕课上的老师再重头学习了一下Php语法,发现以前自己学习的内容还有很多不是很具体,也相当于查漏补缺了