南邮平台 文件包含漏洞题

第一次做文件包含类题目,总结一下
在这里插入图片描述这是一个很明显的文件包含的特征,直接从Get处获取文件名来显示。打开DVWA,可以看到这块的原始代码大致如下
low等级:

<?php

// The page we wish to display
$file = $_GET[ 'page' ];

?>

<?php

// The page we wish to display
$file = $_GET[ 'page' ];

// Input validation
$file = str_replace( array( "http://", "https://" ), "", $file );
$file = str_replace( array( "../", "..\"" ), "", $file );

?>
<?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;
}

?>

<?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;
}

?>

可以看到,这里的应对策略是对输入值进行过滤

但是在做题的时候,需要结合php的伪协议来操作

(1)最常用的应该是php://filter 协议
最原始的是php://filter/resource=d.txt(这里发现如果不是php类型的文件也能读取,只是不是网页形式)
在这里插入图片描述如果当前文件不是php源码,就不能被以页面形式运行,这时候我们先利用伪协议将源码base64编码,再传入include函数,这样就不会被认为是php文件,不会执行,而是直接输出文件的base64编码,我们只需要再解码就可以得到网页源码。
在这里插入图片描述=php://filter/read=convert.base64-encode/resource=include.php

确实是一个获取php源码的好方法。

(2)php://input 可以利用这个协议让后台代码包含我们想让其显示的php代码,例如
在这里插入图片描述
(3)file:// 与php://filter类似,访问本地文件,但是只能传入绝对路径
在这里插入图片描述如图,甚至访问到了服务器根目录外的文件(当然,我这里未加任何限制)

更多伪协议可以访问链接https://blog.csdn.net/qq_41289254/article/details/81388343

**

二.面对一些防范机制的绕过姿势

**
在测试了包含点存在包含漏洞以后,并不是都可以使用filter伪协议包含出源码的,因为allow_url_fopen和allow_url_include会影响到fopen和include等函数对于伪协议的支持。

allow_url_include影响php://input的使用,若不打开则无法使用。

当allow_url_fopen打开时,可以包含任意url。

例如只打开allow_url_include时,只能包含远程文件和使用php://input

举个例子

等我做了来更新

下面是其他的一些应对防御机制的方法,暂时还没用到,先留存

  1. List item

绕过 waf 的方法

字典绕过

在一些CTF中会对一些伪协议的关键词进行过滤,如read、resource等等,下面总结了几条绕过方法,在实战中作为字典来跑。

?f=php://filter/convert.base64-encode/resource=login.php(过滤了操作名read)
?f=php://filter/read=convert.base64-encode/resource=1.jpg/resource=./show.php(正则 /resource=*.jpg/i)
?f=data:text/plain,<?php phpinfo()?>
?file=data:text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=

这里说一下第二条,这是2018 ISCC中的一道题目的绕过方法。

这里用正则匹配了resource=,我们就可以用重写的方法来绕过正则。

  1. List item
    截断包含 https://blog.csdn.net/zvall/article/details/8951925

  2. zip协议和phar协议(以后用到后再细查,现在只需知道这个可以用于绕过对php的限制)

在实战过程中,若发现存在文件上传但是没有办法直接上传php文件,可以传zip压缩文件,我们就利用这两个协议,将php文件打包成zip文件来包含里面的php脚本。

phar://、zip://,都可以看到在phpinfo中有相应的描述。

例如脚本文件为1.php,打包成1.zip,然后再改名为1.jpg,上传之后包含1.jpg中的php文件即可。

经测试其他类型(例如txt)内有php代码,也能被解释为php语言显示

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值