web94笔记(+strpos()不让0开头)
<?php /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-16 11:25:09 # @Last Modified by: h1xa # @Last Modified time: 2020-09-18 16:46:19 # @link: https://ctfer.com */ include("flag.php"); highlight_file(__FILE__); if(isset($_GET['num'])){ $num = $_GET['num']; if($num==="4476"){ die("no no no!"); } if(preg_match("/[a-z]/i", $num)){ die("no no no!"); } if(!strpos($num, "0")){ die("no no no!"); } if(intval($num,0)===4476){ echo $flag; } }
这⾥不让0开头了,但是可以在前⾯加上⼀个加号,当空格(八进制方法)
?num=+010574
这次变成强比较,并且多加了一个strpos函数
strpos() 函数查找字符串在另一字符串中第一次出现的位置
strpos($num, "0")
strpos(string,find,start)
| 参数 | 描述 |
|---|---|
| string | 必需。规定要搜索的字符串。 |
| find | 必需。规定要查找的字符串。 |
| start | 可选。规定在何处开始搜索。 |
返回字符串在另一字符串中第一次出现的位置,如果没有找到字符串则返回 FALSE。
注释:字符串位置从 0 开始,不是从 1 开始。
因为八进制需要开头指定为0,而strpos()会匹配到返回0,!0也就是1得执行die,我们可以在前面加个空格,这样strpos()会返回1,所以我们把4476转换为8进制10574后,前面再加一个空格即可,payload为
?num= 010574
浙公网安备 33010602011771号