V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
faketemp
V2EX  ›  分享创造

分享个 CTF 小工具 bruteHASH

  •  
  •   faketemp · 2020-10-03 08:22:12 +08:00 · 3420 次点击
    这是一个创建于 1272 天前的主题,其中的信息可能已经有所发展或是发生改变。

    别问,问就是为了 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

    第 1 条附言  ·  2020-10-09 06:44:45 +08:00
    9 条回复    2020-10-06 07:04:40 +08:00
    danbai
        1
    danbai  
       2020-10-03 09:07:06 +08:00 via Android
    借个楼,golang 写工具确实香。我没事也写些小工具整合成一个 cli 工具集。https://github.com/danbai225/A_Toolset
    webshe11
        2
    webshe11  
       2020-10-03 10:28:07 +08:00   ❤️ 1
    这种场合我以前都用这个

    https://github.com/kmyk/libproofofwork

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

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

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

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

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

    请教类似这些需求 hashcat 命令如何写?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1367 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 23:35 · PVG 07:35 · LAX 16:35 · JFK 19:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.