preg_match()函数

1.preg_match()无法处理数组,当需要绕过此函数时可以在参数前增加数组符号即可绕过。

2.preg_match()内会增加一些形态表示过滤的范围。

1
2
例如:preg_match('/^php/im',$a)
这个就代表对php大小写进行检测和逐行检查

一共有6种类型
(1):i
不区分大小写。
(2):m
多行匹配,若存在换行符/n并且有开始^或结束$符的情况下,将以换行为分隔符,逐行进行匹配。
(3):s
特殊字符圆点.中包含换行符.默认的圆点.是匹配除换行符\n之外的任何单字符,加上s之后,.包含换行符。
(4):A
强制从目标字符串开头匹配
(5):D
如果使用$限制结束字符,则不允许结尾有换行符。
(6):e
配合函数preg_replace使用,可以把匹配来的字符串当作正则表达式来执行。

intval()函数

1.intval()函数用于获取变量的整数值。

2.intval($t,$f)
说明:
$t是要进行转换的值
$f转化所使用的进制

如果$f是0,则通过检测$t的格式来决定使用的进制
如果包含了0x的前缀,使用16进制(hex);
如果使用0开头,使用8进制
否则使用十进制。

(在参数传给载体之前,php会将运算结果传入参数载体所以科学计数法也可绕过)
intval函数收到内收到字母就会停止读取。
22e2=22*(10^2)=2200.0而intval收到的是22e2反馈22

关于强比较的绕过

强比较的符号是‘===’要求一般是左右参数的值相等并且类型相同
例如左边是int类型,右边即一定需要是int类型才能成立

strpos()函数

strpos($f,$t)
查找字符串在另一字符串中第一次出现的位置
说明:
$f是接受检测的字符串
$t是检测的字符或者字符串
例如strops(“0123”,”1”)
检测结果是1,也就是字符串的第二个位置(数字是从0开始数)

highlight_file()

此函数可显示指定文件内容
可以用绝对路径,相对路径,php伪协议

1
2
3
?u=/var/www/html/flag.php
?u=./flag.php
?u=php://filter/resource=flag.php

md5()

md5无法处理数组
当有md5($a)===md5($b)时
可以a[]=1 & b[]=2绕过

1
2
a=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2
&b=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2

出现正则绕过可以使用这个进行简单的查看过滤字母是什么

1
2
3
4
5
6
7
<?php
for($a = 0; $a < 256; $a++){
if (!preg_match("/[a-zA-Z0-9@#%^&*:{}\-<\?>\"|`~\\\\]/",chr($a))){
echo chr($a)." ";
}
}
?>