知识点:
- password=’".md5($pass,true)."’
ffifdyop 这个字符串被 md5 哈希了之后会变成 276f722736c95d99e921722cf9ed621c,这个字符串前几位刚好是 ‘ or ‘6,
而 Mysql 刚好又会吧 hex 转成 ascii 解释,因此拼接之后的形式是1select * from ‘admin’ where password=’’ or ‘6xxxxx’
等价于 or 一个永真式,因此相当于万能密码,可以绕过md5()函数
- php弱类型比较
- &a!=&b MD5(&a)==MD5(&b)
MD5碰撞,可以用MD5值以0e开头的来碰撞,也可以用数组绕过 - &a!==&b MD5(&a)=MD5(&b)
md5强比较,此时如果传入的两个参数不是字符串,而是数组,md5()函数无法解出其数值,而且不会报错,就会得到=强比较的值相等
或者利用md5值强碰撞,找到两个md5值相同的字符串即可。
复现:
打开页面,get参数传递,随便输入一个数:
看到提示:
- &a!=&b MD5(&a)==MD5(&b)