文件包含
web78:
这题一眼顶针了
web79
看下代码
if(isset($_GET['file'])){ $file = $_GET['file']; $file = str_replace("php", "???", $file); include($file); }else{ highlight_file(__FILE__); }
有个简单替换,把php替换成了???
凭借我的🐖脑子,还是想用filter协议去读,结果被替换读不出来
正常思路:
用data协议读,这样可以使得flag.php被base64编码从而绕过,不过那个base64被叫成是什么过滤器还是什么筛选器,当初看到时候感觉挺形象的。
?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs=
web80
这题不放代码了,就是在上一题的基础上把data协议ban了
坦白说,我不会,看的答案,日志包含
?file=/var/log/nginx/access.log
本来以为和上一题是一路货色,结果传了之后发现出不来。
看了看别的师傅的WP,在UA加了一句话Mua。
拿Postman跑一下,赏心悦目:
直接把原UA关掉重写一个
body直接传参,先ls,看到fl0g.php
竞争环境要等晚上11:30之后才开,我是懒狗
PHP特性
web89
if(isset($_GET['num'])){ $num = $_GET['num']; if(preg_match("/[0-9]/", $num)){ die("no no no!"); } if(intval($num)){ echo $flag; } }
直接传数组?num[]=
原理数组绕过,具体我不太明白,看了别的师傅的WP
看懂了,intval() 函数会对num进行转换,如果num是个数组的话,会导致转换失败。
转换失败即转为1.if(1)执行输出flag
web90
这题禁止传4476,但想出flag还得要4476
直接浮点数走了
当然截断也行.
整乐了
web91
show_source(__FILE__); include('flag.php'); $a=$_GET['cmd']; if(preg_match('/^php$/im', $a)){ if(preg_match('/^php$/i', $a)){ echo 'hacker'; } else{ echo $flag; } } else{ echo 'nonononono'; }
这题和前面不太一样,两个正则表达式全都要求开头为php
但要保证能过第一个不过第二个
还得读flag.php
那php咋开头捏
截断一下直接传
web92
这题也是,第一个If不能走,走第二个,差别在于intval函数
直接16进制绕过
web93
这题加了个判断,不让传字母,也就是把16进制ban了,那就传8进制
web94
这题第二个nonono绕过的要求是num第一位不能是0,相当于是把进制转换堵死了。
小数点试试
web95
这个。。第一个if不让传4476,第二个进制字母+点,第三个堵死进制
没办法了呜呜呜。超超
web96
这题有点迷
官方给的解释是
?u=./flag.php or ?u=php://filter/convert.base64-encode/resource=flag.php
还是喜欢伪协议
web97
这题第一眼看见的时候还以为是md5碰撞,跑了一下发现不对,是===
那就只能数组绕过了