别问,问就是为了 CTF
思路源于一次三小时十二题的内部 CTF 竞赛,其中一道简单 MISC 给出明文范围(字母数字)和 MD5 开头,要求穷举出 flag——这当然不难,python 十几行代码搞定,但是运行出结果竟然用了近 20 分钟,感觉十分没有性价比啊!!
于是想找一个高性能(C/C++)指定格式 HASH 穷举工具,呃 无果……
为了 CTF 需要构造 HASH 时能够“一把梭”,于是有了年轻人的第一个“轮子”
功能
随机或穷举指定格式 HASH 值,输出符合条件的"明文 HASH"
支持指定明文格式
不限定明文格式随机字符穷举
自定义穷举字符集
CTF 常见 HASH(MD4/MD5/SHA1)
设置 HASH 开头、结尾或包含字符串
帮助
Usage of bruteHASH.exe:
-a string
设置明文格式,支持?占位符,如 flag{?????}(Linux 下字符串请使用引号包裹)
-aa
不限制明文,随机穷举指定格式 HASH
-b string
按顺序组合穷举字符集(字符集顺序会严重影响爆破速度,请尽量精确)
d 数字 | l 小写字母 | u 大写字母 | h 十六进制字符集 | p 特殊字符 | r 可见字符
例如:指定爆破字符集为数字、字母 -b=dlu
-bb string
自定义穷举字符集
-c string
设置目标 HASH 值包含字符串
-e string
设置目标 HASH 值结束字符串
-i int
设置目标 MD5 位数 16 位或 32 位 (default 32)
-m int
设置 HASH 算法
0 MD4 | 1 MD5 | 2 SHA1 (default 1)
-s string
设置目标 HASH 值起始字符串
示例
随机字符穷举,HASH 中包含"6377666"的 SHA1
> bruteHASH -aa -c=6377666 -m=2
随机字符穷举,"0e"开头的 MD4
> bruteHASH -aa -s=0e -m=0
用自定义字符集穷举"c???new???"明文,32 位 MD5 包含字符串"3b605234ed"
> bruteHASH -a="c???new???" -bb=abcdefnutuvw_ -c=3b605234ed
用数字、大写字母穷举明文"flag{?????}"(?代表未知 5 位),16 位 MD5 开头为"b6dff925"
> bruteHASH -a="flag{?????}" -b=du -s=b6dff925 -i=16
声明
CTF 偶尔需要用到"特殊"HASH,比如 MISC 中已知个别明文字符和部分 HASH,要穷举 flag 明文; WEB 中构造 MYSQL 注入,要用指定字符集构造一个以"xxxxxxxx"开头的 MD5 ; PHP 弱类型 HASH 比较需要构造"0e"开头的 HASH 等等。但"爆破"HASH 的工具不少,一个好用的穷举生成 HASH 的工具都没有
虽然"人生苦短,该用 python",但为了兼顾性能和开发效率,做了一个艰难的决定——
学用 golang 试一试?
首次使用 golang,本着能跑就行的初心聚合"云智慧"完成——
代码不精简有 BUG 且效率未达最佳,如需吐槽请 fork 后 show your code...
毕竟刚学首用,对 golang 很多特性还没了解,我知道代码很渣但目前已尽力,不知道从功能性、稳定性、效率等方面如何才能更优化,诚邀 golang 大佬批评指证
项目地址