栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

[BJDCTF2020]Easy MD5 1

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

[BJDCTF2020]Easy MD5 1

最近做了一到有关MD5码的ctf,所以就顺带这道题把之前遇到的有关md5码的知识总结一下。

1、刚开始以为是sql注入,试了一下发现没什么变化,所以就查看页面源码

这里可以看到,是将我们的输入进行md5加密后再所以sql查询,然后又发现后面的Ture,这时就要去百度一下这个选项的含义
md5(string,raw)
参数 描述
string 必需。规定要计算的字符串。
raw
可选。规定十六进制或二进制输出格式:

TRUE - 原始 16 字符二进制格式
FALSE - 默认。32 字符十六进制数

所以我们可以知道,md5码有两种格式,一个是16字符2进制的,还有一种是32字符16进制的。16字符的可以构造sql注入字符('or '),直接绕过。

通过python脚本,基本可以知道,'or’这个字符的md5码的32位格式为276f7227,然后后面的位数随机补充,本来想通过python脚本跑出结果,发现太慢了,所以直接看别人的查询字符串,即ffifdyop。
不过我觉的我的脚本思想还是不错的


2、输入查询字符串绕过后,出现下图情况

这里md5进行了弱比较,当为0e开头的会被识别为科学记数法,结果均为0,所以我们只需构造md5码为0e开头的字符串,这里我用了QLTHNDT和QNKCDZO

输入后会得到如下界面

这里可以知道它又将md5码换成强比较,此时如果传入的两个参数不是字符串,而是数组,md5()函数无法解出其数值,而且不会报错,就会得到===强比较的值相等

因为要用POST提交,所以我使用burpsuite抓包修改提交

这里我还要补充一下另外一种md5的比较

真实md5碰撞,因为此时不能输入数组了,只能输入字符串
所以使用md5碰撞,即两个不同的文件或字符串,它的md5码其实是相同的
这里我找到了一个比较好用的工具可以很方便进行md5碰撞
here
用法
git clone https://github.com/iamjazz/Md5collision.git
cd Md5collision
在本目录中创建一个文本文件。写入任意字符或数字(eg:输入1) 。命名为init.txt
运行fastcoll 输入以下参数。 -p 是源文件 -o 是输出文件
fastcoll_v1.0.0.5.exe -p init.txt -o 1.txt 2.txt

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/320057.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号