课程思政:Md5扩展进犯的原理和使用

访客5年前黑客资讯845

做CTF标题的进程中遇到了md5扩展侵犯,参阅了几篇文章,感觉写的都有些小缺点,再发一篇文章,了解md5扩展侵犯首要需求了解md5的作业原理

 

1)md5的作业原理

详细参阅这两篇文章

http://blog.csdn.net/adidala/article/details/28677393,算法结束有误

https://www.rfc-editor.org/rfc/pdfrfc/rfc1321.txt.pdf,算法正确

md5的算法原理如下图所示

Md5的算法进程是

1、填充

将数据进行填充,首要添加0x80,接着添加0x00使得 (数据字节数 + 8)%64 = 0

2、添加长度

将数据的长度放入8字节的数组中,把低字节放到前面,例如长度为1,8字节的数据长度标明为00 00 00 00 00 00 00 01,把这个长度值转化为低字节在前面变成了01 00 00 00 00 00 00 00,将这个数据加入到全体的数据中。

3、进行次序改换

以64个字节为1组进行次序改换,这一组中以4字节为1个单位分红16个数字。

首要预备A,B,C,D四个32位的字符,其间,    A = 0x67452301,B = 0xefcdab89

,C = 0x98badcfe,D = 0x10325476,   将ABCD作为种子,与16个数字进行一种杂乱的运算(运算 *** 见后文),运算成果为A1 B1 C1 D1,以A1 B1 C1 D1为种子然后重复这个进程核算最终得到AnBnCnDn

4、输出hash值

将An进行类似于第二步的低字节次序的摆放An’,同理对Bn,Cn,Dn进行相同改换,An’,Bn’,Cn’,Dn’的简略拼接就是最终成果。

注:这儿简略记载一下正确的杂乱算法

文献1中的算法是过错的,正确的算法是

界说其间几个子算法F = lambda x,y,z:((x&y)|((~x)&z))G = lambda x,y,z:((x&z)|(y&(~z)))H = lambda x,y,z:(x^y^z)I = lambda x,y,z:(y^(x|(~z)))def shift(a, count):        return (((a << count) | (a >> (32 -count)))&0xffffffff)常量表:T_func = lambda i: int(4294967296*abs(math.sin(i))) & 0xffffffffT = [T_func(i) for i in xrange(1, 65)]T.insert(0 , 0)杂乱算法为        INPUT_A = A        INPUT_B = B        INPUT_C = C        INPUT_D = D        M = [ (myord[i * 64 + j + 3] <<24) +  (myord[i * 64 + j + 2] << 16 )+ (myord[i * 64 + j + 1] << 8) + (myord[i * 64 + j + 0] )             for j in xrange(0, 64, 4)]        def shift(a, count):            return (((a << count) | (a >> (32 -count)))&0xffffffff)        #之一轮        A = (B+ shift((A+F(B,C,D)+M[0]+T[1]) &0xffffffff,7) ) & 0xffffffff        D = (A+shift((D+F(A,B,C)+M[1]+T[2]) &0xffffffff ,12) )& 0xffffffff        C = (D+shift((C+F(D,A,B)+M[2]+T[3]) &0xffffffff,17) ) &0xffffffff        B = (C+shift((B+F(C,D,A)+M[3]+T[4]) &0xffffffff,22) )&0xffffffff        A = (B+shift((A+F(B,C,D)+M[4]+T[5]) &0xffffffff,7) )&0xffffffff        D = (A+shift((D+F(A,B,C)+M[5]+T[6])&0xffffffff,12) )&0xffffffff        C = (D+shift((C+F(D,A,B)+M[6]+T[7]) &0xffffffff,17) )&0xffffffff        B = (C+shift((B+F(C,D,A)+M[7]+T[8]) &0xffffffff,22) )&0xffffffff         A = (B+shift((A+F(B,C,D)+M[8]+T[9])&0xffffffff,7) )&0xffffffff        D = (A+shift((D+F(A,B,C)+M[9]+T[10])&0xffffffff,12) )&0xffffffff        C = (D+shift((C+F(D,A,B)+M[10]+T[11])&0xffffffff,17) )&0xffffffff        B = (C+shift((B+F(C,D,A)+M[11]+T[12])&0xffffffff,22) )&0xffffffff        A = (B+shift((A+F(B,C,D)+M[12]+T[13])&0xffffffff,7) )&0xffffffff        D = (A+shift((D+F(A,B,C)+M[13]+T[14])&0xffffffff,12) )&0xffffffff        C = (D+shift((C+F(D,A,B)+M[14]+T[15])&0xffffffff,17) )&0xffffffff        B = (C+shift((B+F(C,D,A)+M[15]+T[16])&0xffffffff,22) )&0xffffffff        #第二轮        A = (B+shift((A+G(B,C,D)+M[1]+T[17])&0xffffffff,5) )&0xffffffff        D = (A+shift((D+G(A,B,C)+M[6]+T[18]) &0xffffffff,9) )&0xffffffff        C = (D+shift((C+G(D,A,B)+M[11]+T[19])&0xffffffff,14) )&0xffffffff        B = (C+shift((B+G(C,D,A)+M[0]+T[20])&0xffffffff,20) )&0xffffffff        A = (B+shift((A+G(B,C,D)+M[5]+T[21])&0xffffffff,5) )&0xffffffff        D = (A+shift((D+G(A,B,C)+M[10]+T[22])&0xffffffff,9) )&0xffffffff        C = (D+shift((C+G(D,A,B)+M[15]+T[23])&0xffffffff,14) )&0xffffffff        B = (C+shift((B+G(C,D,A)+M[4]+T[24])&0xffffffff,20) )&0xffffffff        A = (B+shift((A+G(B,C,D)+M[9]+T[25])&0xffffffff,5) )&0xffffffff        D = (A+shift((D+G(A,B,C)+M[14]+T[26])&0xffffffff,9) )&0xffffffff        C = (D+shift((C+G(D,A,B)+M[3]+T[27])&0xffffffff,14) )&0xffffffff        B = (C+shift((B+G(C,D,A)+M[8]+T[28])&0xffffffff,20) )&0xffffffff        A = (B+shift((A+G(B,C,D)+M[13]+T[29])&0xffffffff,5) )&0xffffffff        D = (A+shift((D+G(A,B,C)+M[2]+T[30])&0xffffffff,9) )&0xffffffff        C = (D+shift((C+G(D,A,B)+M[7]+T[31])&0xffffffff,14) )&0xffffffff        B = (C+shift((B+G(C,D,A)+M[12]+T[32])&0xffffffff,20))&0xffffffff      &nbsNtQueryInformationProcess会从内核中的EPROCESS结构中获取全部的进程信息,而NtQueryVirtualMemory会从EPROCESS结构中的Virtual Address Descriptors (VADs)域中提取出所需数据。p; #第三轮        A = (B+shift((A+H(B,C,D)+M[5]+T[33])&0xffffffff,4) )&0xffffffff        D = (A+shift((D+H(A,B,C)+M[8]+T[34])&0xffffffff,11) )&0xffffffff        C = (D+shift((C+H(D,A,B)+M[11]+T[35])&0xffffffff,16) )&0xffffffff        B = (C+shift((B+H(C,D,A)+M[14]+T[36])&0xffffffff,23) )&0xffffffff        A = (B+shift((A+H(B,C,D)+M[1]+T[37])&0xffffffff,4) )&0xffffffff        D = (A+shift((D+H(A,B,C)+M[4]+T[38])&0xffffffff,11) )&0xffffffff        C = (D+shift((C+H(D,A,B)+M[7]+T[39])&0xffffffff,16) )&0xffffffff        B = (C+shift((B+H(C,D,A)+M[10]+T[40])&0xffffffff,23) )&0xffffffff        A = (B+shift((A+H(B,C,D)+M[13]+T[41])&0xffffffff,4) )&0xffffffff        D = (A+shift((D+H(A,B,C)+M[0]+T[42])&0xffffffff,11) )&0xffffffff        C = (D+shift((C+H(D,A,B)+M[3]+T[43])&0xffffffff,16) )&0xffffffff        B = (C+shift((B+H(C,D,A)+M[6]+T[44])&

amp;0xffffffff,23) )&0xffffffff        A = (B+shift((A+H(B,C,D)+M[9]+T[45])&0xffffffff,4) )&0xffffffff        D = (A+shift((D+H(A,B,C)+M[12]+T[46])&0xffffffff,11) )&0xffffffff        C = (D+shift((C+H(D,A,B)+M[15]+T[47])&0xffffffff,16) )&0xffffffff        B = (C+shift((B+H(C,D,A)+M[2]+T[48])&0xffffffff,23))&0xffffffff        #第四轮        A = (B+shift((A+I(B,C,D)+M[0]+T[49])&0xffffffff,6) )&0xffffffff        D = (A+shift((D+I(A,B,C)+M[7]+T[50])&0xffffffff,10) )&0xffffffff        C = (D+shift((C+I(D,A,B)+M[14]+T[51])&0xffffffff,15) )&0xffffffff        B = (C+shift((B+I(C,D,A)+M[5]+T[52])&0xffffffff,21) )&0xffffffff        A = (B+shift((A+I(B,C,D)+M[12]+T[53])&0xffffffff,6) )&0xffffffff        D = (A+shift((D+I(A,B,C)+M[3]+T[54])&0xffffffff,10) )&0xffffffff        C = (D+shift((C+I(D,A,B)+M[10]+T[55])&0xffffffff,15) )&0xffffffff        B = (C+shift((B+I(C,D,A)+M[1]+T[56])&0xffffffff,21) )&0xffffffff        A = (B+shift((A+I(B,C,D)+M[8]+T[57])&0xffffffff,6) )&0xffffffff        D = (A+shift((D+I(A,B,C)+M[15]+T[58])&0xffffffff,10) )&0xffffffff        C = (D+shift((C+I(D,A,B)+M[6]+T[59])&0xffffffff,15) )&0xffffffff        B = (C+shift((B+I(C,D,A)+M[13]+T[60])&0xffffffff,21) )&0xffffffff        A = (B+shift((A+I(B,C,D)+M[4]+T[61])&0xffffffff,6) )&0xffffffff        D = (A+shift((D+I(A,B,C)+M[11]+T[62])&0xffffffff,10) )&0xffffffff        C = (D+shift((C+I(D,A,B)+M[2]+T[63])&0xffffffff,15) )&0xffffffff        B = (C+shift((B+I(C,D,A)+M[9]+T[64])&0xffffffff,21))&0xffffffff        A = (A + INPUT_A) & 0xffffffff        B = (B + INPUT_B) & 0xffffffff        C = (C + INPUT_C) & 0xffffffff        D = (D + INPUT_D) & 0xffffffff

 

Md5算法结束python版别见第三节的中的my_md5函数结束

了解的md5算法的原理,下面开端解说md5扩展侵犯

 

2)Md5侵犯扩展侵犯

首要能够参阅这篇文章(http://www.freebuf.com/articles/web/69264.html),本文将对这篇文章进行弥补阐明。

从md5算法原理能够知道,每一次序核算的ABCD将作为下一次序核算的初始值,假定我们已知一个数字x的md5值为y,其间x为未知量,即y=md5(x),一起已知x的长度,那么我们就能进行md5扩展侵犯,因为我们知道y为md5(x)核算结束后的ABCD值的简略组合,通过md5的算法可知y = f(x + x的填充值),假如我们添加x1,核算y’=f( (x + x的填充值+x1 ) +  (x + x的填充值+x1 ) 的填充值 )则变得或许,应为y’能够运用y转化的AB

CD值同(x1 + (x + x的填充值+x1 ) 的填充值)再进行一次序的核算既能够得出。

下图论述了上述算法原理

其间标号1为原始数据x,标号2位原始数据x的填充长度,标号3标明新添加的数据,标号4为标号1,2,3的填充和长度。假如我们已知一个核算出来的hash值,一起知道明文的长度,则我们能够结构标号2的数据,标号3,核算未知数md5值的函数(如服务器端的程序),拿到我们结构的标号2和标号3的数据,会主动添加标号4的数据,核算完标号1和和标号2发生ABCD,接着会发生hash值,这时这个hash值就是能够猜测。

侵犯者能够核算出标号3和标号4,以ABCD作为输入进行核算本地产出的hash值和服务端核算出的hash值是共同的。

侵犯者的视角如下图所示。

1、侵犯者供给标号2,标号3,标号4的数据

2、服务端核算到标号2的方位刚好为ABCD这个已知数据

3、侵犯者在本地依据标号3和标号4的数据和ABCD值核算hash值侵犯成功

而服务端的视角是,侵犯者供给了标号2和标号3的数据,服务端核算了标号4的数据,一起服务端产出ABCD,发现没有核算结束,接着工作md5算法,核算出的新的hash值和侵犯者共同。

综上所述要想进行此类侵犯需求知道两个条件

1、标号1数据的长度。

2、标号1数据的md5值。

最终总结一下侵犯进程

之一步:依据标号1的长度核算标号2的数据,供给标号3的数据,本地核算标号4 的数据,并核算加上标号3和标号4数据后的hash值。

第二步:发送核算出来的hash,和标号2,标号3的数据,侵犯成功。

 

 

3)程序展现

展现python编写的MD5程序和md5扩展侵犯的程序

#-*- coding=utf-8 -*-import mathdef my_md5_extend(salt_hash, salt_length, added_message): #核算需求填充的数据 added_data = [0x80]; x = salt_length + 1; while (x + 8) % 64 != 0: x += 1; added_data.append(0x00); salt_length *= 8; salt_length = salt_length % (2 ** 64); salt_length = hex(salt_length); salt_length = salt_length[2:len(salt_length)-1].rjust(16, '0'); salt_length = [int(format(salt_length[i:i+2]), 16) for i in xrange(0, len(salt_length), 2)][::-1] #下面的数据用于加在payload后边 added_data.extend(salt_length); #important #打印payload print ''.join(['%' + hex(item).replace('0x', '').rjust(2,'0') for item in added_data]) #添加新加的数据,然后运用现已md5的数据进行扩展核算,核算出来一个新的hash值 myord = map(ord, added_message); myord.append(0x80); added_length = (x + 8 + len(added_message)) ; y = x + 8 + len(added_message) + 1; while (y + 8) % 64 != 0: y += 1;
课程思政:Md5扩展进犯的原理和使用
myord.append(0x00); added_length *= 8; added_length = added_length % (2 ** 64); added_length = hex(added_length); added_length = added_length[2:len(added_length)-1].rjust(16, '0'); added_length = [int(format(added_length[i:i+2]), 16) for i in xrange(0, len(added_length), 2)][::-1] myord.extend(added_length); #运用现已核算出来的hash myA, myB, myC, myD = ( int(salt_hash[i +6: i + 8] +salt_hash[i + 4: i + 6] +salt_hash[i + 2:i + 4] +salt_hash[i + 0 : i + 2], 16) for i in xrange(0, len(salt_hash), 8)); A = myA; B = myB; C = myC; D = myD; F = lambda x,y,z:((x&y)|((~x)&z)) G = lambda x,y,z:((x&z)|(y&(~z))) H = lambda x,y,z:(x^y^z) I = lambda x,y,z:(y^(x|(~z))) T_func = lambda i: int(4294967296*abs(math.sin(i))) & 0xffffffff T = [T_func(i) for i in xrange(1, 65)] T.insert(0 , 0) #进行hash核算 for i in xrange(0, len(myord) / 64): INPUT_A = A INPUT_B = B INPUT_C = C INPUT_D = D M = [ (myord[i * 64 + j + 3] <<24) + (myord[i * 64 + j + 2] << 16 )+ (myord[i * 64 + j + 1] << 8) + (myord[i * 64 + j + 0] ) for j in xrange(0, 64, 4)] def shift(a, count): return (((a << count) | (a >> (32 -count)))&0xffffffff) #之一轮 A = (B+ shift((A+F(B,C,D)+M[0]+T[1]) &0xffffffff,7) ) & 0xffffffff D = (A+shift((D+F(A,B,C)+M[1]+T[2]) &0xffffffff ,12) )& 0xffffffff C = (D+shift((C+F(D,A,B)+M[2]+T[3]) &0xffffffff,17) ) &0xffffffff B = (C+shift((B+F(C,D,A)+M[3]+T[4]) &0xffffffff,22) )&0xffffffff A = (B+shift((A+F(B,C,D)+M[4]+T[5]) &0xffffffff,7) )&0xffffffff D = (A+shift((D+F(A,B,C)+M[5]+T[6])&0xffffffff,12) )&0xffffffff C = (D+shift((C+F(D,A,B)+M[6]+T[7]) &0xffffffff,17) )&0xffffffff B = (C+shift((B+F(C,D,A)+M[7]+T[8]) &0xffffffff,22) )&0xffffffff A = (B+shift((A+F(B,C,D)+M[8]+T[9])&0xffffffff,7) )&0xffffffff D = (A+shift((D+F(A,B,C)+M[9]+T[10])&0xffffffff,12) )&0xffffffff C = (D+shift((C+F(D,A,B)+M[10]+T[11])&0xffffffff,17) )&0xffffffff B = (C+shift((B+F(C,D,A)+M[11]+T[12])&0xffffffff,22) )&0xffffffff A = (B+shift((A+F(B,C,D)+M[12]+T[13])&0xffffffff,7) )&0xffffffff D = (A+shift((D+F(A,B,C)+M[13]+T[14])&0xffffffff,12) )&0xffffffff C = (D+shift((C
+F(D,A,B)+M[14]+T[15])&0xffffffff,17) )&0xffffffff        B = (C+shift((B+F(C,D,A)+M[15]+T[16])&0xffffffff,22) )&0xffffffff         #第二轮        A = (B+shift((A+G(B,C,D)+M[1]+T[17])&0xffffffff,5) )&0xffffffff        D = (A+shift((D+G(A,B,C)+M[6]+T[18]) &0xffffffff,9) )&0xffffffff        C = (D+shift((C+G(D,A,B)+M[11]+T[19])&0xffffffff,14) )&0xffffffff        B = (C+shift((B+G(C,D,A)+M[0]+T[20])&0xffffffff,20) )&0xffffffff        A = (B+shift((A+G(B,C,D)+M[5]+T[21])&0xffffffff,5) )&0xffffffff        D = (A+shift((D+G(A,B,C)+M[10]+T[22])&0xffffffff,9) )&0xffffffff        C = (D+shift((C+G(D,A,B)+M[15]+T[23])&0xffffffff,14) )&0xffffffff        B = (C+shift((B+G(C,D,A)+M[4]+T[24])&0xffffffff,20) )&0xffffffff        A = (B+shift((A+G(B,C,D)+M[9]+T[25])&0xffffffff,5) )&0xffffffff        D = (A+shift((D+G(A,B,C)+M[14]+T[26])&0xffffffff,9) )&0xffffffff        C = (D+shift((C+G(D,A,B)+M[3]+T[27])&0xffffffff,14) )&0xffffffff        B = (C+shift((B+G(C,D,A)+M[8]+T[28])&0xffffffff,20) )&0xffffffff        A = (B+shift((A+G(B,C,D)+M[13]+T[29])&0xffffffff,5) )&0xffffffff        D = (A+shift((D+G(A,B,C)+M[2]+T[30])&0xffffffff,9) )&0xffffffff        C = (D+shift((C+G(D,A,B)+M[7]+T[31])&0xffffffff,14) )&0xffffffff        B = (C+shift((B+G(C,D,A)+M[12]+T[32])&0xffffffff,20))&0xffffffff        #第三轮        A = (B+shift((A+H(B,C,D)+M[5]+T[33])&0xffffffff,4) )&0xffffffff        D = (A+shift((D+H(A,B,C)+M[8]+T[34])&0xffffffff,11) )&0xffffffff        C = (D+shift((C+H(D,A,B)+M[11]+T[35])&0xffffffff,16) )&0xffffffff        B = (C+shift((B+H(C,D,A)+M[14]+T[36])&0xffffffff,23) )&0xffffffff        A = (B+shift((A+H(B,C,D)+M[1]+T[37])&0xffffffff,4) )&0xffffffff        D = (A+shift((D+H(A,B,C)+M[4]+T[38])&0xffffffff,11) )&0xffffffff        C = (D+shift((C+H(D,A,B)+M[7]+T[39])&0xffffffff,16) )&0xffffffff        B = (C+shift((B+H(C,D,A)+M[10]+T[40])&0xffffffff,23) )&0xffffffff        A = (B+shift((A+H(B,C,D)+M[13]+T[41])&0xffffffff,4) )&0xffffffff        D = (A+shift((D+H(A,B,C)+M[0]+T[42])&0xffffffff,11) )&0xffffffff        C = (D+shift((C+H(D,A,B)+M[3]+T[43])&0xffffffff,16) )&0xffffffff        B = (C+shift((B+H(C,D,A)+M[6]+T[44])&0xffffffff,23) )&0xffffffff        A = (B+shift((A+H(B,C,D)+M[9]+T[45])&0xffffffff,4) )&0xffffffff        D = (A+shift((D+H(A,B,C)+M[12]+T[46])&0xffffffff,11) )&0xffffffff        C = (D+shift((C+H(D,A,B)+M[15]+T[47])&0xffffffff,16) )&0xffffffff        B = (C+shift((B+H(C,D,A)+M[2]+T[48])&0xffffffff,23))&0xffffffff        #第四轮        A = (B+shift((A+I(B,C,D)+M[0]+T[49])&0xffffffff,6) )&0xffffffff        D = (A+shift((D+I(A,B,C)+M[7]+T[50])&0xffffffff,10) )&0xffffffff        C = (D+shift((C+I(D,A,B)+M[14]+T[51])&0xffffffff,15) )&0xffffffff        B = (C+shift((B+I(C,D,A)+M[5]+T[52])&0xffffffff,21) )&0xffffffff        A = (B+shift((A+I(B,C,D)+M[12]+T[53])&0xffffffff,6) )&0xffffffff        D = (A+shift((D+I(A,B,C)+M[3]+T[54])&0xffffffff,10) )&0xffffffff        C = (D+shift((C+I(D,A,B)+M[10]+T[55])&0xffffffff,15) )&0xffffffff        B = (C+shift((B+I(C,D,A)+M[1]+T[56])&0xffffffff,21) )&0xffffffff        A = (B+shift((A+I(B,C,D)+M[8]+T[57])&0xffffffff,6) )&0xffffffff        D = (A+shift((D+I(A,B,C)+M[15]+T[58])&0xffffffff,10) )&0xffffffff        C = (D+shift((C+I(D,A,B)+M[6]+T[59])&0xffffffff,15) )&0xffffffff        B = (C+shift((B+I(C,D,A)+M[13]+T[60])&0xffffffff,21) )&0xffffffff        A = (B+shift((A+I(B,C,D)+M[4]+T[61])&0xffffffff,6) )&0xffffffff        D = (A+shift((D+I(A,B,C)+M[11]+T[62])&0xffffffff,10) )&0xffffffff        C = (D+shift((C+I(D,A,B)+M[2]+T[63])&0xffffffff,15) )&0xffffffff        B = (C+shift((B+I(C,D,A)+M[9]+T[64])&0xffffffff,21))&0xffffffff        A = (A + INPUT_A) & 0xffffffff        B = (B + INPUT_B) & 0xffffffff        C = (C + INPUT_C) & 0xffffffff        D = (D + INPUT_D) & 0xffffffff            def show_result(A, B, C, D):        result = "";        mya = [hex(A)[2:len(hex(A)[2:]) if hex(A).find('L') == -1 else -1].rjust(8, '0')[k:k+2] for k in xrange(0, 8, 2)][::-1]        myb = [hex(B)[2:len(hex(B)[2:]) if hex(B).find('L') == -1 else -1].rjust(8, '0')[k:k+2] for k in xrange(0, 8, 2)][::-1]        myc = [hex(C)[2:len(hex(C)[2:]) if hex(C).find('L') == -1 else -1].rjust(8, '0')[k:k+2] for k in xrange(0, 8, 2)][::-1]        myd = [hex(D)[2:len(hex(D)[2:]) if hex(D).find('L') == -1 else -1].rjust(8, '0')[k:k+2] for k in xrange(0, 8, 2)][::-1]        return ''.join(mya + myb + myc + myd)    return show_result(A, B, C, D);            print my_md5_extend('571580b26c65f306376d4f64e53cb5c7', 15 + len('adminadmin'), 'nb'); def my_md5(mystring):    #之一步填充    #mystring = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'    myord =map(ord, mystring);#转化成为16进制的array    myord_length = len(myord) * 8;    myord.append(0x80);    while (len(myord) * 8 + 64 )% 512 != 0:        myord.append(0x00);    #第二步添加长度    myord_length = myord_length % (2 ** 64);        myord_length = hex(myord_length);        myord_length = myord_length[2:len(myord_length)-1].rjust(16, '0');        myord_length = [int(format(myord_length[i:i+2]), 16) for i in xrange(0, len(myord_length), 2)][::-1]        myord.extend(myord_length)    #对每一个512位做处理    A = 0x67452301    B = 0xefcdab89    C = 0x98badcfe    D = 0x10325476    F = lambda x,y,z:((x&y)|((~x)&z))      G = lambda x,y,z:((x&z)|(y&(~z)))      H = lambda x,y,z:(x^y^z)      I = lambda x,y,z:(y^(x|(~z)))      T_func = lambda i: int(4294967296*abs(math.sin(i))) & 0xffffffff    T = [T_func(i) for i in xrange(1, 65)]    T.insert(0 , 0)#过错的方位    for i in xrange(0, len(myord) / 64):        INPUT_A = A        INPUT_B = B        INPUT_C = C        INPUT_D = D                M = [ (myord[i * 64 + j + 3] <<24) +  (myord[i * 64 + j + 2] << 16 )+ (myord[i * 64 + j + 1] << 8) + (myord[i * 64 + j + 0] )             for j in xrange(0, 64, 4)]        def shift(a, count):            return (((a << count) | (a >> (32 -count)))&0xffffffff)                #之一轮        A = (B+ shift((A+F(B,C,D)+M[0]+T[1]) &0xffffffff,7) ) & 0xffffffff        D = (A+shift((D+F(A,B,C)+M[1]+T[2]) &0xffffffff ,12) )& 0xffffffff        C = (D+shift((C+F(D,A,B)+M[2]+T[3]) &0xffffffff,17) ) &0xffffffff        B = (C+shift((B+F(C,D,A)+M[3]+T[4]) &0xffffffff,22) )&0xffffffff        A = (B+shift((A+F(B,C,D)+M[4]+T[5]) &0xffffffff,7) )&0xffffffff        D = (A+shift((D+F(A,B,C)+M[5]+T[6])&0xffffffff,12) )&0xffffffff        C = (D+shift((C+F(D,A,B)+M[6]+T[7]) &0xffffffff,17) )&0xffffffff        B = (C+shift((B+F(C,D,A)+M[7]+T[8]) &0xffffffff,22) )&0xffffffff         A = (B+shift((A+F(B,C,D)+M[8]+T[9])&0xffffffff,7) )&0xffffffff        D = (A+shift((D+F(A,B,C)+M[9]+T[10])&0xffffffff,12) )&0xffffffff        C = (D+shift((C+F(D,A,B)+M[10]+T[11])&0xffffffff,17) )&0xffffffff        B = (C+shift((B+F(C,D,A)+M[11]+T[12])&0xffffffff,22) )&0xffffffff        A = (B+shift((A+F(B,C,D)+M[12]+T[13])&0xffffffff,7) )&0xffffffff        D = (A+shift((D+F(A,B,C)+M[13]+T[14])&0xffffffff,12) )&0xffffffff        C = (D+shift((C+F(D,A,B)+M[14]+T[15])&amp *** 环境总是在改动,添加和删去机器,运用补丁,设备运用程序,更改防火墙规矩等等,这些都会对安全情况发生潜在影响。 侵犯警报和防病毒警告需求引起留心,甚至看似良性的工作(如登录,服务联接和文件同享访问)也或许与对手活动相相关。;0xffffffff,17) )&0xffffffff        B = (C+shift((B+F(C,D,A)+M[15]+T[16])&0xffffffff,22) )&0xffffffff         #第二轮        A = (B+shift((A+G(B,C,D)+M[1]+T[17])&0xffffffff,5) )&0xffffffff        D = (A+shift((D+G(A,B,C)+M[6]+T[18]) &0xffffffff,9) )&0xffffffff        C = (D+shift((C+G(D,A,B)+M[11]+T[19])&0xffffffff,14) )&0xffffffff        B = (C+shift((B+G(C,D,A)+M[0]+T[20])&0xffffffff,20) )&0xffffffff        A = (B+shift((A+G(B,C,D)+M[5]+T[21])&0xffffffff,5) )&0xffffffff        D = (A+shift((D+G(A,B,C)+M[10]+T[22])&0xffffffff,9) )&0xffffffff        C = (D+shift((C+G(D,A,B)+M[15]+T[23])&0xffffffff,14) )&0xffffffff        B = (C+shift((B+G(C,D,A)+M[4]+T[24])&0xffffffff,20) )&0xffffffff        A = (B+shift((A+G(B,C,D)+M[9]+T[25])&0xffffffff,5) )&0xffffffff        D = (A+shift((D+G(A,B,C)+M[14]+T[26])&0xffffffff,9) )&0xffffffff        C = (D+shift((C+G(D,A,B)+M[3]+T[27])&0xffffffff,14) )&0xffffffff        B = (C+shift((B+G(C,D,A)+M[8]+T[28])&0xffffffff,20) )&0xffffffff        A = (B+shift((A+G(B,C,D)+M[13]+T[29])&0xffffffff,5) )&0xffffffff        D = (A+shift((D+G(A,B,C)+M[2]+T[30])&0xffffffff,9) )&0xffffffff        C = (D+shift((C+G(D,A,B)+M[7]+T[31])&0xffffffff,14) )&0xffffffff        B = (C+shift((B+G(C,D,A)+M[12]+T[32])&0xffffffff,20))&0xffffffff        #第三轮        A = (B+shift((A+H(B,C,D)+M[5]+T[33])&0xffffffff,4) )&0xffffffff        D = (A+shift((D+H(A,B,C)+M[8]+T[34])&0xffffffff,11) )&0xffffffff        C = (D+shift((C+H(D,A,B)+M[11]+T[35])&0xffffffff,16) )&0xffffffff        B = (C+shift((B+H(C,D,A)+M[14]+T[36])&0xffffffff,23) )&0xffffffff        A = (B+shift((A+H(B,C,D)+M[1]+T[37])&0xffffffff,4) )&0xffffffff        D = (A+shift((D+H(A,B,C)+M[4]+T[38])&0xffffffff,11) )&0xffffffff        C = (D+shift((C+H(D,A,B)+M[7]+T[39])&0xffffffff,16) )&0xffffffff        B = (C+shift((B+H(C,D,A)+M[10]+T[40])&0xffffffff,23) )&0xffffffff        A = (B+shift((A+H(B,C,D)+M[13]+T[41])&0xffffffff,4) )&0xffffffff        D = (A+shift((D+H(A,B,C)+M[0]+T[42])&0xffffffff,11) )&0xffffffff        C = (D+shift((C+H(D,A,B)+M[3]+T[43])&0xffffffff,16) )&0xffffffff        B = (C+shift((B+H(C,D,A)+M[6]+T[44])&0xffffffff,23) )&0xffffffff        A = (B+shift((A+H(B,C,D)+M[9]+T[45])&0xffffffff,4) )&0xffffffff        D = (A+shift((D+H(A,B,C)+M[12]+T[46])&0xffffffff,11) )&0xffffffff        C = (D+shift((C+H(D,A,B)+M[15]+T[47])&0xffffffff,16) )&0xffffffff        B = (C+shift((B+H(C,D,A)+M[2]+T[48])&0xffffffff,23))&0xffffffff        #第四轮        A = (B+shift((A+I(B,C,D)+M[0]+T[49])&0xffffffff,6) )&0xffffffff        D = (A+shift((D+I(A,B,C)+M[7]+T[50])&0xffffffff,10) )&0xffffffff        C = (D+shift((C+I(D,A,B)+M[14]+T[51])&0xffffffff,15) )&0xffffffff        B = (C+shift((B+I(C,D,A)+M[5]+T[52])&0xffffffff,21) )&0xffffffff        A = (B+shift((A+I(B,C,D)+M[12]+T[53])&0xffffffff,6) )&0xffffffff        D = (A+shift((D+I(A,B,C)+M[3]+T[54])&0xffffffff,10) )&0xffffffff        C = (D+shift((C+I(D,A,B)+M[10]+T[55])&0xffffffff,15) )&0xffffffff        B = (C+shift((B+I(C,D,A)+M[1]+T[56])&0xffffffff,21) )&0xffffffff        A = (B+shift((A+I(B,C,D)+M[8]+T[57])&0xffffffff,6) )&0xffffffff        D = (A+shift((D+I(A,B,C)+M[15]+T[58])&0xffffffff,10) )&0xffffffff        C = (D+shift((C+I(D,A,B)+M[6]+T[59])&0xffffffff,15) )&0xffffffff        B = (C+shift((B+I(C,D,A)+M[13]+T[60])&0xffffffff,21) )&0xffffffff        A = (B+shift((A+I(B,C,D)+M[4]+T[61])&0xffffffff,6) )&0xffffffff        D = (A+shift((D+I(A,B,C)+M[11]+T[62])&0xffffffff,10) )&0xffffffff        C = (D+shift((C+I(D,A,B)+M[2]+T[63])&0xffffffff,15) )&0xffffffff        B = (C+shift((B+I(C,D,A)+M[9]+T[64])&0xffffffff,21))&0xffffffff        A = (A + INPUT_A) & 0xffffffff        B = (B + INPUT_B) & 0xffffffff        C = (C + INPUT_C) & 0xffffffff        D = (D + INPUT_D) & 0xffffffff            def show_result(A, B, C, D):        result = "";        mya = [hex(A)[2:len(hex(A)[2:]) if hex(A).find('L') == -1 else -1].rjust(8, '0')[k:k+2] for k in xrange(0, 8, 2)][::-1]        myb = [hex(B)[2:len(hex(B)[2:]) if hex(B).find('L') == -1 else -1].rjust(8, '0')[k:k+2] for k in xrange(0, 8, 2)][::-1]        myc = [hex(C)[2:len(hex(C)[2:]) if hex(C).find('L') == -1 else -1].rjust(8, '0')[k:k+2] for k in xrange(0, 8, 2)][::-1]        myd = [hex(D)[2:len(hex(D)[2:]) if hex(D).find('L') == -1 else -1].rjust(8, '0')[k:k+2] for k in xrange(0, 8, 2)][::-1]        return ''.join(mya + myb + myc + myd)    return show_result(A, B, C, D);    

 

 

4)结语

在做ctf标题的时分加强对原理的了解,和着手实践,文字总结的 *** 能够协助回忆。

 

 

参阅文献:

【1】http://blog.csdn.net/adidala/article/details/28677393

【2】https://www.rfc-editor.org/rfc/pdfrfc/rfc1321.txt.pdf

【3】http://www.freebuf.com/articles/web/69264.html

课程思政:Md5扩展进犯的原理和使用

案例一:user = 'XXXX' 图5: 抉择操作系统版其他
课程思政
*** Md5扩展攻击的原理和应用

课程思 *** 费版的WinHex支撑对硬盘文件的写入操作,能够用来批改时间信息。5、文件夹特色的改动规矩获取文件特色· 传输的数据有多活络?只是web流量吗?

debugserver-@(#)PROGRAM:debugserver PROJECT:debugserver-360.0.26.14虽然内核回调能够阻遏对进程的直接批改,也能阻遏用户在进程启动时损坏进程的完整性,可是内核回调对工作时的DLL注入侵犯(如通过COM结束的DLL注入)显得有点乏力。进程加固机制需求承认哪些模块能够被载入到进程中。对可载入模块的选择首要是通过Authenticode代码签名来结束。

[1][2][3][4][5][6]黑客接单网

因为我们要 *** 后门,所以不勾选的选项,如图3

按照规划,全部 *** B央求还包括用于身份验证目的的NTLM hashes。这个NTLM hashes将被记载在远程 *** B服务器的日志中。可用的东西能够破解这个散列并恢复原始暗码。

课程思政

带回显SSRFGoogle曾检验通过减少FIQ Debugger的功能来批改缝隙CVE-2017-0510,在近期的版别中,当途径完全加载之后现已无法导出注册信息或是通过oem-N参数来重启设备了(防止设备重启进入HBOOT或恢复出厂设置):当这个功用设备结束后,你能在开端菜单中发起CMAK。它的图标如下:

然后qemu中ctrl+alt+1切换回去,然后进入usr目录,挂载驱动后工作poc程序。下面是转化的进程:

[1][2]黑客接单网

自2016年初以来,现已有多家医院和医疗机构成为了勒索软件的受害者,包括MedStar Health、堪萨斯心脏病医院和好莱坞长老会医院在内。值得一提的是,个人身份辨认信息(PII)和医疗记载的价值要比信用卡数据高出10至20倍之多。戴尔旗下的 *** 安全公司SecureWorks发现, *** 犯罪分子出售一份健康保险凭据能够赚20至40美元,而一份美国信用卡数据只能卖1到2美元。Ben-Simon标明:“现在暗盘上到处都有PII在售,犯罪分子能够运用这些记载来编造身份信息,然后请求新的信用卡或编造缴税申报信息。除此之外,侵犯者还能够运用这些信息访问政策用户的银行账户以及信用卡账户,所以医疗记载肯定是 *** 侵犯者的首要政策。”在点击工作之后,回调触发,Empire在受害者机器上发起一个新的agent:Md5扩展攻击的原理和应用

课程思政
Md5扩展攻击的原理和应用
Signature condition="contains">windowsSignature>

});LC_TIME="zh_CN.UTF-8"这算是实在靠谱的方案:ATM Skimmer也就是ATM分离器。我们去ATM机取钱的时分,喇叭广播反复强调:“请注意插卡口是否有反常情况”。这儿所谓的“反常情况”就是指ATM Skimmer了:即编造一个插卡口,获取卡片信息。课程思政

一、Apple开发建议Md5扩展攻击的原理和应用

发现缝隙./rssocks-vv- *** akachu.cn:8888图1:在履行前该发射器出现在Temp文件夹中

该dll通过获取 *** 的特有的类名 “5B3838F5-0C81-46D9-A4C0-6EA28CA3E942″来获取一段带有我们 *** 号的字符串,格式形如:”qqexchangewnd_shortcut_prefix_ *** 号”,在获取到字符串后,木马作者以”prefix_” 为鸿沟,通过字符串的拷贝获取到 *** 号

X-User-Agent: redsonic
本文标题:课程思政:Md5扩展进犯的原理和使用

相关文章

微信早上好图片是黑客吗(发送早上好图片会有黑客)

微信早上好图片是黑客吗(发送早上好图片会有黑客)

本文导读目录: 1、发早上好有黑客介入是真的吗? 2、早上好图䅁是黑客组织制作的吗?, 3、微信发早上好丶晚上好视频图片会中病毒吗? 4、关于早上好图片和视频是黑客设计的吗?转发早上好图片...

鹿特丹大学入学门槛高吗(鹿特丹大学如何申请

鹿特丹大学入学门槛高吗(鹿特丹大学如何申请

位于着名的现代贸易港口城市鹿特丹的鹿特丹伊拉斯姆斯大学,建立在20世纪初期,荷兰当时的工商业人士意识到教育的重要性,于是在大家的支持下,创办了私立的荷兰经济学院。在1973年的时候,鹿特丹医学院和荷兰...

怎么能实时窃听老公跟他人的通话内容

2020除夕夜已然到来,今年可能会很少的聚会和拜年,但是通过朋友圈说说的方式给亲朋好友送上除夕夜的祝福是可以的,说出新的新年愿望,适合除夕夜发的朋友圈文案,除夕夜发的说说句子,下面友谊长存带来介绍。...

功能-场景矩阵,产品创新奇招(以手机输入法为例)

功能-场景矩阵,产品创新奇招(以手机输入法为例)

在对产物的创新点举办脑子风暴时,思维倒是发散,可容易没有层次,且深度不敷,本文实验办理上述问题。本文以先容创新要领为主,输入法仅用于举例。作者并非输入法产物司理,行文中若有对输入法产物领略毛病之处,请...

剑与远征7月兑换码奖励有哪些 剑与远征7月兑换码大全汇总分享

剑与远征7月兑换码奖励有哪些 剑与远征7月兑换码大全汇总分享

七月到了,不少游戏的福利也更新了,剑与远征给玩家的福利力度是很大的,每个月都有礼包兑换码给大家,那么剑与远征7月礼包兑换码更新了吗?本次就为大家带来了剑与远征7月礼包码大全,也是7月有效礼包码汇总,非...

齐云山导游词(中国道教四大名山之齐云山)

齐云山导游词(中国道教四大名山之齐云山) 安徽齐云山位于安徽省休宁县城西约15公里处,古称白岳,与黄山南北相望,风景绮丽,因最高峰廊崖“一石插天,与云并齐”而得名,齐云山古称“白岳”,是一处...