关于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绕过基本上是和其他的一些结合到一起的,作为最基础的一个绕过环节万变不离其宗,我们只要打好基础一切问题都可以很轻松的解决。

相关推荐
-seventy-1 小时前
Android 玩机知识储备
android
CYRUS STUDIO1 小时前
frida脚本,自动化寻址JNI方法
android·运维·自动化·逆向·移动安全·jni·frida
暮志未晚Webgl2 小时前
102. UE5 GAS RPG 实现范围技能奥术伤害
android·java·ue5
Patience to do2 小时前
Android Studio项目(算法计算器)
android·算法·android studio
我又来搬代码了5 小时前
【Android】使用TextView实现按钮开关代替Switch开关
android
江-月*夜8 小时前
uniapp vuex 搭建
android·javascript·uni-app
大风起兮云飞扬丶9 小时前
Android——显式/隐式Intent
android
大风起兮云飞扬丶9 小时前
Android——metaData
android
看山还是山,看水还是。9 小时前
Nginx 的 Http 模块介绍(中)
android·运维·网络·nginx·http
SouthBay49312 小时前
PHP内存马:不死马
android·开发语言·php