思路源于一次三小时十二题的内部 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 值起始字符串
由于众所周知的原因,示例图片无法加载显示
https://github.com/playGitboy/bruteHASH/tree/master/img
随机字符穷举,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 大佬批评指证
1
danbai 2020-10-03 09:07:06 +08:00 via Android
借个楼,golang 写工具确实香。我没事也写些小工具整合成一个 cli 工具集。https://github.com/danbai225/A_Toolset
|
2
webshe11 2020-10-03 10:28:07 +08:00 1
|
3
faketemp OP @webshe11 看起来应该是好东西 但是安装使用太复杂了点(lll ¬ω¬)
在 windows 和 linux 使用 pip 和 pip3 都尝试了一遍 各种报错 根据报错又去安装 cmake 再试几遍 又是一堆其他错误 折腾半个多小时 只能放弃 …… |
4
webshe11 2020-10-03 17:58:15 +08:00 via Android
@faketemp 是的 这个 libproofofwork 是用 Python API 调用一个编译的东西,CTF 写 Python 脚本好使
现在我也不知道在 Windows 系统怎么装,但是 Linux 和 Mac 简单 |
6
webshe11 2020-10-03 22:36:50 +08:00 1
@faketemp WSL 我不太清楚,不过我在我的 Ubuntu 18.04 和 20.04 虚拟机试了一下,应该差不多
```bash apt-get update && apt-get install -y build-essential cmake libssl-dev && python3 -m pip install -U pip && python3 -m pip install -U proofofwork ``` 有的系统还需要 export `OPENSSL_INCLUDE_DIR` 和 `OPENSSL_ROOT_DIR` 环境变量,有的环境可能还需要 export `LDFLAGS` `CFLAGS` `CPPFLAGS` 环境变量 |
7
faketemp OP 本着“先从无到有,再从有到精”的整体思路,继续更新添加新功能
支持 md4/md5/sha1/sha224/sha256/sha384/sha512 等多种 HASH 类型; 增加-t 选项,允许 fuzz 批量输出匹配记录; 明文和 HASH 都支持"?"占位符,方便精准控制 ; 优化程序处理逻辑…… 优点: 多平台支持、绿色单文件、HASH 支持全 缺点: 虽和 python 对比效率大幅提升,但和 C 比起来还是欠佳 |
8
leishi1313 2020-10-06 03:25:28 +08:00 via Android
试试看 hashcat ?
|
9
faketemp OP @leishi1313
* 找出几个 第 7 位开始是"637766"的 SHA1 值和对应明文 * 已知 16 位 MD5 以"95ce2a"结尾,找出对应"c???new???"完整字符串 请教类似这些需求 hashcat 命令如何写? |