BUUCTF之[Zer0pts2020]Can you guess it? basename函数绕过
BUUCTF之[Zer0pts2020]Can you guess it? basename函数绕过
题目
后台PHP源码:
<?php
include 'config.php'; // FLAG is defined in config.phpif (preg_match('/config\.php\/*$/i', $_SERVER['PHP_SELF'])) {exit("I don't know what you are thinking, but I won't let you read it :)");
}if (isset($_GET['source'])) {highlight_file(basename($_SERVER['PHP_SELF']));exit();
}$secret = bin2hex(random_bytes(64));
if (isset($_POST['guess'])) {$guess = (string) $_POST['guess'];if (hash_equals($secret, $guess)) {$message = 'Congratulations! The flag is: ' . FLAG;} else {$message = 'Wrong.';}
}
?>
这题有两种解题方式,第一种看这里
include 'config.php'; // FLAG is defined in config.phpif (preg_match('/config\.php\/*$/i', $_SERVER['PHP_SELF'])) {exit("I don't know what you are thinking, but I won't let you read it :)");
}if (isset($_GET['source'])) {highlight_file(basename($_SERVER['PHP_SELF']));exit();
}
第二种看这里,但是第二种我不会。哈哈哈哈哈哈哈…
$secret = bin2hex(random_bytes(64));
if (isset($_POST['guess'])) {$guess = (string) $_POST['guess'];if (hash_equals($secret, $guess)) {$message = 'Congratulations! The flag is: ' . FLAG;} else {$message = 'Wrong.';}
}
好了,废话不多说。现在开始解题吧!
首先是需要绕过这个正则表达式:
if (preg_match('/config\.php\/*$/i', $_SERVER['PHP_SELF']))
这里是表示不能以config.php为结尾,不然会被拦下。
所以这里可以在config.php后面再加一个文件名,比如:
- /config.php/index.php
- /config.php/test.php
- /config.php/{随便什么文件名都可以}
接下来获取flag是看这个
highlight_file(basename($_SERVER['PHP_SELF']));
关键点是这个函数basename
basename() 函数返回路径中的文件名部分。但是它有个小问题,它会去掉文件名开头的非ASCII值。比如:
- $url1 = “path/
index.php
”; // 返回index.php - $url2 = “path/
index.php
”.urldecode(’%D1%A7%CF’); // 返回index.php和乱码 - $url3 = urldecode(’%D1%A7%CF%B0
flag.php
+ '); // 返回flag.php,前面的非acsii被删除 - $url4 = urldecode(’%74%65%73%74%5f
flag.php
+%D1%A7%CF%B0 '); // 返回flag.php和 后面的非ascii
如图
关于basename函数的bug可以看这里
With the default locale setting "C", basename() drops non-ASCII-chars at the beginning of a filename.
所以payload是:
- …/index.php/config.php/%ff?source
- …/index.php/config.php/%a1?source
- …/index.php/config.php/%df?source
上面的payload随便哪一个都可以,主要是保证config.php后面必须是非ascii值就可以了
获取到的Flag:
BUUCTF之[Zer0pts2020]Can you guess it? basename函数绕过相关推荐
- basename函数漏洞之[Zer0pts2020]Can you guess it?
知识点: basename 函数,获取路径中的文件名:比如:test/inde.php/s 就会返回index,php 但是漏洞就是,它会去掉文件名开头的或者结尾的非ASCII值! 例题: 代码: ...
- PHP basename() 函数
定义和用法 basename() 函数返回路径中的文件名部分. 语法 basename(path,suffix) 参数 描述 path 必需.规定要检查的路径. suffix 可选.规定文件扩展名.如 ...
- R语言使用basename函数获取数据链接地址中的文件名称(removes all of the path up to and including the last path separator )
R语言使用basename函数获取数据链接地址中的文件名称(removes all of the path up to and including the last path separator (i ...
- php文件名函数,php 获取文件名basename()函数的用法总结
PHP 中basename()函数给出一个包含有指向一个文件的全路径的字符串,此函数返回基本的文件名,本篇文章收集了关于使用PHP basename()函数获取文件名的几篇文章,希望对大家理解使用PH ...
- php文件名函数,详解php 获取文件名basename()函数的用法
PHP 中basename()函数给出一个包含有指向一个文件的全路径的字符串,此函数返回基本的文件名,本篇文章收集了关于使用PHP basename()函数获取文件名的几篇文章,希望对大家理解使用PH ...
- basename函数 中文问题
前段时间对学校一电影站做了点修改,动态生成文件给用户下载,其中需要向一个页面传递一些参数,有些是中文.今天再去看,发现在下载的时候文件名中的中文全部获取不到,php中使用的是basename函数,前几 ...
- php的basename,php basename 函数
下面来看看提供一关于件路径的组成部分basename函数实例教程 basename ( PHP 4中, PHP 5中) basename -返回文件路径的组成部分 描述 字符串basename (字符 ...
- php 中basename,php中的basename函数怎么用
php中的basename函数的用法:[basename($file)].basename()函数用于返回文件路径中的文件名部分,函数语法为[basename(path,suffix)],其中参数pa ...
- php basename() 绕过,【转】PHP里的basename函数不支持中文名的解决
今天用到basename 函数获取文件名称时,发现如果是中文的文件名返回只有后缀的空文件名(如:.pdf) string basename ( string path [, string suffix ...
最新文章
- Mysql InnoDB B+树索引和哈希索引的区别? MongoDB 为什么使用B-树?
- [Swift]在不依赖三方库的情况下如何异步下载和缓存图片?
- Eclipse 报java.lang.OutOfMemoryError: PermGen space
- 奥特曼系列ol光元在哪个服务器,奥特曼系列ol光元怎么合理使用
- 通过string型类名实例化一个类
- 深度学习主流框架介绍(PyTorch、TensorFlow、Keras、Caffe、Theano、MXNET)
- Magento 2.0 Alipay Cross-Border Mobile Payment Extension - Magento 2.0 支付宝跨境支付手机版...
- 从计算机系统结构的发展和演变看,近代计算机是以,西南民族大学计算机系统结构试卷B有答案.doc...
- 详解boost库中的Message Queue
- 浪潮服务器开启虚拟化功能,浪潮服务器-虚拟化解决方案.ppt
- 计算机网络WiFi共享,wifi共享软件哪个好 wifi共享软件排行榜推荐
- 一文排除R语言热力图所有的坑
- java计算机毕业设计vue健康餐饮管理系统设计与实现MyBatis+系统+LW文档+源码+调试部署
- 粤通院 招聘FPGA工程师
- 慎用鲁大师 360等软件
- 【一起学Rust | 框架篇 | Frui框架】rust一个对开发者友好的GUI框架——Frui
- BMZCTF 网鼎杯 2018 minified
- 云原生周报 | 百度开源千万级CPS压测软件 dperf;BFE Server v1.5.0 发布
- 终于拿到蚂蚁金服Offer!!!分享一下全程面试题和面试经验!
- USB协议学习笔记 - 虚拟串口Virtual Port Com用于LOG打印