[BJDCTF2020]Easy MD5

寻找思路

打开看页面只有一个框,啥也没有,于是翻看源码、数据包啥的看看有没有什么线索。

可以在数据包内发现有个hint:[BJDCTF2020]Easy MD5_第1张图片

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

然后方向大概知道了,进行sql注入。但是如何在经过md5加密之后还能形成注入。我们目标构造形成

' or '数字

以此形成万能密码。

md5($pass,true)

这个php函数参考了很多大佬的文章,有点懵,然后自己整了一遍才明白。

函数本体:md5(string,raw)

官方解释:

string    必需。要计算的字符串。

raw        可选。默认不写为FALSE。32位16进制的字符串
               TRUE。16位原始二进制格式的字符串

我的理解:

string    必需。要计算的字符串。

raw        可选。默认不写为FALSE。md5加密后的字符串的hex码
               TRUE。md5加密后的字符串

那么我们要如何才能构造出我们想要的形式呢。

直接搜/doge。不然自己碰撞一遍有点烧机子,找解密网站也行。(其他方法暂时想不到)

于是找到我们想要的答案:

ffifdyop

然后输入来到下一关。

[BJDCTF2020]Easy MD5_第2张图片

md5弱类型比较

 这个就是md5弱类型比较了,可以直接数组绕过。(当然还有挺多方法的,可以自行搜索。)

[BJDCTF2020]Easy MD5_第3张图片

 md5强碰撞

[BJDCTF2020]Easy MD5_第4张图片

1.数组绕过

这里发现需要md5强类型比较,但是md5加密不能处理数组,所以还是可以对其进行数组绕过。

2.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%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

3.md5生成0的次方

网上找了一些md5相同的字符串  引用链接

QNKCDZO
0e830400451993494058024219903391

s878926199a
0e545993274517709034328855841020
 
s155964671a
0e342768416822451524974117254469
 
s214587387a
0e848240448830537924465865611904
 
s214587387a
0e848240448830537924465865611904
 
s878926199a
0e545993274517709034328855841020
 
s1091221200a
0e940624217856561557816327384675
 
s1885207154a
0e509367213418206700842008763514

最后拿到flag

你可能感兴趣的:(wp,学习,安全)