练习 19 Web [BJDCTF2020]Easy MD5

如果你是第一批做这个题的,这道题一点也不easy

打开在前端代码里面看到,输入框输入的内容实际是’password’
在这里插入图片描述
随意输入内容,查看响应header中的内容有一句SQL代码,可知我们要让password在md5后返回值为true
在这里插入图片描述

然后尬住,开搜

MD5碰撞
总结ctf中 MD5 绕过的一些思路
ffifdyop——绕过中一个奇妙的字符串
BJDCTF2020 Easy MD5(详细
BUUCTF [BJDCTF2020]Easy MD5 详解
sql注入:md5($password,true)

根据以上信息
在其他wp和博客中得知:
md5函数在指定了true的时候,是返回的原始 16 字符二进制格式。也就是说会返回这样子的字符串:'or’6\xc9]\x99\xe9!r,\xf9\xedb\x1c
然后就会拼接成:

select * from 'admin' where password=''or'6.......'

这句在MySQL 中会形成“永真”,和常规的sql注入password=''or’1逻辑一致

要注意本题中password= 后面直接就是md5()函数
返回的字符串本是'or'6.......
得到为什么不是 password='or' 6 ,而password=' 肯定会报错
原因是,md5()函数返回值的类型是字符串,会再带一对 ''
所以得到的确实是password=''or' 6........'

这要令password的值在md5加密后

在其他wp中,知道了ffifdyop这个特殊字符串,刚好符合'or'6

ffifdyop绕过原理是:
ffifdyop 这个字符串被 md5 哈希了之后会变成 276f722736c95d99e921722cf9ed621c,这个字符串前几位刚好是 ’ or ‘6
而 Mysql 刚好又会把 hex 转成 ascii 解释,因此拼接之后的形式是 select * from ‘admin’ where password=’ ’ or ‘6xxxxx’,等价于 or 一个永真式
,因此相当于万能密码,可以绕过md5()函数。

输入ffifdyop后,得到:
在这里插入图片描述
查看前端代码,看到一段注释的代码
在这里插入图片描述

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

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

这个在我的练习4,我遇到过,直接输入两个数组类型并且不一样的值就能绕过
因为md5函数输入数组返回null
null =null成立
payload:?a[]='123'&b[]='1234'
成功,又看到了一组代码
在这里插入图片描述

这一组也是一样的解法,数组绕过md5
在这里插入图片描述

flag{bb709a3d-2f98-41f9-b26c-5dd79df15d4a}

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值