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

题目地址:http://ctf5.shiyanbar.com/web/kzhan.php

在页面源码没发现什么,于是用burp进行抓包重放

看到有setcookie,于是重新刷新页面拦截数据包(这次才会带上cookie)

这个source=0 一看就很可疑,改成source=1,就得到了源码

 1 <?php
 2 $flag = "XXXXXXXXXXXXXXXXXXXXXXX";
 3 $secret = "XXXXXXXXXXXXXXX"; // This secret is 15 characters long for security!
 4
 5 $username = $_POST["username"];
 6 $password = $_POST["password"];
 7
 8 if (!empty($_COOKIE["getmein"])) {
 9     if (urldecode($username) === "admin" && urldecode($password) != "admin") {
10         if ($COOKIE["getmein"] === md5($secret . urldecode($username . $password))) {
11             echo "Congratulations! You are a registered user.\n";
12             die ("The flag is ". $flag);
13         }
14         else {
15             die ("Your cookies don‘t match up! STOP HACKING THIS SITE.");
16         }
17     }
18     else {
19         die ("You are not an admin! LEAVE.");
20     }
21 }
22
23 setcookie("sample-hash", md5($secret . urldecode("admin" . "admin")), time() + (60 * 60 * 24 * 7));
24
25 if (empty($_COOKIE["source"])) {
26     setcookie("source", 0, time() + (60 * 60 * 24 * 7));
27 }
28 else {
29     if ($_COOKIE["source"] != 0) {
30         echo ""; // This source code is outputted here
31     }
32 }

通读源码,知道要得到flag的条件是:提交一个post包,其包含username,password还有一个名为getmein的cookie, 而且要满足username是‘admin‘,password不是‘admin‘,而且(secret+username+password)的md5值要等于getmein,但问题是我们根本不知道secret的值,只知道secret位数为15。还有通过setcookie知道的东西是 (secret+‘admin‘+‘admin‘)的MD5值为571580b26c65f306376d4f64e53cb5c7

典型的hash长度扩展攻击,也就是如果我们知道

1.secret的长度

2.data的值

2.secret+data 的MD5值

我们就能构造出

secret+data+其他值 的MD5

想想是不是我们就可以绕过这题的验证了?

具体原理移步这里:http://www.freebuf.com/articles/web/69264.html   https://www.cnblogs.com/p00mj/p/6288337.html

自己写工具也挺麻烦,所以我就用现成的了,在kali上装了一个hashpump,用法如下

最后我们的 "其他值" 就是\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00xxx

所以我们构造post包如下

原文地址:https://www.cnblogs.com/leixiao-/p/9749792.html

时间: 2024-10-14 00:18:35

实验吧——让我进去(hash长度扩展攻击)的相关文章

hash长度扩展攻击

这里面就放一张百度百科的解释吧,emmm 反正我是看不懂还是做一下题来巩固一下吧 CTF中的hash长度攻击 进入网页你会发现页面显示 ?? 我这里没有看到什么可以利用的,抓了一下包也没有什么有可以利用的东西,扫一下目录看看,这里面我用的是一个专门扫描敏感文件的工具.有兴趣的同学可以去看一下. 工具在这里 使用方法:python3 1.py url 16 32 OK通过扫描我们发现一个index.php~的文件,下载下来其实就是一个linux意外退出的一个交换文件,emmmmm. ? 在linu

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

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

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

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

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

哈希长度扩展攻击,利用了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"

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加密过程

CTF实验吧让我进去writeup

初探题目 两个表单,我们用burp抓包试试 这时候我们发现Cookie值里有个很奇怪的值是source,这个单词有起源的意思,我们就可以猜测这个是判断权限的依据,让我们来修改其值为1,发送得到如下显示: 代码审计 发现爆出了源代码,让我们来审计一下 $flag = "XXXXXXXXXXXXXXXXXXXXXXX"; $secret = "XXXXXXXXXXXXXXX"; // This secret is 15 characters long for secur

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