BUUCTF: [BSidesCF 2020]Had a bad day
参考链接: https://juejin.cn/post/7091083692939935781
本文知识点:
php伪协议:
- 可以在resource中使用相对路径!!!
php://filter/convert.base64-encode/resource=woofers/../flag
- 将不存在的过滤器放到路径中时,php找不到只会警告,会继续向下执行,不会报错!!!
php://filter/convert.base64-encode/woofers/resource=flag
题目界面
该界面右两个按钮

随便点击一个按钮:

文件包含漏洞
尝试使用%00截断字符串
- 猜测后端是根据传入的category进行对应的文件包含,我很自然的想到使用data为协议先测试下,如下图:

- 尝试使用%00截断字符串,且将需要的woofers或则meowers包含进来

进国上述的测试,发现其根本无法绕过,看本文开头的参考链接解释,说高版本的php会检查传入的字符串的长度与传入参数的长度,如果不一样就不会执行,因此使用%00截断路径的方式不行!
尝试使用php的过滤器
- 继续测试,尝试使用相对路径试试,根据回显发现,后端会将传入的参数后面拼接
.php!

- 传入右边的参数,
php://filter/convert.base64-encode/resource=index,发现能够回显数据,其实这里我觉得都是狗运,因为后端的源码允许你查看index,不然这个也不行。按照回显的数据,其实要包含woofers或则meowers,并没有提到index。但是我菜,我看到write up这样写的。

-
查看flag.php文件,由于查看的路径中必须包含woofers或则meowers,所以可以使用下面两条参数,都可以:
php://filter/convert.base64-encode/resource=woofers/../flagphp://filter/convert.base64-encode/woofers/resource=flag -
base64解码得到flag,如下:
