[BSidesCF 2020]Had a bad day
文章目录
- [BSidesCF 2020]Had a bad day
- 掌握知识
- 解题过程
- 关键paylaod
掌握知识
php伪协议进行文件包含,代码审计,strpos()
函数会返回字符串在另一字符串中第一次出现的位置,如果没有找到则返回 FALSE
,php伪协议可以再套一层协议绕过判断或者目录遍历的方式绕过判断
解题过程
- 访问网站,发现有两个按钮可以点击,查看源码没有什么
hint
,点击按钮后发现类似文件包含的url
字段,而且点击按钮会相互切换界面,怀疑是文件包含的考点
- 尝试验证,读取
/etc/passwd
,index.php
都没有反应,使用php伪协议再次尝试,发现页面返回了报错,发现index.php
后面还有个php,猜测页面源码会将传入的参数在后面拼接一个php后缀名,再次使用php
伪协议读取index
,成功得到页面源码。当然flag
文件没能包含成功。php://filter/convert.base64-encode/resource=index
- 将base64解码后,得到了页面源码,发现是一个简单的代码审计,
strpos()
函数会返回字符串在另一字符串中第一次出现的位置,如果没有找到字符串则返回FALSE
。所以要想执行include
函数,传入的参数必须要有woofers
meowers
index
之一。
<?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://filter
伪协议可以套一层index
字符串,而且也能正常执行。paylaod
:?category=php://filter/convert.base64-encode/index/resource=flag
- 第二种方法可以选择目录遍历的方式,
/
是来到下一级目录,../
是返回上一级目录,./
是在这一级目录访问,所以只需要构建index/../flag
,就可以访问flag.php
了
关键paylaod
php://filter/convert.base64-encode/resource=index?category=php://filter/convert.base64-encode/index/resource=flag?category=php://filter/convert.base64-encode/resource=index/../flag