password=md5($pass,true)绕过、弱类型、MD5强碰撞 |
您所在的位置:网站首页 › md5类型 › password=md5($pass,true)绕过、弱类型、MD5强碰撞 |
在输入框查询任何内容都返回为空,尝试sql注入无果,用bp抓包 select * from 'admin' where password=md5($pass,true) 确实执行了我们的查询,但是在通过where时,条件不匹配,导致报错 需要password=md5($pass,true)条件为真时,才会执行select * form admin md5()函数会将我们输入的值,加密,然后转换成16字符的二进制格式,由于ffifdyop被md5加密后的276f722736c95d99e921722cf9ed621c转换成16位原始二进制格式为'or’6\xc9]\x99\xe9!r,\xf9\xedb\x1c,这个字符串前几位刚好是' or '6 MD5加密276F722736C95D99E921722CF9ED621C16位原始二进制格式'or’6\xc9]\x99\xe9!r,\xf9\xedb\x1cstring'or’6]!r,b我们将ffifdyop带入测试环境,查看执行结果 所以输入ffifdyop后,内部执行语句就会变为 select * from 'admin' where password='or'6�]��!r,��b' 但是为什么偏偏当password='or'6�]��!r,��b'时,会判断为真呢?在mysql内,用作布尔型判断时,以1开头的字符串会被当做整型数。要注意的是这种情况是必须要有单引号括起来的,比如password=' or '1xxxx',那么就相当于password=' or 1,所以返回值就是true 所以这里使用的sql语句可以化简为 select * from 'admin' where password='or 6 跳转至下一个页面,右击查看源码 考的是md5弱类型,为0e开头的会被识别为科学记数法,结果均为0 构造payload ?a=QNKCDZO&b=s878926199a 跳转至下一个页面 考的是MD5强碰撞,如果传参不是字符串,而是数组,md5()函数无法解出数值,就会得到===强比较的值相等 payload:param1[]=1¶m2[]=2 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |