Day 22 Password Attacks - 密码攻击(hashcat)

前言

昨天体验过搭配密码字典的工具来暴力破解,直觉能想到简易的破解的方法,就是针对密码字典里面的密码,一个个经过各种杂凑法来跟目标字串比对,比对到了就同时找到了密码以及它使用的杂凑方法,所以说如果没有密码字典去猜测的话,也可以透过列举的方式来做比对,例如以8位纯数字密码,只要能列举00000000999999999每个组合的杂凑值,总有命中的时候,这种预先计算各种组合杂凑值的表就是彩虹表

考虑到密码的组合可以配上大小写英文让组合更加复杂,加上杂凑方法有很多,更别提有加盐机制的杂凑方法了,这样的排列组合非常非常之多,要想能列举并破解在古早时候受限於计算能力会需要非常久的时间,而这种列举的手法放到区块链热门的今日来说,透过GPU来大量生成杂凑来取得彩虹表也不是不可能的事了。

工具介绍

今天要介绍的工具是hashcat,就是能用到GPU来快速产生并比对杂凑值,且它用的是OpenCL,所以支援的显卡相对较多,且它支援的杂凑方法也非常多,透过hashcat -h可以看到支援的杂凑法或是模式,介绍很长,所以这边只列出基本用法

- [ Basic Examples ] -

  Attack-          | Hash- |
  Mode             | Type  | Example command
 ==================+=======+==================================================================
  Wordlist         | $P$   | hashcat -a 0 -m 400 example400.hash example.dict
  Wordlist + Rules | MD5   | hashcat -a 0 -m 0 example0.hash example.dict -r rules/best64.rule
  Brute-Force      | MD5   | hashcat -a 3 -m 0 example0.hash ?a?a?a?a?a?a
  Combinator       | MD5   | hashcat -a 1 -m 0 example0.hash example.dict example.dict

其中-m是指定杂凑方法的类型,後方带的数字代表的类型都可以在hashcat -h看到

- [ Hash modes ] -
    # | Name                                             | Category ======+==================================================+================
  900 | MD4                                              | Raw Hash
    0 | MD5                                              | Raw Hash
  400 | phpass                                           | Generic KDF

-a代表的是破解模式

- [ Attack Modes ] -
  # | Mode
 ===+======
  0 | Straight             #直接字典破解
  1 | Combination          #组合破解
  3 | Brute-force          #暴力破解

接着先产出一个简单的md5来破解看看

echo -n 'abcdef' | md5sum | cut -d " " -f 1 > /tmp/hash

这边单纯体验,所以很明确告诉hashcat要使用md5,然後使用暴力破解格式为6个英文小写

hashcat -m 0 -a 3 /tmp/hash ?l?l?l?l?l?l   

结果如下,因为缩小了很多范围,所以7秒就找到了密码

hashcat (v6.1.1) starting...

OpenCL API (OpenCL 1.2 pocl 1.6, None+Asserts, LLVM 9.0.1, RELOC, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]
=============================================================================================================================
* Device #1: pthread-Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz, 1423/1487 MB (512 MB allocatable), 2MCU

Minimum password length supported by kernel: 0
Maximum password length supported by kernel: 256

Hashes: 1 digests; 1 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates

Applicable optimizers applied:
* Zero-Byte
* Early-Skip
* Not-Salted
* Not-Iterated
* Single-Hash
* Single-Salt
* Brute-Force
* Raw-Hash

ATTENTION! Pure (unoptimized) backend kernels selected.
Using pure kernels enables cracking longer passwords but for the price of drastically reduced performance.
If you want to switch to optimized backend kernels, append -O to your commandline.
See the above message to find out about the exact limits.

Watchdog: Hardware monitoring interface not found on your system.
Watchdog: Temperature abort trigger disabled.

Host memory required for this attack: 64 MB

e80b5017098950fc58aad83c8c14978e:abcdef          
                                                 
Session..........: hashcat
Status...........: Cracked
Hash.Name........: MD5
Hash.Target......: e80b5017098950fc58aad83c8c14978e
Time.Started.....: Thu Oct  7 11:06:30 2021 (3 secs)
Time.Estimated...: Thu Oct  7 11:06:33 2021 (0 secs)
Guess.Mask.......: ?l?l?l?l?l?l [6]
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: 87634.3 kH/s (7.63ms) @ Accel:512 Loops:676 Thr:1 Vec:8
Recovered........: 1/1 (100.00%) Digests
Progress.........: 249892864/308915776 (80.89%)
Rejected.........: 0/249892864 (0.00%)
Restore.Point....: 368640/456976 (80.67%)
Restore.Sub.#1...: Salt:0 Amplifier:0-676 Iteration:0-676
Candidates.#1....: sadnqk -> xqfpef

Started: Thu Oct  7 11:06:27 2021
Stopped: Thu Oct  7 11:06:34 2021

而如果再次执行同一个破解过的hash,工具会建议你使用--show来看,因为破解的结果已经被储存在了/home/kali/.hashcat/hashcat.potfile

hashcat -m 0 -a 3 /tmp/hash ?l?l?l?l?l?l  --show

接着稍微修改一下密码重新产生md5来试试看

echo -n 'abzdef' | md5sum | cut -d " " -f1 > /tmp/hash2

然後再次使用hashcat

hashcat -m 0 -a 3 /tmp/hash2 ?l?l?l?l?l?l

发现还是一样飞快

Started: Thu Oct  7 11:15:18 2021
Stopped: Thu Oct  7 11:15:26 2021

试着不给格式,同一个密码试试看,但要记得先移除先前的结果

rm /home/kali/.hashcat/hashcat.potfile #移除档案
hashcat -m 0 -a 3 /tmp/hash2

这次解开的时间稍微多了一些

Started: Thu Oct  7 11:15:56 2021
Stopped: Thu Oct  7 11:16:30 2021

从上面简单的实验可知,6码的密码长度真的短到完全没有安全性可言,但即使密码长度够长,如果透过更多更强的GPU提供强大算力,也有可能成功破解,所以就要回头过来检讨杂凑方法本身了,像md5sha1这样的老牌杂凑法,已经被证明了安全性不足,所以才会有所谓加盐机制或是延伸出的动态杂凑的方法,不知道会不会有一天破解的速度会快到追不上呢?我只知道不会有我放弃快


<<:  那些被忽略但很好用的 Web API / IntersectionObserver

>>:  成员 25 人:如何安稳地抽走猫躺的软垫

Day 9 [Python ML、特徵工程] 分类工程

import pandas as pd from sklearn.preprocessing imp...

Day27 - 部属到正式环境 (2)

今天的实作内容主要根据教学网站进行。 将应用程序安装到Heroku 环境设定 Heroku主要利用四...

从 IT 技术面细说 Search Console 的 27 组数字 KPI (21) :KPI 总表,如何填表

为甚麽只靠 Google Search Console 的报表是不够的呢? 因为早期 Webmast...

框架在手,工作我有:MockK的简介?真的只是简介⋯⋯

随着考试的日子越来越接近,系里的气氛也越来越紧张。 「这麽一观察,系里选修这门课的人还真多。」诗忆看...

[Day12] 让 Linux 的 systemd 帮我们管理 API 程序

昨天我们成功的把 API 程序布署到 GCP 的 VM 上了。不过,我们有一个问题:只要跑了 .NE...