本文主要是介绍BUU WEB [BJDCTF2020]Easy MD51,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这道题第一步就把我给整懵圈了…在看题目源码时在最后看了解决方法:
至于刚开始的原理函数,不懂为什么这样解决,大佬是这样解释的:
select * from ‘admin’ where password=md5($pass,true)
这里面password就是我们用户框中输入得东西。如果通过md5之后返回字符串是’or 1的话,形成一个永真条件:
select * from ‘admin’ where password=’ ‘or ‘6…’
这个可以用ffifdyop绕过,绕过原理是:
ffifdyop 这个字符串被 md5 哈希了之后会变成 276f722736c95d99e921722cf9ed621c,这个字符串前几位刚好是 ’ or ‘6
而 Mysql 刚好又会把 hex 转成 ascii 解释,因此拼接之后的形式是 select * from ‘admin’ where password=’’ or ‘6xxxxx’,等价于 or 一个永真式,因此相当于万能密码,可以绕过md5()函数。
输入后进入另外一个页面:
查看源代码:
这次很清晰,在开头就给出了提示,get传参a,b,使其不相等但md5加密后相等,这个好说,在网上可以查到一些这样字符,这里就不多赘述,我利用的是md5处理不了数组的方法,传入数组:
?a[]=1&b[]=2
根据提示,依旧是传入两个参数,要求两个参数不完全相等,但md5加密后完全相等,这个像上一个一样,直接用数组就可以解决,最后得到flag:
这篇关于BUU WEB [BJDCTF2020]Easy MD51的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!