MD5比较漏洞的简单理解

MD5的认识:

MD5是种被广泛使用的密码散列函数非对称加密,它能出用一个128位(16字节)的散列值(hash value),来确保信息传输完整一致。MD5它是由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计的(用来替代MD4)。是计算机广泛使用的杂凑算法之一(摘要算法、哈希算法),大多数编程语言均可实现MD5,由于MD5存在可被碰撞所以大多数用于SSL公钥认证和数字签名等。

MD5算法的特点:
1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

MD5的弱比较

if($_POST['a']!=$_POST['b']&& md5($_POST['a'])==md5($_POST['b'])){
	die("ok");
}

在这种的弱比较中,
①加密后以0e开头的会被识别成科学计数法,而0的N次方结果依旧是0即返回
一些加密后为0e开头的字符串
QNKCDZO 0e830400451993494058024219903391
s878926199a 0e545993274517709034328855841020
s155964671a 0e342768416822451524974117254469
s214587387a 0e848240448830537924465865611904
s214587387a 0e848240448830537924465865611904
s878926199a 0e545993274517709034328855841020
s1091221200a 0e940624217856561557816327384675

MD5是对字符串的比较对于数组会返回false,从而进行绕过

强比较

特殊:

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

这是我之前遇到的一题,它是将md5转成字符,这个做法应该跑出来个 ‘or’…这种形式的总之记住就好

md5('ffifdyop',true);   ————>   'or'6 ] !r, b 

还有这种md5加密后的比较

if (is_numeric($gg) && md5($id) === $gg){

这种用数组无法绕过只能跑MD5
一些加密后为纯数字的字符串
ximaz : 61529519452809720693702583126814
aalbke : 55203129974456751211900188750366
afnnsd : 49716523209578759475317816476053
aooalg : 68619150135523129199070648991237
bzbkme : 69805916917525281143075153085385
还有种强碰撞的

if((string)$_POST['a']!==(string)$_POST['b'] && md5($_POST['a'])===md5($_POST['b'])){

这种没有办法只能强碰我找了一些文章后的一些思路:
①随便写一些东西然后转为0x文本然后在转ascii后再转入bin通过url编码传入(目的就是那种不可见字符)
这样就会出现md5的值会相同但url值不同但传入是又会再次url编码这样就会使md5值相同但解码后不同(我不是特别懂没有实操,纯口嗨)
留个playload(也是别人的有点碟面但是咱莲猴)

a=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2
&b=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2

没了没了,我是懂会划水的!

你可能感兴趣的:(web安全)