MD5绕过的技巧

MD5函数漏洞

$str1 = $_GET['str1'];
$str2 = $_GET['str2'];
if (md5($str1) == md5($str2)){
die('OK'); }

  • php弱类型比较产生的漏洞

  • 想要满足这个判断只需要构造出MD5值为0e开头的字符串,这样的话弱类型比较会认为是科学技术法,0的多少次方都是0,因此可以绕过

  • 有一些字符串的MD5值为0e开头,这里记录一下

  • QNKCDZO

  • 240610708

  • s878926199a

  • s155964671a

  • s214587387a

  • 还有MD5和双MD5以后的值都是0e开头的

  • CbDLytmyGm2xQyaLNhWn

  • 770hQgrBOjrcqftrlaZk

  • 7r4lGXCH2Ksu2JNT3BYM

PHP特性

$str1 = $_GET['str1'];
$str2 = $_GET['str2'];

if (md5($str1) === md5($str2)) {
die('OK');
}

  • 因为是强类型比较,用0e开头的字符串是没办法绕过的了,但是PHP自身的特性使得可以提交一个数组,而md5函数传入数组的返回值都是NULL,这样就可以绕过强类型比较了。所以这里用GET传入?str1[]=1&str2[]=2就行了

  • 补充:md5()或者sha1()之类的函数计算的是一个字符串的哈希值,对于数组则返回false,如果$str1$str2都是数组则双双返回FALSE, 两个FALSE相等得以绕过

MD5碰撞

$str1 = (string)$_GET['str1'];
$str2 = (string)$_GET['str2'];

if (md5($str1) === md5($str2)) {
die('OK');
}

  • 由于强制类型转换,传数组就不可行了,这里就需要MD5碰撞,对于需要两个内容不同但是MD5值相同的文件,使用Fastcoll就可以了

绕过md5()来构造攻击语句

select * from 'admin' where password=md5($pass,true)

  • ffifdyop

  • 这个点的原理是 ffifdyop 这个字符串被 md5 哈希了之后会变成 276f722736c95d99e921722cf9ed621c,这个字符串前几位刚好是 ‘ or ‘6,
    而 Mysql 刚好又会吧 hex 转成 ascii 解释,因此拼接之后的形式是select * from ‘admin’ where password=’’ or ‘6xxxxx’。等价于 or 一个永真式,因此相当于万能密码,可以绕过md5()函数

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

网安溦寀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值