分享个 CTF 小工具 bruteHASH

2020-10-03 08:22:12 +08:00
 faketemp

别问,问就是为了 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 值起始字符串

示例

由于众所周知的原因,示例图片无法加载显示
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 大佬批评指证

项目地址

https://github.com/playGitboy/bruteHASH

3443 次点击
所在节点    分享创造
9 条回复
danbai
2020-10-03 09:07:06 +08:00
借个楼,golang 写工具确实香。我没事也写些小工具整合成一个 cli 工具集。https://github.com/danbai225/A_Toolset
webshe11
2020-10-03 10:28:07 +08:00
这种场合我以前都用这个

https://github.com/kmyk/libproofofwork

不知道对比性能如何
faketemp
2020-10-03 17:26:58 +08:00
@webshe11 看起来应该是好东西 但是安装使用太复杂了点(lll ¬ω¬)
在 windows 和 linux 使用 pip 和 pip3 都尝试了一遍 各种报错
根据报错又去安装 cmake 再试几遍 又是一堆其他错误

折腾半个多小时 只能放弃 ……
webshe11
2020-10-03 17:58:15 +08:00
@faketemp 是的 这个 libproofofwork 是用 Python API 调用一个编译的东西,CTF 写 Python 脚本好使
现在我也不知道在 Windows 系统怎么装,但是 Linux 和 Mac 简单
faketemp
2020-10-03 18:18:42 +08:00
@webshe11 在 wsl 下安装 cmake 最新版 pip 尝试多次各种错误安装失败
求教大佬安装指引
webshe11
2020-10-03 22:36:50 +08:00
@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` 环境变量
faketemp
2020-10-05 16:23:21 +08:00
本着“先从无到有,再从有到精”的整体思路,继续更新添加新功能

支持 md4/md5/sha1/sha224/sha256/sha384/sha512 等多种 HASH 类型;
增加-t 选项,允许 fuzz 批量输出匹配记录;
明文和 HASH 都支持"?"占位符,方便精准控制 ;
优化程序处理逻辑……

优点:
多平台支持、绿色单文件、HASH 支持全

缺点:
虽和 python 对比效率大幅提升,但和 C 比起来还是欠佳
leishi1313
2020-10-06 03:25:28 +08:00
试试看 hashcat ?
faketemp
2020-10-06 07:04:40 +08:00
@leishi1313
* 找出几个 第 7 位开始是"637766"的 SHA1 值和对应明文
* 已知 16 位 MD5 以"95ce2a"结尾,找出对应"c???new???"完整字符串

请教类似这些需求 hashcat 命令如何写?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/712307

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX