-
web89
绕过preg_match函数,intval函数returns 1; // 如果匹配到
returns 0; // 如果未匹配到
returns FALSE; //发生错误时
preg_match只能处理字符串,当传入的是数组时会返回false,跳出ifintval()函数可以获取变量的
0:失败 或 空array返回0
1:非空array返回1
其他integer值:成功时返回$var的integer值?num[]
-
web90
绕过intval函数
汇总一下intval()函数漏洞的绕过思路(转自士别三日wyx):
#当某个数字被过滤时,可以使用它的 8进制/16进制来绕过;比如过滤10,就用012(八进制)或0xA(十六进制)。?num=0x117C
#对于弱比较(a==b),可以给a、b两个参数传入空数组,使弱比较为true。
#当某个数字被过滤时,可以给它增加小数位来绕过;比如过滤3,就用3.1。?num=4476.1
#当某个数字被过滤时,可以给它拼接字符串来绕过;比如过滤3,就用3ab。(GET请求的参数会自动拼接单引号)。?num=4476a
#当某个数字被过滤时,可以两次取反来绕过;比如过滤10,就用~~10。
#当某个数字被过滤时,可以使用算数运算符绕过;比如过滤10,就用 5+5 或 2*5。
#按位左移操作将二进制数向左移动指定的位数,并在右侧用零填充。?id=125<<3表示1111101,将其左移3位后,得到 1111101000。将该二进制数转换为十进制,结果为1000。 -
web91
if(preg_match('/^php$/im', $a)){
if(preg_match('/^php$/i', $a)){
echo 'hacker';
}
else{
echo $flag;
}
/m表示多行模式,我们用换行的**%0a**就可以绕过。
?cmd=%0aPHP
-
web92
intval的进制绕过,八进制和十六进制都可以绕。
?num=010574(八进制)
?num=0X117C(十六进制) -
web93
限制了字母,所以用8进制。 -
web94
strpos函数表明输入一定要有0,但是强=表明0不能在第一位,同时不许传入字母。
小数点绕过:?num=4476.02
?num=%20010574
?num=%0a010574 -
web95
?num=%20010574 -
web96
get直接传参给highlight_file,所以不能用?*等模糊匹配。
既然直接==传参,所以就不直接等于flag.php但是指向的是flag.php就行。
直接在前面增加一个本文件夹./就能绕过。 -
web97
在网上搜到大神的总结。
https://www.cnblogs.com/Rain99-/p/12737244.html
今晚上在家弄,这b电脑连个hackbar都咩有,不要说bp了