CTF-关于MD5绕过的一些总结
本文最后更新于310 天前,其中的信息可能已经过时,如有错误请发送邮件到270371528@qq.com

CTF 关于MD5绕过的一些总结

基础绕过

1.弱相等(==)

1.md5($a)==md5($b) & $a != $b

2.$a==md5($a)

列举几个

QNKCDZO

s155964671a

s1091221200a

这些md5加密后都以0e开头,可以绕过弱相等

3.sha1($v1)==sha1($v2) && $v1!=$v2

aaO8zKZF
aaK1STfY
数组也行

2.强相等(===)

md5($a) === md5($b) && $a !== $b

数组绕过 a[]=1&b[]=2

3.md5强碰撞

(string)$_POST['param1']!==(string)$_POST['param2'] &&md5($_POST['param1'])===md5($_POST['param2'])
payload:传入参数=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2&传入参数=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2

4.md5(,true)时

两个万能字符串

129581926211651571912466741651878684928

ffifdyop

提高绕过

1.利用fastcoll工具进行绕过

 <?php
highlight_file(__file__);
$master = "MD5 master!";
if(isset($_POST["master1"]) && isset($_POST["master2"])){
    if($master.$_POST["master1"] !== $master.$_POST["master2"] && md5($master.$_POST["master1"]) === md5($master.$_POST["master2"])){
        echo $master . "<br>";
        echo file_get_contents('/flag');
    }
}
else{
    die("master? <br>");
}
master? 

这题要求我们找到这样的两个字符串a和b,内容不同,但md5值相同。并且开头已经定死了。这就涉及到md5的碰撞。

我们使用fastcoll来快速生成这种碰撞。

建立一个文件a.txt,内容为

image-20241117160555712

将该文件拖入fastcoll.exe,自动生成两个文件

image-20241117160701062

在写脚本根据生成的文件生成碰撞的字符串

<?php 
function readmyfile($path){
 $fh = fopen($path, "rb");
 $data = fread($fh, filesize($path));
 fclose($fh);
 return $data;
}
$a = urlencode(readmyfile("E:/a_msg1.txt"));
$b = urlencode(readmyfile("E:/a_msg2.txt"));
if(md5((string)urldecode($a))===md5((string)urldecode($b))){
echo $a;
}
if(urldecode($a)!=urldecode($b)){
echo $b;
}

image-20241117161642054

然后提交即可

image-20241117161702830

像这种开头固定的即可用该方式碰撞获取

2.扩展长度攻击

工具为hash-ext-attack

MD5和SHA-1算法的哈希函数存在一个特定的性质:给定一个消息M和其哈希值H,可以很容易地计算出一个新的消息M’,使得M’的哈希值为任意指定的值H’。也就是说我们可以在不知道a的字符串具体字母:(前提知道字符串a的md5值和字符串a的长度) 可以算出字符串(a+b)的md5值 ,b为你自己构造的一个字符串。

题目通常会给出$secert+“一串明文”的md5值,虽然不知道$secret是什么但是会给出$secret的长度,出现这种情况题目就大概率掺杂了哈希拓展攻击

原文链接:https://blog.csdn.net/2301_76690905/article/details/135177452

上列题http://ctf5.shiyanbar.com/web/kzhan.php

$flag = "XXXXXXXXXXXXXXXXXXXXXXX";
$secret = "XXXXXXXXXXXXXXX"; // This secret is 15 characters long for security!
$username = $_POST["username"];
$password = $_POST["password"];
if (!empty($_COOKIE["getmein"])) {
    if (urldecode($username) === "admin" && urldecode($password) != "admin") {
        if ($COOKIE["getmein"] === md5($secret . urldecode($username . $password))) {
            echo "Congratulations! You are a registered user.n";
            die ("The flag is ". $flag);
        }
        else {
            die ("Your cookies don't match up! STOP HACKING THIS SITE.");
        }
    }
    else {
        die ("You are not an admin! LEAVE.");
    }
}
setcookie("sample-hash", md5($secret . urldecode("admin" . "admin")), time() + (60 * 60 * 24 * 7));
if (empty($_COOKIE["source"])) {
    setcookie("source", 0, time() + (60 * 60 * 24 * 7));
}
else {
    if ($_COOKIE["source"] != 0) {
        echo ""; // This source code is outputted here
    }
}
setcookie("sample-hash", md5($secret . urldecode("admin" . "admin")), 

通过这个信息我们知道$secret.adminadmin的MD5值

image-20241117171344097

已知md5($secret."adminadmin"),求md5($secret . urldecode($username . $password))

username为admin,password不能为admin

已知密钥$secret长度为15,已知明文为adminadmin,已知hash为57…..c7,

利用拓展长度攻击延长字符

image-20241117221459014

也可以将admin作为明文,$secret."admin"当作密钥(这样就是15+5=20位长度),扩展字符可以由我们自己决定,随便填

image-20241117221240006

两种方法随便一种都可以。第一种传参password时要注意删去一个admin,不然就是三个了

image-20241117221307723

再看道题加深印象

 <?php
session_start();
highlight_file(__FILE__);
include "./my.php";
echo strlen($secret);
echo"<br>";
echo(md5($secret."adminpassword"));
@$username = urldecode($_POST["username"]);
@$password = urldecode($_POST["password"]);
if (!empty($_COOKIE["source"])) {
    if ($username === "admin" && $password != "password") {
         if ($_COOKIE["source"] === md5($secret.$username.$password)) {

         // 在验证用户后,如果登录成功,设置会话变量来表示用户已登录
          $_SESSION['loggedin'] = true;
          $_SESSION['username'] = 'admin'; // 用户名
          $_SESSION['role'] = 'admin'; // 用户角色或权限
          echo "<script>window.location.href='upload.php';</script>";
        }
        else {
             echo "<br>"; 
            die ("你的cookie好像不太对啊");
        }
    }
    else {
        die ("可不会轻易放你进去");
    }

}   
14
879bd10c8628894d388c068a25326c21

已知hash和密钥长度14,明文为adminpassword

image-20241117223222450

payload:
post:username=admin&password=password%80%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%D8%00%00%00%00%00%00%00123
cookie:source=a0dc1467b42623cd61f2c65c2e2bf21e
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇