[BSidesCF 2020]Had a bad day -- 关于00截断的衍生

0x00 前言

点图片时看到url有变动
直觉觉得像文件包含
在这里插入图片描述
协议流读一下
册 还真是
在这里插入图片描述
贴一下php源码

 <?php
				$file = $_GET['category'];

				if(isset($file))
				{
					if( strpos( $file, "woofers" ) !==  false || strpos( $file, "meowers" ) !==  false || strpos( $file, "index")){
						include ($file . '.php');
					}
					else{
						echo "Sorry, we currently only support woofers and meowers.";
					}
				}
				?>

试一下flag.php
真有
在这里插入图片描述
想方设法包含一下
本来还想通过花里胡哨的操作把马放上去
试了一下data,发现这个wrapper被禁了…谢特
远程文件包含也被禁了

小tips

strpos( $file, "meowers" ) !==  false || strpos( $file, "index")

前后两个判断其实还不太一样
看一下strpos函数

strpos() 函数查找字符串在另一字符串中第一次出现的位置。
返回字符串在另一字符串中第一次出现的位置,如果没有找到字符串则返回 FALSE。
注释:字符串位置从 0 开始,不是从 1 开始。

所以前面meowers只要求出现就行
而后面的index是要求出现在非首位的位置
否则 strpos($file,“index”)返回int(0) 判断也过不去

0x01 复现

老实看wp
原来php://filter还能自己套协议呢
poc

php://filter/convert.base64-encode/index/resource=flag

/index/是加上去凑条件过判断的
可以发现当php定位不到我们自己加的filter时会报warning
但并没有影响执行,学到了!
在这里插入图片描述
还看到有师傅有相对路径做的
好巧妙
相对路径计算时中间目录不存在并不影响

php://filter/read=convert.base64-encode/resource=woofers/../flag

在这里插入图片描述

题目就这样done了!

关于00截断的题外话

but 其实我一开始想用00截断做的
属实是学艺不精了…搜了一下才知道他对php版本要求比较低
(PS:网上很多文章都说版本低于5.3.4,我实测5.3.29都不行!踩坑好久!自己试5.2.x才可以,后面看文章推测应该是5.3.24以前)
那句话咋说…实践是检验真理的唯一标准蛤
但是呢我看到它的报错就比较疑惑
明明存在flag.php这个文件
他居然报错fail opening ‘flag.php’
在这里插入图片描述
然后找到一篇醍醐灌顶的源码级理解
师傅tql

https://blog.csdn.net/zhangzhuangtongxue/article/details/78198191

以下截取文章
在这里插入图片描述

也就是说当比较时发现长度不一样(存在截断字符串)时会直接输出报错信息
也可以推测出5.3.24之前的php版本都适用00截断了嗝~

0x02 Rethink

刷点前面的题找找自信
快被打自闭了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值