[BJDCTF2020]Easy MD5

本文探讨了如何利用PHP的MD5函数进行注入攻击,通过构造字符串和利用弱类型特性,实现SQL注入。讲解了如何利用`or`操作符绕过数组限制,以及利用`if`语句的双条件判断来获取flag。重点在于理解MD5函数的特性和漏洞利用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

审题

Hint: select * from ‘admin’ where password=md5($pass,true)

考察注入

在这里插入图片描述

md5语法

md5(string,raw)

参数 描述
string 必需。规定要计算的字符串。
raw 可选。规定十六进制或二进制输出格式: TRUE - 原始 16 字符二进制格式 FALSE - 默认。32 字符十六进制数
md5(‘abcd’, true); ��qLG’�$�.3
echo md5(‘abcd’, false); e2fc714c4727ee9395f324cd2e7f331f

md5技术细节

md5() 函数计算字符串的 MD5 散列。

md5() 函数使用 RSA 数据安全,包括 MD5 报文摘要算法。

md5() 函数不能处理数组,数组都返回 null,md5(a[]) 结果为 null

返回值: 如果成功则返回已计算的 MD5 散列,如果失败则返回 FALSE。
PHP 版本: 4+
更新日志: 在 PHP 5.0 中,raw 参数变成可选的。

md5(‘abcd’, true); ==> ��qLG’�$�.3

可否构造出’ or 这样的结构?

答案是可以的,需要自己去遍历然后筛选结果</

### 关于BUUCTF中Easy MD5挑战的信息 在处理BUUCTF中的Easy MD5挑战时,主要目标是理解MD5哈希函数的工作原理以及如何逆向分析特定场景下的输入输出关系。然而,在提供的参考资料中并未直接提及有关BUUCTF的具体内容。 对于BUUCTF的Easy MD5挑战,通常涉及的是给定一个MD5散列值,参赛者需要找出能够生成该散列值的原始字符串。由于MD5是一种单向加密算法,理论上无法通过计算反推出原串,但在某些特殊情况下可以通过字典攻击或者暴力破解来尝试匹配已知的常见短语或简单模式[^1]。 为了应对这类CTF竞赛题目: - **构建常用词库**:创建一个包含大量可能出现单词、短句或其他潜在候选者的列表。 - **优化查找过程**:利用多线程技术加速遍历整个数据库的速度;也可以考虑采用GPU并行运算进一步提升效率。 - **注意边界条件**:有时命题人会在提示里暗示一些额外约束(比如长度范围),这有助于缩小搜索空间。 ```python import hashlib from concurrent.futures import ThreadPoolExecutor def md5_hash(text): return hashlib.md5(text.encode()).hexdigest() target_md5 = "d41d8cd98f00b204e9800998ecf8427e" wordlist = ["hello", "world"] # 这只是一个简单的例子,请替换为实际使用的更大规模字典文件路径 with ThreadPoolExecutor(max_workers=10) as executor: futures = {executor.submit(md5_hash, word): word for word in wordlist} for future in futures: hashed_word = future.result() if hashed_word == target_md5: print(f"Found match! Original string was: {futures[future]}") break else: print("No matches found.") ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值