PHP特性-缺陷对比函数
php过滤函数缺陷绕过
和=的缺陷绕过
=:赋值
==:对比值不对比值类型
===:对比值也对比值类型
举个例子:==的时候访问文件
传入1或者+1,1.0 ,1admin都可以获得flag
===的时候
就只有传参为1的时候才能输出flag
常见函数
1,md5:
使用==
传参?name=QNKCDZO&password=240610708,因为两个值MD5加密之后开头都是0e
使用===
传参?name[]=1&password[]=2 ,因为MD5使用===的时候判断不了数组,两个参数的值就会都为:null,成功相同
2,intval:获取变量的整数值
我们可以将666进行16进制转换:29a,在字符串前面加上0x:0x29a。或者小数绕过,因为参数只取整数值。
传参:?n=0x29a
3,strpos:查找字符串在另一字符串中第一次出现的位置。
传参:?h=%0a666
4,in_array:可以判断一个值是否在数组中
因为strict参数为false所以传递的参数可以不为同类型
5,preg_match:用于执行一个正则表达式匹配。
preg_match只能处理字符串,如果不按规定传一个字符串,通常是传一个数组进去,这样preg_match就会失效,产生报错。
6,str_replae:以其他字符替换字符串中的一些字符(区分大小写)
str_replace无法迭代过滤,传参:?s=sselectelect
只能过滤一次,双写绕过。
代码审计
源码内全局搜索函数str_replace,找到过滤代码,发现过滤../和./ 而且dir参数的值里需要有http。
只能过滤一次,双写绕过。
代码审计
源码内全局搜索函数str_replace,找到过滤代码,发现过滤../和./ 而且dir参数的值里需要有http。
确认过滤情况后,绕过过滤代码,遍历出数据库配置文件
抓包成功遍历出数据库配置文件
免责声明
本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本平台和发布者不为此承担任何责任。