【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 != $b → a 和 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 传 param1、param2,原值不全等 ,但 md5() 结果强全等 (=== 要求值和类型都相同)。

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

所以我们可以构造:

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

在POST里提交:

相关推荐
小徐不徐说5 分钟前
C++ 接口与插件设计:从工厂注册到 Qt 动态插件
数据库·c++·qt·系统架构·程序设计
论文复现现场1 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
Decay__2 小时前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检
运维·数据库·sql·mysql·架构
心梦缘-雪雁3 小时前
SQL Server 查询数据存在哪个表里
数据库
lusklusklusk4 小时前
Python 巡检脚本:进程运行状态、数据库写入时效检查及邮件通知与告警
数据库·python·oracle
GeW4 小时前
产业新优势基础软件的人才底盘,从Linux与数据库开始
linux·数据库
SelectDB4 小时前
Doris Arrow Flight SQL 高速读取协议实战:与 Snowflake 客户端取数链路对照
大数据·数据库·数据分析
曼岛_4 小时前
[图解密码学]第4章 古典密码
java·数据库·密码学
瀚高PG实验室5 小时前
HGDB V9.0.5 .pgpass 免密登录提示 IsEncryptNon-base64 encoding 警告处理
数据库·postgresql·瀚高数据库
龙腾AI白云6 小时前
大模型检索增强生成(RAG)的技术原理与架构设计
数据库·python·机器学习·知识图谱