hash长度扩展攻击

这里面就放一张百度百科的解释吧,emmm
反正我是看不懂还是做一下题来巩固一下吧
CTF中的hash长度攻击

进入网页你会发现页面显示
??

我这里没有看到什么可以利用的,抓了一下包也没有什么有可以利用的东西,扫一下目录看看,这里面我用的是一个专门扫描敏感文件的工具.有兴趣的同学可以去看一下.
工具在这里
使用方法:python3 1.py url 16 32
OK通过扫描我们发现一个index.php~的文件,下载下来其实就是一个linux意外退出的一个交换文件,emmmmm.
?
在linux中使用 vim -r 目标文件可以进行恢复
恢复后的源码:

<html>
<head>
<title>Web 350</title>
<style type="text/css">
    body {
        background:gray;
        text-align:center;
    }
</style>
</head>
<body>
    <?php
        $auth = false;
        $role = "guest";
        $salt =
        if (isset($_COOKIE["role"])) {
            $role = unserialize($_COOKIE["role"]);
            $hsh = $_COOKIE["hsh"];
            if ($role==="admin" && $hsh === md5($salt.strrev($_COOKIE["role"]))) {
                $auth = true;
            } else {
                $auth = false;
            }
        } else {
            $s = serialize($role);
            setcookie('role',$s);
            $hsh = md5($salt.strrev($s));
            setcookie('hsh',$hsh);
        }
        if ($auth) {
            echo "<h3>Welcome Admin. Your flag is
        } else {
            echo "<h3>Only Admin can see the flag!!</h3>";
        }
    ?>

</body>
</html>
下面来对代码的逻辑进行一下分析。
首先要想获取flag就要保证role反序列化的值为admin(这个好弄就是在burp里面改一下就行了),但是还要保证hsh===md5($salt.strrev($_COOKIE["role"]),hsh已经给我们了,你看看下面的代码逻辑,他是md5($salt.strrev($s)),而$s的值一开始就是guest,这里面就是将它给字符串给序列化后在反转一下整的。
首先我们先看一下我们的手中的条件,首先我们需要将role改为admin,这个是不用说的,其实我们还有让hsh这个hash值等于md5($salt.strrev($_COOKIE["role"])),,这个就要用到hash扩展攻击了。
下面讲一下hash和扩展攻击的利用方法,其一就是要知道salt的长度(这里面我们可以爆破一下),然后还有知道一个salt后面的string的值以及md5之后的hash值。
这里面我们刚好知道hsh的初始值
$s = serialize($role);//$role的初始值为guest
setcookie('role',$s);
$hsh = md5($salt.strrev($s));
setcookie('hsh',$hsh);
既然我们得到了这个一个hash值,那么我们就可以添加任意的字符串,那么我们添加的字符串就是admin不就好了,这样不仅可以完成条件role='admin',又因为hash长度扩展攻击,所以hsh==~~md5($salt.strrev($_COOKIE["role"])),大概的原理就是你在原来的基础上(已经知道hash值)在添加的字符串进行的hash加密是可以计算出来的。(emmmmmm,菜鸡一个有可能说的很差,见谅,见谅).
这里面我们用python写出爆破脚本(因为salt的长度未知)

哈希长度扩展攻击的实现

url="http://web.jarvisoj.com:32778/"
string1=';"nimda":5:s'  #第一个我们需要添加的字符串
string2=';"tseug":5:s'
hash="3a4727d57463f122833d9e732f94e4e0"
for test in range(1,25) :
    hash_exp,message=hashpumpy.hashpump(hash,string2,string1,test)
    #print(message)
    payload={'role':urllib.parse.quote(message[::-1]),'hsh':hash_exp}
    print(test,payload)
    Mikasa=requests.get(url,cookies=payload).text
    if "Welcome" in Mikasa :
        print(Mikasa)
    #payload={'role':}
    ```

因为是倒叙进行的加密,所以我们也要倒叙的加密,当然也可以用hashpump这个工具来实现。
结语
感觉自己太差劲了,讲的也不算好,哎!还是太菜

原文地址:https://www.cnblogs.com/Mikasa-Ackerman/p/hash-hack.html

时间: 2024-10-30 00:10:40

hash长度扩展攻击的相关文章

实验吧——让我进去(hash长度扩展攻击)

题目地址:http://ctf5.shiyanbar.com/web/kzhan.php 在页面源码没发现什么,于是用burp进行抓包重放 看到有setcookie,于是重新刷新页面拦截数据包(这次才会带上cookie) 这个source=0 一看就很可疑,改成source=1,就得到了源码 1 <?php 2 $flag = "XXXXXXXXXXXXXXXXXXXXXXX"; 3 $secret = "XXXXXXXXXXXXXXX"; // This s

hash哈希长度扩展攻击解析(记录一下,保证不忘)

起因 这是 ISCC 上的一道题目,抄 PCTF 的,并且给予了简化.在利用简化过的方式通过后,突然想起利用哈希长度扩展攻击来进行通关.哈希长度扩展攻击是一个很有意思的东西,利用了 md5.sha1 等加密算法的缺陷,可以在不知道原始密钥的情况下来进行计算出一个对应的 hash 值. 这里是 ISCC 中题目中的 admin.php 的算法: $auth = false; if (isset($_COOKIE["auth"])) { $auth = unserialize($_COOK

从零学习哈希长度扩展攻击

哈希长度扩展攻击,利用了md5.sha1等加密算法的缺陷,可以在不知道原始密钥的情况下来进行计算出一个对应的hash值. 引言 最开始出现好像是在PCTF2014上最近做题突然看见了先来看下代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 <?php $auth = false; $role = "guest"; $salt = if (isset($_COOKIE["role"

哈希长度扩展攻击的简介以及HashPump安装使用方法

哈希长度扩展攻击(hash length extension attacks)是指针对某些允许包含额外信息的加密散列函数的攻击手段.该攻击适用于在消息与密钥的长度已知的情形下,所有采取了 H(密钥 ∥ 消息) 此类构造的散列函数.MD5和SHA-1等基于Merkle–Damgård构造的算法均对此类攻击显示出脆弱性. 如果一个应用程序是这样操作的: 准备了一个密文和一些数据构造成一个字符串里,并且使用了MD5之类的哈希函数生成了一个哈希值(也就是所谓的signature/签名) 让攻击者可以提交

MD5加密及Hash长度拓展攻击【通俗易懂】

先放一个简单点的利用了Hash长度拓展攻击的题目 if($COOKIE["getmein"] === md5($secret . urldecode($username . $password))) { echo "Congratulations! You are a registered user.\n"; die ("The flag is ". $flag); } 在理解Hash长度拓展攻击之前需要大致了解下MD5的加密原理 MD5加密过程

Md5扩展攻击的原理和应用

*本文原创作者:Guilty and Innocent,本文属FreeBuf原创奖励计划,未经许可禁止转载 做CTF题目的过程中遇到了md5扩展攻击,参考了几篇文章,感觉写的都有些小缺陷,再发一篇文章,理解md5扩展攻击首先需要了解md5的工作原理. 1)md5的工作原理 具体参考这两篇文章 http://blog.csdn.net/adidala/article/details/28677393,算法实现有误 https://www.rfc-editor.org/rfc/pdfrfc/rfc1

C++ vector长度扩展机制的探究

源起: C++ Primer 第五版,Exercise 9.38 Write a program to explorer how vectors grow in the library you use. 环境: WIN 7 + VS 2008 32bit 测试代码: #include <iostream> #include <fstream> #include <vector> using namespace std; int main() { vector<in

10.让我进去

进入网页发现输入什么都没反应,我们还是老办法,查看源代码,发现好像也没问题,想起外部提示,查看协议发现cookie好像有问题: 修改为1试一试:: 我们进行代码审计,发现,需要通过三层if才能得到flag 1.第一次cookie里getmein是否已经设置 2.账号为admin并且密码不为admin 3.满足cookie和md5加密后的结果 前两个比较容易通过,第三个就是hash长度扩展攻击,详细内容去一下参考看看,我也看了好久的说 http://www.freebuf.com/articles

1009.CTF 题目之 WEB Writeup 通关大全 – 3

Web题目系列3 让我进去 题目链接 http://shiyanbar.com/ctf/1848 题目描述 相信你一定能拿到想要的 Hint:你可能希望知道服务器端发生了什么.. 格式:CTF{} 解题思路 用burpsuite抓包后,发现cookie里有一个字段source=0,修改为1后获取源码. 源码内容 <html> <body> <pre> $flag = "XXXXXXXXXXXXXXXXXXXXXXX"; $secret = "