flag在管理员手里-hash长度扩展攻击学习

Flag在管理员手里

主要是hash长度扩展攻击的原理,其实只要明白了md5算法的大致过程就可以容易理解。
首先题目看看要求什么条件才能获取flag

1.要求cookie中role=admin,这个简单,直接修改HTTP包内容就行。
2.要求hsh===MD5($salt.strrev($_COOKIE[“role”]))
  第二步中,salt是不知道的,但是hsh时我们传入,相当于已知的。所以这里要构造,让cookie中的role=admin,
  并且保证服务器在运算md5函数后,结果等于我们传入的hsh。    这就很清楚问题的所在了,如何在不知道salt
  的情况下,计算出一个特定的hash,对“特定”的解释就是:知道了hsh=md5($salt.strrev(';"tseug":5:s')),如何使
  得md5($salt.strrev(';{***padding}"nimda":5:s{***padding}'))=hsh1成立。

这时候就要看如何加padding了

我们先补充第一次salt+身份信息的长度,让他符合md5算的要求(64bit一组),服务器也是这么做的,只不过是服务器补足以后拿去运算,然后得到hash给我们返回hsh1。而我们补足信息后,在拼接上其他的信息,比如admin,服务器接收到以后,就会先进行和以前一样的运算,得到hsh1,然后用这个hsh1用作register,去加密下一个块(admin),然后就会计算出md5($salt+role)的值hsh2与我们传入的hsh比较。那么重点就在这里了,我们是知道hsh1的,本地也可以完成第二次hash计算,可以计算出hsh2,那么我们传入的hsh为hsh2不就过了验证吗!

辅助理解:
我们知道hash1(第一次服务器正常的身份信息),和admin(我们自己加上的嘛),那么我们做一次hash1和admin的MD5运算不就得到hash2了嘛。把hash2赋值给hsh,传入就满足了hsh=MD5(salt+role)

python有库hashpumpy实现了哈希长度扩展攻击:
Help on built-in function hashpump in module hashpumpy:
hashpump(…)
hashpump(hexdigest, original_data, data_to_add, key_length) -> (digest, message)
Arguments:
    hexdigest(str):      Hex-encoded result of hashing key + original_data.
    original_data(str):  Known data used to get the hash result hexdigest.
    data_to_add(str):    Data to append
    key_length(int):     Length of unknown data prepended to the hash

Returns:
    A tuple containing the new hex digest and the new message.

贴一段别人的脚本吧,我自己主要还是理解原理,这里salt的长度需要爆破一下

#!/usr/bin/python
# -*- coding=utf -*-
import requests,hashpumpy,urllib


def webre():
    url = 'http://web.jarvisoj.com:32778/'
    sha = '3a4727d57463f122833d9e732f94e4e0'
    string0 = ';"tseug":5:s'
    string1 = ';"nimda":5:s'
    for i in range(15):
        digest, message = hashpumpy.hashpump(sha,string0,string1,i)
        payload ={'role':urllib.quote(message[::-1]), 'hsh':digest}  # quote()用于把'\x00'都变成'%00' 这道题message需要反转一下
        print(i,payload) 
        html = requests.get(url,cookies=payload).content#提交答案 
        if 'Welcome' in html: 
            print(html)
webre()

参考链接

http://roo0.me/2017/07/01/WP-for-JarvisOJ/
https://blog.csdn.net/zpy1998zpy/article/details/80858080
https://www.freebuf.com/articles/web/69264.html
https://www.freebuf.com/articles/web/31756.html
https://www.jianshu.com/p/5342d07a6956

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值