目录
知识点摘要
一些参考的文章:
md5是一个哈希加密的方式,应用广泛。其中PHP中的md5($str,raw)是一种md5加密的函数,输入一个字符串,后面的参数是TRUE会返回32位,为FALSE则会返回16位。
1.ffifdyop绕过,这一个特殊的字符串经过md5加密后的前几位经过16进制转换字符串得到的是
'or'6xxxxxx
于是在SQL查询中,比如
select * from table_name where id=md5($pwd,true);
则可以使where后成为一个恒等式从而完成绕过,充当了万能密码的作用。
2.php弱类型绕过。
php弱类型比较==会将比较的两个值转换到同一个数据类型再进行比较,不会去比较数据类型。
0e绕过,如果两个字符串的md5开头都是0e,那么都会判定为0从而相等,实现绕过。
MMHUWUV 0e701732711630150438129209816536
MAUXXQC 0e478478466848439040434801845361
IHKFRNS 0e256160682445802696926137988570
GZECLQZ 0e537612333747236407713628225676
GGHMVOE 0e362766013028313274586933780773
GEGHBXL 0e248776895502908863709684713578
EEIZDOI 0e782601363539291779881938479162
DYAXWCA 0e424759758842488633464374063001
还有方式就是使用脚本去跑,能找到两个字符串不同但md5值相同的,也可以在一些题中绕过。这个可以去看第一篇参考的文章。
3.php强类型比较===会连同数据类型一起比较,同时一些解析也被限制了。我们可以使用数组进行绕过。数组绕过是指我们传值的时候传一个数组上去,比如?id[]=1,这个就是使用GET方法传值时候的操作。当md5函数遇到数组之后会返回空值,因为它无法加密数组,于是可以绕过php强类型比较。
[SWPUCTF 2022 新生赛]奇妙的MD5
无论输入什么都没有回显,尝试一下bp抓包
在响应包的表头部分有给我们的hint
select * from 'admin' where password=md5($pass,true)
我们传入ffifdyop绕过
成功跳转到新的界面。
F12查看线索,是md5弱类型绕过,使用0e绕过。
?x=MMHUWUV&y=MAUXXQC
成功来到下一个页面,是个强类型比较,直接使用数组绕过 wqh[]=1&dsy[]=2
得到flag