Back

Md5绕过总结

CTF常见题型总结(签到版)

常规0e绕过

  • QNKCDZO
  • 240610708
  • s878926199a
  • s155964671a
  • s214587387a
  • s214587387a

这些字符串的md5值都是0e开头,e代表科学计数法,这些值在php弱类型比较中==判断为相等 特殊的存在0e215962017,加密前后都是以0e开头

数组绕过

一个数组无法进行md5加密,可绕过php强类型===比较

强类型绕过

即md5碰撞 如题

1
if((string)$_POST['a'] !== (string)$_POST['b'] && md5($_POST['a']) === md5($_POST['b']))

用一些md5值相等的字符串

1
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
1
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

特殊字符串ffifdyop

该字符串经过md5加密后:276f722736c95d99e921722cf9ed621c  
再转换为字符串即为:'or'6<乱码>

用途:

1
select * from admin where password=''or'6<乱码>'

相当于

1
select * from admin where password='' or true

可以用来实现sql注入

除此之外
129581926211651571912466741651878684928也可达到同样的效果

实战

题目链接:http://ctf5.shiyanbar.com/web/houtai/ffifdyop.php

image-1

注释中的源码如下

1
2
3
4
5
6
7
8
9
 $password=$_POST['password'];
    $sql = "SELECT * FROM admin WHERE username = 'admin' and password = '".md5($password,true)."'";
    $result=mysqli_query($link,$sql);
        if(mysqli_num_rows($result)>0){
            echo 'flag is :'.$flag;
        }
        else{
            echo '密码错误!';
        }

提交ffifdyop,使查询语句变成

1
select * from admin where username='admin' and password ='' or '6<乱码>'

实现sql注入

image-2

0e开头纯数字md5值

240610708

Licensed under CC BY-NC-SA 4.0