在ctf比赛题中我们的md5强弱比较的绕过题型很多,大部分都是结合了PHP来进行一个考核。这一篇文章我将讲解一下最基础的绕过知识。
MD5弱比较
比较的步骤
在进行弱比较时,PHP会按照以下步骤执行:
- 确定数据类型:检查参与比较的两个值的数据类型。
- 自动类型转换:根据比较的类型自动转换值。例如,如果两个值有不同类型,PHP会尝试将它们转换为相同的类型。
- 执行比较:在转换后,进行实际的比较
给出一个简单的实例:
<?php
$a = "10"; // 字符串
$b = 10; // 整数
var_dump($a == $b); // 输出 true
这里明显是不同的两种类型,我们知道两种不同类型是不能进行比较的,于是弱比较时自动将类型转变成同样的类型,然后可以进行一个比较。
第一类:(md5($a)==md5($b)&&$a!=$b)
在本地环境先写一个简单的实验代码:
<?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
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
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绕过基本上是和其他的一些结合到一起的,作为最基础的一个绕过环节万变不离其宗,我们只要打好基础一切问题都可以很轻松的解决。