哈希碰撞

哈希

  • 1、任意长度的输入,通过哈希算法,得到固定长度的输出
  • 2、不同的输入会哈希成相同的输出
  • 3、不能从输出倒推输入(但是目前md5可以破解)

哈希函数有md5、sha1、sha256

哈希碰撞

import hashlib
print hashlib.sha256("hello").hexdigest()
print hashlib.md5("hello").hexdigest()
print hashlib.sha1("hello").hexdigest()

输出
哈希碰撞_第1张图片
王小云院士提出的哈希函数碰撞攻击理论
在一个任意的prefix后加上不同的padding
使其md5值一样
fastcoll hashclash
sha1 clash

例题1、
如果要求满足特定条件如下

salt="123456"
hashlib.sha256(salt+x).hexdigest()[0:6]=="123456"

salt="123456"
import string
import hashlib
for i1 in string.printable:
    for i2 in string.printable:
        for i3 in string.printable:
            for i4 in string.printable:
                if hashlib.sha256(salt+i1+i2+i3+i4).hexdigest()[0:6]=="123456":
                    print salt+i1+i2+i3+i4

输出
哈希碰撞_第2张图片

验证
哈希碰撞_第3张图片
有两个不同的字符串却有相同的md5值吗?
有,但是很长,概率很小
链接

哈希长度扩展攻击

jarvisoj web题 flag在管理员手里
我开御剑扫面只扫描到index.php 但是并没有下载

求一个源码泄露扫描工具!!!蟹蟹蟹蟹

然后看别人的wp知道了是index.php~ 有个波浪号
然后放到kali 里 后缀给成.swp
然后vim -r index.php_.swp
试过index.php.swp 不行

哈希碰撞_第4张图片




Web 350




	Welcome Admin. Your flag is 
		} else {
			echo "

Only Admin can see the flag!!

"; } ?>

我们需要达成以下条件

if ($role==="admin" && $hsh === md5($salt.strrev($_COOKIE["role"]))) 

但是我们不知道salt的值是多少
所以必须通过hash扩展攻击来计算

在cookie中有两个值 role 、 hsh
其中 role 经过反序列化得到 $role

我们要
1、修改$role 为 admin
2、计算新的hsh 满足以下条件

 $hsh === md5($salt.strrev($_COOKIE["role"]))

首先
F12打开控制台 分析cookie
哈希碰撞_第5张图片

原来 s:5:"guest"; 
目标 s:5:"admin";

计算hsh 是salt+role在cookie中翻转字符串 (strrev()函数)后的MD5

先安装hashpump

我是在kali 里

sudo apt-get install git
git clone https://github.com/bwall/HashPump.git
apt-get install g++ libssl-dev
cd HashPump
make
sudo make install

其中第三条 可能会报错 E:/%20无法定位软件包%20libssl-dev
参考解决办法
遇到的问题 :
1、etc 在 / 目录下
2、查看kali版本

cat /etc/issue
uname -a

哈希碰撞_第6张图片
3、vim ~/.vimrc set nu 设置行号
命令模式下 比如

 :2,13 >  第2行到第13行缩进
 :2,13 d  删除 2到13行 
 感觉:dG 不是很好用 

4、换源成功可以install了

vi /etc/apt/sources.list
右键粘贴比命令模式下按p有用
deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib

apt-get update
apt-get install g++ libssl-dev

哈希碰撞_第7张图片

先创建一个py文件 然后设置下 以便粘贴保持格式

vim hsh.py
:set paste     

代码1如下

import os
import requests
import urllib
def rev(s):
	i=0
	r=""
	while i

运行

python hsh.py

输出
哈希碰撞_第8张图片
在这里插入图片描述

代码2如下 参考脚本链接

import requests,hashpumpy,urllib


def attack():
    url = 'http://web.jarvisoj.com:32778/'

    old_cookie = '3a4727d57463f122833d9e732f94e4e0'
    str1 = 's:5:"guest";'
    str2 = 's:5:"admin";'
    str1 = str1[::-1]                           #倒过来,这道题要role的值反过来求md5
    str2 = str2[::-1]

    for i in range(1,20):                       #用于爆破salt的长度
        new_cookie,message = hashpumpy.hashpump(old_cookie,str1,str2,i)
        payload = {'role':urllib.parse.quote(message[::-1]),'hsh':new_cookie}           #quote()可以把 \x00 变成 %00
        ans = requests.get(url,cookies = payload)
        print(i)
        print(ans.text)
        if 'welcome' in ans.text:
            print(ans.text)

#print(urllib.parse.quote('\x00'))
attack()

但是却报错 显示没有parse这个属性 网上解决办法是import request
但是还是报错
哈希碰撞_第9张图片

你可能感兴趣的:(Crypto)