0x00
第三个是文件包含漏洞
分为远程文件包含和本地文件包含两种
但是远程文件包含是需要开启allow_url_include()这个函数才行
0x01
low
在low下的全部源码
<?php // The page we wish to display $file = $_GET[ ‘page‘ ]; ?>
想怎么包含怎么包含
如果包含的参数错了 则会报错 那么服务器的路径就给爆出来了(开了错误显示)
远程包含--
本地包含--
就没写别的文件 直接利用dvwa带的文件
如果不知道绝对路径 仅有相对路径也可以这样包含
0x02
medium
在medium下的全部源码
<?php // The page we wish to display $file = $_GET[ ‘page‘ ]; // Input validation $file = str_replace( array( "http://", "https://" ), "", $file ); $file = str_replace( array( "../", "..\"" ), "", $file ); ?>
可见medium下 增加了一个replace函数 将"http://", "https://","../", "..\"" 都进行了一次过滤
这种replace一次过滤还是很简单的 双写绕过就好了
远程包含--
本地包含--
有绝对路径的
没有绝对路径的
0x03
high
在high下的全部源码
<?php // The page we wish to display $file = $_GET[ ‘page‘ ]; // Input validation if( !fnmatch( "file*", $file ) && $file != "include.php" ) { // This isn‘t the page we want! echo "ERROR: File not found!"; exit; } ?>
加了一个fnmatch()函数
一个匹配的函数
意思就是在参数不为include.php的时候 参数必须以file开头
因为题目给了三个本地文件嘛 file1.php file2.php file3.php
file-本地传输协议 主要用于访问本地计算机中的文件
file:///path 这个可以直接访问文件(file://也行)
所以把这个用上就能正好绕过这个防护
至于远程文件上传我没有找到什么好姿势
以后再看看其他的协议
0x03
impossible
在impossible下的全部源码
<?php // The page we wish to display $file = $_GET[ ‘page‘ ]; // Only allow include.php or file{1..3}.php if( $file != "include.php" && $file != "file1.php" && $file != "file2.php" && $file != "file3.php" ) { // This isn‘t the page we want! echo "ERROR: File not found!"; exit; } ?>
可见impossible下直接对传入的参数进行了一个名单匹配
关于 ‘!= ‘的绕过只想到md5加密后的0e可以绕过
没想到其他的绕过方法
而且就算绕过了也没法访问我们想要的路径
所以没办法了(姿势不够)
时间: 2024-10-12 22:59:25