BUUCTF [BJDCTF2020]Easy MD5

进入靶场,要求提交查询,尝试提交几个,发现都没有回显,只会改变URL后的password

抓包看看网页的头,看到了一条sql语句 且password=md5($pass,ture)

经过查询,md5的加密包含两部分,为md5(string,raw)

其中,string是必需,它规定了需要计算的字符串;而raw则是可以选择16进制或者2进制

当选择TRUE时则为16字符的二进制格式;

当选择FLASE时默认为32字符的十六进制格式;


这个数据经过md5(“ffifdyop”,true)和默认情况后的输出为'or'6É]™é!r,ùíb
可以看到关键就前面几个字符:'or'6
拼接上sql语句就是:select * from 'admin' where password=''or'6É]™é!r,ùíb'
首先第一个单引号和查询语句进行了闭合,然后使用了or判断,后面为'6É]™é!r,ùíb'

关键:在mysql中,在用作布尔型判断时,1或者其他数字,比如这里的6开头的字符串会被当做整形常数,也就是说这里的sql语句变为了select * from 'admin' where password=''or 6,返回值就为true
————————————————
版权声明:本文为CSDN博主「pakho_C」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/pakho_C/article/details/122821330

输入ffifdyop,就会返回true,得到另一个界面

查看源代码,发现的md5的弱比较,需要绕过他的弱比较

md5的弱比较有两种绕过方法,可以用md5()函数漏洞绕过,也可以用“==”比较漏洞绕过,通俗讲就是用数组绕过和就科学计数法绕过

1.利用md5()函数漏洞绕过

原理:md5在识别数组时,会返回NULL,所以两者相等,也就可以绕过;

如/?a[]=1&b[]=2;

2.利用"=="比较漏洞绕过

原理:输入可以被md5加密为0eXXXX的数,这样在md5识别是都会翻译为0的几次方,都等于0,也就相等;下列是部分会被加密为0eXXXX的数

QNKCDZO

240610708

s878926199a

s155964671a

s214587387a

s214587387a

在绕过弱比较后,看到了flag的提示,只要同时绕过弱比较和强比较就能拿到flag,上面说过强比较需要用数组绕过,同时也能绕过弱比较param1[]=1&param2[]=2拿到flag,这题也是把md5的强弱比较都学习了一下,good

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值