学点web
MD5比较
在php中有两种比较的符号,“==”和“===”。
弱比较:使用“**==”进行比较,会先将两边转换成相同类型再比较,即仅比较值**。
强比较:使用“**===”进行比较,会先判断两边的数据类型是否相等,再进行比较,因此既比较值又比较类型**。
弱类型比较
原理
转换规则
1.同类型(数字型和数字型比较、字符型和字符型比较),比较其内容。比如’’aaa’’ == ‘’ab’’ -> false、123 == 223 -> false
2.字符型和数字型比较:若字符型值开头为数字,则转为数字;若开头不为数字,则为null弱比较和0相等。例如:“abc123” == 0 -> true
绕过
一、0e绕过
如果两个字符经MD5加密后的值以“0e”开头,则会被认作科学计数法,表示0*10**x,仍为0,则两者相等。
以下为一些可用字符串:
字符串 | md5值 |
---|---|
QNKCDZO | 0e830400451993494058024219903391 |
240610708 | 0e462097431906509019562988736854 |
s1502113478a | 0e861580163291561247404381396064 |
s1885207154a | 0e509367213418206700842008763514 |
s1836677006a | 0e481036490867661113260034900752 |
s155964671a | 0e342768416822451524974117254469 |
…… | …… |
二、数组绕过
md5不能加密数组,传入数组会报错,但会继续执行并返回结果为null。
payload:?a[]=1&b[]=2
强类型绕过
一、数组绕过
见上。
二、使用md5加密后两个完全相等的字符串来绕过过滤
三、mysql里的ffifdyop绕过
万能通式:129581926211651571912466741651878684928和ffifdyop
实例:
select * from ‘admin’ where password=md5($pass,true)
输入md5(‘ffifdyop’,true)绕过
ffifdyop 这个字符串被 md5 哈希了后会变成 276f722736c95d99e921722cf9ed621c,Mysql会把hex转成ascii解释,而该字符串的md5转成字符串前几位刚好是’or’6,因此拼接之后的形式是 select * from ‘admin’ where password= ‘ ‘ or ‘6xxxxx ‘,等价于永远为真。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 温婳霂!