目录(PS:仅个人思路,不保熟🐔🦄🐔🦄🐔🦄🐔🦄🐔🦄🐔🦄🐔🦄🐔🦄🐔🦄🐔)
intval()绕过思路汇总一下intval()函数漏洞的绕过思路:
web89:
include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
$num = $_GET['num'];
if(preg_match("/[0-9]/", $num)){
die("no no no!");
}
if(intval($num)){
echo $flag;
}
}
主要流程:大概就是你要给它个“num”参数(get请求),绕过preg——match()函数和intval()函数之后就能拿到flag了
对于intval()函数的绕过我推荐这篇:PHP intval()函数详解,intval()函数漏洞原理及绕过思路_intval函数-优快云博客
intval()绕过思路
汇总一下intval()函数漏洞的绕过思路:
1)当某个数字被过滤时,可以使用它的 8进制/16进制来绕过;比如过滤10,就用012(八进制)或0xA(十六进制)。
2)对于弱比较(a==b),可以给a、b两个参数传入空数组,使弱比较为true。
3)当某个数字被过滤时,可以给它增加小数位来绕过;比如过滤3,就用3.1。
4)当某个数字被过滤时,可以给它拼接字符串来绕过;比如过滤3,就用3ab。(GET请求的参数会自动拼接单引号)
5)当某个数字被过滤时,可以两次取反来绕过;比如过滤10,就用~~10。
6)当某个数字被过滤时,可以使用算数运算符绕过;比如过滤10,就用 5+5 或 2*5
————————————
此处只要intval返回有值即可,而此处preg-match又过滤了所有的数字,则只需要过滤preg-match就可以获得flag了(intval没有受限制)
对于preg-match这里也是摘一篇文供大家详细了解:
https://www.cnblogs.com/iwantflag/p/15262445.html
preg-match绕过总结:
1,数组绕过 a[]=(想要传的参数)
2,利用PCRE回溯次数绕过(100万次,不推荐)
3,换行符绕过(在web传参时传入换行符"%0a",此处不知道为啥不行🤨🤨)
我使用的是第一种,写成“/?num[]=1”即可
tips:preg_match当检测的变量是数组的时候会报错并返回0。而intval函数当传入的变量也是数组的时候,会返回1
web90:
include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
$num = $_GET['num']; //接受num(git参数)
if($num==="4476"){ //强比较类型
die("no no no!");
}
i