Easy MD5

仅仅是个人刷题记录,有问题欢迎友好讨论

1、数组绕过

md5()在php中无法处理数组,会将数组转化为null

2、特定的md5加密语句

ffifdyop\276f722736c95d99e921722cf9ed621通过md5加密后的数字串会被sql用ascii解释变成包含’ ’ or ’ '的语句

3、解题过程

页面有一个输入什么都没有反馈的输入框,通过网络响应头可以看到有一个hint
在这里插入图片描述
也就是说password会经过这样的一个md5()函数,再赋值给password。我们可以通过特殊字符组合通过md5函数后拼接变成一个永真,形如
select * from 'admin' where password='' or true
而ffifdyop\276f722736c95d99e921722cf9ed621可以做到
接着我们进入另一个页面,没有输入框,通过检查源代码我们可以发现一个php代码审计
在这里插入图片描述
通过md5无法处理数组,结果将为null的特性,构造

?a[]=1&b[]=2

绕过,达到第三个页面
在这里插入图片描述
处理方式和第二个页面一样
构造

?param1[]=1&param2[]=2

但是默认发送的是GET请求,这里需要转化为POST请求。用firefox的maxhackbar将请求转化为POST就好了。用burp直接改也许可以,但是我没用去试。关于maxhackbar参考我之前的博客
最后成功拿到flag

### 关于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.") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值