关于md5强比较和弱比较绕过的实验

在ctf比赛题中我们的md5强弱比较的绕过题型很多,大部分都是结合了PHP来进行一个考核。这一篇文章我将讲解一下最基础的绕过知识。

MD5弱比较

比较的步骤

在进行弱比较时,PHP会按照以下步骤执行:

  1. 确定数据类型:检查参与比较的两个值的数据类型。
  2. 自动类型转换:根据比较的类型自动转换值。例如,如果两个值有不同类型,PHP会尝试将它们转换为相同的类型。
  3. 执行比较:在转换后,进行实际的比较

给出一个简单的实例:

php 复制代码
<?php
$a = "10"; // 字符串
$b = 10;   // 整数
var_dump($a == $b); // 输出 true

这里明显是不同的两种类型,我们知道两种不同类型是不能进行比较的,于是弱比较时自动将类型转变成同样的类型,然后可以进行一个比较。

第一类:(md5(a)==md5(b)&&a!=b)

在本地环境先写一个简单的实验代码:

php 复制代码
<?php
$a=$_GET['$a'];
$b=$_GET['$b'];
if(md5($a)==md5($b)&&$a!=$b){
    echo '绕过成功';
}
else{
    echo '还得练';
}

绕过:

很简单,我们知道0的多少次方都为0,那么如果MD5加密之前的数据不同但是加密后数字值都为0的话那么不就能绕过了吗。

s155964671a

s214587387a

s1091221200a

s1885207154a

s1502113478a

s1885207154a

s1836677006a

s155964671a

s1184209335a

以下数据都是MD5加密后数值为0的字符串。

本地实验结果:

第二类:(a==md5(a))

本地实验代码:

php 复制代码
<?php
highlight_file("test.php");
$a=$_GET['$a'];
if($a==md5($a)){
    echo '绕过成功';
}
else{
    echo '还得练';
}

绕过:

我们依旧是需要利用我们的数值为0的特殊字符串来解题,那么在这里需要一个原来$a的数值为0且MD5加密后依旧为0的数。

0e215962017

0e1284838308

0e1137126905

0e730083352

0e807097110

实验结果:

MD5强比较

强比较通常指的是对两个MD5哈希值进行比较,以确定它们是否相同。

第一类: (md5(a)===md5(b) & a != b)

给出我们的实验代码:

php 复制代码
<?php
include "test1.php";
highlight_file("test.php");
$a=$_GET['$a'];
$b=$_GET['$b'];
if(md5($a)===md5($b) & $a != $b){
    echo $test1;//test1内容是恭喜绕过
}
else{
    echo '还得练';
}

强比较时比较的是MD5哈希值所有我们之前的数值绕过就不能使用了。

1.数组绕过:

可以看到我们的代码报错了,因为PHP对无法md5加密的东西不加密,结果为NULL,虽然会报错,但是null=null,逻辑关系为True,所以在开头输出了我们的结果。

2.特殊字符串

$a=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2

b=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2 a=%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 $b=%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

在ctf比赛题中我们的MD5绕过基本上是和其他的一些结合到一起的,作为最基础的一个绕过环节万变不离其宗,我们只要打好基础一切问题都可以很轻松的解决。

相关推荐
2501_915909063 小时前
手机崩溃日志导出的工程化体系,从系统级诊断到应用行为分析的多工具协同方法
android·ios·智能手机·小程序·uni-app·iphone·webview
木风小助理3 小时前
MySQL内存监控深度解析与故障排查实践
android·adb
灰鲸广告联盟3 小时前
APP广告变现定制化解决方案,助力收益提升与用户体验平衡
android·flutter·搜索引擎·ux
帅得不敢出门3 小时前
精简Android SDK(AOSP)的git项目提高git指令速度
android·java·开发语言·git·elasticsearch
2501_937189233 小时前
神马 9.0 2025 最新版源码系统:安全加固 + 二次开发友好
android·源码·开源软件·源代码管理·机顶盒
モンキー・D・小菜鸡儿4 小时前
Android 中 StateFlow 的使用
android·kotlin
二川bro4 小时前
字符串特性解析:Python不可变性引发的错误
android·开发语言·python
2501_937154935 小时前
酷秒神马 9.0 2025 版:微服务架构
android·源码·源代码管理·机顶盒
我又来搬代码了5 小时前
【Android】【Compose】Compose知识点复习(一)
android·前端·kotlin·android studio
fatiaozhang95275 小时前
九联UNP-SJA8-国科GK6323V100C-2+8G-安卓9.0-原厂强刷固件包-可救砖及开ADB教程
android·adb·电视盒子·刷机固件·机顶盒刷机·机顶盒刷机固件·九联unp-sja8