【WEB】[BJDCTF2020]Easy MD5

**考点:**md5($str, true) 原始二进制,ffifdyop 经典串,PHP弱比较和强比较,md5数组绕过

打开题目,是个查询框:

bp抓包,看响应头,能够发现:

sql 复制代码
select * from 'admin' where password=md5($pass,true)

md5() 有两种输出格式:

php 复制代码
md5("hello")        // 默认 raw=false → 返回 32 位十六进制字符串
                    // 结果:5d41402abc4b2a76b9719d911017c592

md5("hello", true)  // raw=true → 返回 16 字节"原始二进制"
                    // 结果:]A@*v... (一堆乱码/不可见字符)

这段sql语句 的意思是:我们输入的密码 $pass,先算 md5($pass, true)注意是 true,吐二进制 ),然后把结果直接拼进 SQL 语句去查数据库。

换算过来就是:

sql 复制代码
select * from 'admin' where password='你输入的密码的md5值'

因为 md5($pass, true) 吐的是二进制乱码 ,而这串乱码被直接塞进 SQL 的字符串里 。所以我们需要找到一个字符串,它的 MD5 二进制里恰好包含 'or' 这几个字符

ffifdyop就符合这个要求:

第一步 :算 ffifdyop 的普通 MD5(32 位十六进制):

sql 复制代码
md5('ffifdyop') = 276f722736c95d99e921722cf9ed621c

第二步 :把前几位十六进制转成 ASCII 字符:

十六进制 转成 ASCII 字符 说明
27 '(单引号) 字符串开头的引号
6f **o**​ 字母 o
72 **r**​ 字母 r
27 '(单引号) 字符串结尾的引号
36 **6**​ 数字 6

第三步:拼进 SQL:

sql 复制代码
-- 原本应该是:
select * from 'admin' where password='xxxx一堆乱码'

-- 实际变成:
select * from 'admin' where password=''or'6É]é!r,ùíb'
  • password = '' → 密码等于空字符串 → 假(false)
  • or → 或者(这是逻辑"或")
  • '6É]é!r,ùíb' → 一个以数字 6 开头的字符串 → MySQL 把它转成数字时取开头的 6,非零 = 真(true)

假 OR 真 = 真​ → 整个 WHERE 条件恒为真​ → 数据库返回 admin 的所有记录 → 登录绕过

成功后进入下一个页面:

查看网页源代码:

能看到有两个条件必须同时满足

  1. $a != $ba 和 b 原值不相等 (用 != 弱比较判断不等)
  2. md5($a) == md5($b)a 和 b 的 MD5 值弱相等 (用 == 弱比较)

在PHP中,有个方法叫做数组绕过,因为PHP 的 md5() 无法处理数组 ,传入数组会返回 NULL(并报 Warning 但不中断)。两个 NULL 弱相等(NULL == NULL 为 true),而 a[]b[] 原值又不相等 → 条件满足

所以我们可以构造:

sql 复制代码
?a[]=1&b[]=2

在url中添加后跳转:

要求 :POST 传 param1param2原值不全等 ,但 md5() 结果强全等=== 要求值和类型都相同)。

然而数组绕过依然有效...... md5(数组) 返回 NULL,两个 NULL===值和类型都相同(都是 NULL)→ 强全等成立。

所以我们可以构造:

sql 复制代码
param1[]=1&param2[]=2

在POST里提交:

相关推荐
笃行3503 小时前
别拿MySQL数据库管理工具硬导:MySQL 迁 KingbaseES 的完整工具链
数据库
风哥2号4 小时前
数据库教程FGMT51‑PostgreSQL实例管理与参数文件
数据库·postgresql
蓝速科技4 小时前
桌面双屏翻译机量产调试:三类场景兼容性破局方案丨蓝速科技
运维·数据库·人工智能·科技·技术分享
达梦数据4 小时前
DMDRS空间数据类型说明:Oracle、DM8、MySQL空间数据类型映射
数据库·mysql·oracle
白远山5 小时前
24小时自助健身房系统开发实战:从需求分析到完整指南
java·开发语言·数据库·数据挖掘·需求分析
达梦数据5 小时前
DMDRS服务与模块的运行步骤
数据库
让学习成为一种生活方式6 小时前
PMGD:植物线粒体基因组数据库--Journal of Integrative Plant Biology
数据库
达梦数据6 小时前
达梦数据复制软件DMDRS搭建部署示例:源数据库DM8到目标数据库DM8一对一数据同步
数据库
IT_Octopus6 小时前
从一个应用开发者的角度,搞懂大数据查询的完整链路
java·大数据·数据库
Htr_7 小时前
Creem 2.0 使用指南:面向 AI 构建时代的资金平台
android·数据库·人工智能·ui·photoshop