Iuhrey

一个常年被吊打的Web手 一个唱歌不好指弹垃圾的吉他手

0x04 在蓝鲸打卡所学到的基本操作(Web篇)

Hash长度拓展攻击

今天来归纳一波比较难理解的Hash长度拓展攻击。
首先在了解如何攻击之前,先理解一下sha1是如何进行加密的:
我第一次看到这个流程图的时候也是一脸懵逼,这对于一个密码学刚刚入门的人来说真的是太难了,花了很久的时间我才明白这个的原理:
首先是处理输入的字符串,如果输入的字符串字节数(注意!是字节数!)除余64是56,那么在后8位填充长度描述符具体用bit表示(这里字节的长度要用16进制来表示,前后颠倒之后再填充进去,也是常说的小端储存),如果除余之后不是56,那么会自动填充一个\x80和N个\x00知道余数为56,然后加上后八位的长度描述符,可以分成多少组64位就进行多少次的复杂操作,具体的算法就不细说了。
在处理的时候,会根据四组确定值的初始值(也称初始向量IV值)来计算这一轮的sha1值,然后再根据计算出的sha1值来替代初始的那四组值,再进行下一轮的计算,如果最终生成64位的sha1值那么这个就作为最终的sha1值输出。
接下来就是如何利用这个机制了,我们只需要知道如下几个条件就可以进行攻击了:
第一步,把我们知道的salt和message经过sha1之后的值拆分为四组,每一组分别把前后的值颠倒,作为即将加密的IV值。
第二步,打开计算MD5的脚本,把初始向量IV值更改为上一步得到的IV值,输入message,填充至56位,然后再加上长度描述符,最后加上要拓展攻击的字符,运行脚本,输出的结果就为salt+拓展攻击的md5值。
这里是MD5pad.py的脚本,集合了上述两步直接出结果。具体用法参照下文。
现在来实战看看:

题目的意思就是让你传入两个变量的值,role和hash,使得hash的值是salt加上你输入role的MD5,具体操作如下:随后把role和hash的值post一下就行了。
这一道是实验吧的题目:
抓包把可疑参数source改为1,就得到了如图所示的内容:分析代码不难看出要构造一个getmein参数和salt加username和password的MD5值相等,用脚本跑一下就出来了。把参数一一对应post过去即可。

本站总访问量