文章目录
- 一、PHP常用过滤函数:
- 1.1 `==`与`===`
- 1.2 md5
- 1.3 intval
- 1.4 strpos
- 1.5 in_array
- 1.6 preg_match
- 1.7 str_replace
- CTFshow演示
- 三、参考资料
一、PHP常用过滤函数:
1.1 ==
与===
==
:弱类型对比(不考虑数据类型),甚至可以理解为只要右边变量的前几个字符或数字等于左边的变量,==
就成立,且不受符号影响。===
:强类型对比(考虑数据类型),也就是说左右两边的值要完全一样才会满足===
。
1.2 md5
-
使用
md5()
和==
进行变量比较
md50e
漏洞:就是说在使用md5()
和==
进行变量比较的时候,只要左右两边的字符串经过md5()加密后,都是以0e
开头的字符串,那么左右两边将会相等。
php甚至会有
oe
漏洞,只有两边的变量(整型)以oe
开头,php也会判断左右两边相等。
-
当使用
md5()
和===
进行变量对比的时候, 使用数组可以绕过md5()函数的检测。
1.3 intval
函数作用:将变量的值默认转化为十进制。intval
应用地方:比如sql注入时,通常使用and 1=1
来判断注入类型是数字型还是字符型,后端使用intval()
函数将会使and 1=1
失效。
缺陷:可以使用==
的特性,如+16、16.0;或者进制转换后,左右变量也相等。intval绕过
1.4 strpos
函数语法:第一个参数为要搜索的字符串,第二个参数为要查找的子串,第三个参数为从哪儿开始查找。
%oa
(换行)会屏蔽要搜索的子串。
过滤字符串起始不能为0
1.5 in_array
语法:
不设置
strict
参数,就相当于==
进行判断。
1.6 preg_match
漏洞:preg_match
只能处理字符串,如果不按规定传一个字符串,通常传一个数组进入,就会使preg_match
失效,从而绕过该函数的检测。
1.7 str_replace
作用:替换字符串中的一些字符(区分大小写)。
漏洞:无法迭代过滤,只过滤一次
CTFshow演示
intval
函数是取整,同时第二个参数为0
表示通过检测第一个参数的格式来决定使用的进制。这里我们要做的是不输入4476,但是要拿到flag。可直接在4476后面加小数
或者使用进制转换
。
三、参考资料
红日安全php项目