1.MD5简介
MD5是一种常见的加密方式,但准确来说,它只是一种编码方式,它将任意有限长度的字符串通过哈希函数转换为特定长度的字符串。
MD5编码具有单向性,即由明文变密文简单,由密文变明文困难。
破解时只能通过暴力破解即穷举法
所以基于这个特性,MD5可以有效保证信息的完整性,当文件进行一点点的修改,MD5值都会有很大的改变。
MD5生成的密文由2进制表示——128位构成
由16进制表示——32位(大小写)16位(大小写)
2.弱类型比较的MD5绕过
v1!=v2,md5(v1)==md5(v2)
利用php弱类型比较的特点,构造v1,v2使得他们的MD5值开头都为0e,php会认为是科学计数法不管后面是什么都是0的次方,最终判定为相等。
以下为最常用的两个字符串
字符串 | MD5值 |
---|---|
NKCDZO | 0e830400451993494058024219903391 |
40610708 | 0e462097431906509019562988736854 |
3.强类型比较的MD5绕过
v1!=v2,md5(v1)===md5(v2)
绕过方法:数组绕过:a[]=a&b[]=b,传入参数为数组则MD5返回NULL,NULL是一种特殊类型
最后可能会报错,但是null=null,判断为true,成功绕过
4.MD5构造攻击语句
典型的构造sql注入语句
构造or语句绕过:
md5(ffifdyop,true)='or’6\xc9]\x99\xe9!r,\xf9\xedb\x1c
md5(129581926211651571912466741651878684928,true)=\x06\xdaT0D\x9f\x8fo#\xdf\xc1’or’8
例题【BUUCTF】Easy MD5