[BJDCTF2020]Easy MD5-学习笔记
前置知识1、PHP 松散比较 vs 2、 0e 绕过正文一、代码审计md5函数知识点讲解二、构造请求参数三、PHP 松散比较四、构造数组实现MD5 绕过五、PHP 严格比较1、为什么 0e 绕过在这里失效2、为什么数组绕过仍然有效六、构造数组实现MD5 绕过前置知识1、PHP 松散比较vsPHP 有两种比较运算符松散比较只比较值会进行类型转换严格比较同时比较值和类型不会进行类型转换2、0e绕过当一个字符串的 MD5 哈希值形如0eXXXXXXXXX即0e开头后面全是数字PHP 的会把它当作科学计数法处理0e123在科学计数法中等于0 × 10¹²³0因此两个不同的0e开头的 MD5 值用比较结果都为true因为0 0经典0e碰撞对字符串MD5 值QNKCDZO0e830400451993494058024219903391s878926199a0e545993274517709034328855841020s155964671a0e342768416822451524974117254469s214587387a0e848240448830537924465865611904更简单的解法数组绕过:除了0e绕过还有更通用的数组绕过方法在 PHP 中md5(数组)→ 返回NULL因为md5()期望字符串参数传入数组会报错但返回NULLNULL NULL→true松散比较不同数组$a ! $b→true所以只需要传a[]1b[]2即可绕过。正文一、代码审计访问目标首页http://ceb7428be7b64f06d52ca0af.http-ctf2.dasctf.com:80/页面自动跳转到./leveldo4.php。访问./leveldo4.php响应头中包含一个提示Hint: select * from admin where passwordmd5($pass,true)页面是一个密码输入框提交的密码会经过md5($pass, true)处理后拼接到 SQL 查询中。md5函数知识点讲解md5($string, $raw_output)函数的第二个参数$raw_output默认false返回32 字符的十六进制字符串如d41d8cd98f00b204e9800998ecf8427e设为true返回16 字节的原始二进制数据可能包含不可见字符当md5($pass, true)的输出直接拼接到 SQL 查询时如果原始二进制数据中包含单引号等 SQL 特殊字符就可能造成 SQL 注入。因此我们需要找一个字符串它的 MD5 原始二进制值恰好构成 SQL 注入语句。经过前人验证字符串ffifdyop的 MD5 原始二进制值为 or 6É]é®ãR^ìÿ在 SQL 中解析后等效于select*fromadminwherepasswordor6É...由于6É...不为假 or 6É...结果为真从而绕过密码验证。其他可用字符串129581926211651571912466741651878684928→ MD5 raw:06da5430449f8f6f23dfc1276f722738但ffifdyop是最经典、最简洁的 payload。二、构造请求参数向./leveldo4.php发送 GET 请求参数为passwordffifdyopGET /leveldo4.php?passwordffifdyop HTTP/1.1 Host: ceb7428be7b64f06d52ca0af.http-ctf2.dasctf.com响应成功页面底部出现 JavaScript 重定向scriptwindow.location.replace(./levels91.php)/script三、PHP 松散比较访问./levels91.php页面 HTML 注释中泄露了 PHP 源码$a$_GET[a];$b$_GET[b];if($a!$bmd5($a)md5($b)){// wow, glzjin wants a girl friend.条件要求$a ! $b两个值不相等松散比较md5($a) md5($b)两个值的 MD5 哈希松散相等四、构造数组实现MD5 绕过向./levels91.php发送 GET 请求使用数组绕过GET /levels91.php?a[]1b[]2 HTTP/1.1 Host: ceb7428be7b64f06d52ca0af.http-ctf2.dasctf.com响应中出现 JavaScript 重定向scriptwindow.location.replace(./levell14.php)/script五、PHP 严格比较访问./levell14.php页面直接显示了 PHP 源码?phperror_reporting(0);includeflag.php;highlight_file(__FILE__);if($_POST[param1]!$_POST[param2]md5($_POST[param1])md5($_POST[param2])){echo$flag;}条件要求$_POST[param1] ! $_POST[param2]严格不相等类型和值都不同md5($_POST[param1]) md5($_POST[param2])MD5 哈希严格相等1、为什么0e绕过在这里失效严格比较要求类型和值都相等0e830400451993494058024219903391 0e545993274517709034328855841020→false即使它们数值上都是 0但字符串内容不同严格比较会直接返回false2、为什么数组绕过仍然有效当 PHP 的md5()函数接收到数组参数时PHP 会抛出警告Warning但仍然返回NULLmd5($_POST[param1])→NULLmd5($_POST[param2])→NULLNULL NULL→true类型相同NULL值相同NULL同时$_POST[param1] ! $_POST[param2]→true两个不同的数组因为$a array(0 1)和$b array(0 2)是两个不同的数组对象因此数组绕过对同样有效六、构造数组实现MD5 绕过向./levell14.php发送 POST 请求使用数组绕过POST /levell14.php HTTP/1.1 Host: ceb7428be7b64f06d52ca0af.http-ctf2.dasctf.com Content-Type: application/x-www-form-urlencoded Content-Length: 21 param1[]1param2[]2响应体中成功输出 Flag。

相关新闻

2026这6款硬核降AI率网站全揭秘,一键把AI检测率精准控到安全区!

2026这6款硬核降AI率网站全揭秘,一键把AI检测率精准控到安全区!

步入 2026 年,学术界的风向早已悄然转变。曾经只需盯着查重率的焦虑,如今已被“降 AIGC 率”的紧迫感彻底取代。AI 检测技术愈发精准,高校的审核标准也不断加码,论文再怎么精雕细琢,只要带着 AI 痕迹,就可能…

2026/11/2 12:17:32 阅读更多 →
去AI痕迹怎么操作?2026年论文AI率从70%降到8%的实测记录

去AI痕迹怎么操作?2026年论文AI率从70%降到8%的实测记录

「您的论文AIGC疑似度70%」——看到这个结果,很多人的第一反应是逐句手动改。改到凌晨三点,复查还有45%,崩溃。2026年各高校和期刊的AIGC检测越来越严,「去AI痕迹」成了论文收尾的刚需环节。我记录了自己把AI率从70%降到8%的全过程…

2026/10/26 22:40:40 阅读更多 →
PyTorch模型在NPU上训练:从环境搭建到性能调优实战指南

PyTorch模型在NPU上训练:从环境搭建到性能调优实战指南

1. 项目概述:当PyTorch遇上NPU最近在折腾一个图像分类的项目,手头正好有一台搭载了华为昇腾310 NPU的开发板。想着现在AI推理端侧化是大趋势,如果能直接在NPU上训练模型,岂不是能省去从GPU训练到NPU转换的繁琐流程?于是…

2026/10/31 9:23:46 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/2 0:25:10 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/2 10:46:11 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/2 10:47:40 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/2 1:16:51 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/2 10:46:31 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/2 10:46:26 阅读更多 →

日新闻

周新闻

月新闻