家studyをつづって

IT技術やセキュリティで勉強したことをつづっています。

hashcatの使い方

目次

 

hashcatの概要

hashcatはパスワードクラックのツールです。
hashcatで行うパスワードクラックは稼働しているシステムに対してアカウントがロックされるまでログイン試行を行うようなものではなく、パスワードのハッシュ値から元のパスワードを割り出すものです。
一般的にシステム上のパスワードに関しては平文で保持されるケースは稀で、NISTのガイドラインにおいても「パスワードは適切な一方向鍵導出関数を用いてソルト付きでハッシュ化されなければならない(SHALL)。」と記載されているため、パスワードの保存に関して平文での保存は認めていません。

 

 

 

hashcatによるパスワードクラックの手法

hashcatはブルートフォース攻撃以外にもパスワードクラックの手法が実装されています。

辞書攻撃

辞書攻撃はパスワードの候補のリストを指定し、その中の単語を1つずつ試していく方法です。リストの例としては、「rockyou.txt」等があります。

コンビネーター攻撃

2つの単語をつなげたパスワードに対する攻撃です。

 

マスク攻撃

特定の形式のパスワードに対する攻撃です。
先頭が大文字で6文字の小文字が続き、末尾は数字1つといった形式を指定することが可能です。

 

ルールベース攻撃

対象のパスワードの構成に当たりがつく際に選択する攻撃手法です。

 

ブルートフォース攻撃

総当たりで試行する攻撃です。

 

なお、hashcatでは「-a」オプションで上記攻撃モードが指定できます。

オプション モード名 内容
0 Straight 辞書攻撃
1 Combination コンビネーション攻撃
3 Brute-force ブルートフォース攻撃
6 Hybrid Wordlist + Mask 辞書+マスク
7 Hybrid Mask + Wordlist マスク+辞書

hashcat.net

 

hashcatを使ったパスワードクラックの例

hashcatを使ったパスワードクラックの操作について以下に記載します。

1.pwdump形式のパスワードクラック

pwdumpとは

pwdumpは、SAMデータベース等からアカウントのLMおよびNTLMのパスワードハッシュを出力するWindowsのプログラムの名称です。

この形式で出力されたファイルは以下のようになります。

pwdump形式の出力例

上記「Jon」の例でみてみると以下のような構成になります。

  • 「Jon」:ユーザー名
  • 1000:相対識別子 (500 は管理者、502はKerberosアカウント等)
  • aad3b435b51404eeaad3b435b51404ee:LMハッシュ
  • ffb43f0de35be4d9917ac0cc8ad57f8d:NTLMハッシュ

pwdump形式のパスワードクラック

上記のJonの内容をそのままファイルに貼り付けて保存(以下の例では「jonorg」とします)し、以下のコマンドで解析を行います。

hashcat -m 1000 -a 0 ./jonorg rockyou.txt

オプションの説明

  • -m 1000    :ハッシュタイプ(この場合はNTLM)を指定します。
  • -a 0    :攻撃モード(この場合は辞書攻撃)を指定します。
  • ./jonorg    :解析したいハッシュが含まれるpwdump形式のファイルです。
  • rockyou.txt    :使用する辞書ファイルです。

なお、hashcatは一度解析したパスワードハッシュ値を「hashcat.potfile」として記録し、一度解析したハッシュ値を解析対象から除外します。

ご参考:ファイルのパス
~/.local/share/hashcat/hashcat.potfile

そのため、過去の解析分を削除し、新たに解析を行うには、Hashcatが生成したhashcat.potfileファイルを削除または「--potfile-disable」のオプションを指定して実行します。

 

2.hashcatでZipファイルのパスワードを解読する

実際にhashcatでパスワード付きZipファイルを解読してみます。
今回はKali Linux上で以下の操作を実行しました。

 

パスワード付きZIPの作成

以下のコマンドでパスワードが「pass」と設定したZipファイルを作成します。

echo "Hello!" > Hello.txt
zip -e --password=pass Hello.txt.zip Hello.txt

 

Zipからハッシュ値を取得の解読

johnの中に含まれるzip2johnを使ってZipファイルよりハッシュ値を取得します。

zip2john Hello.txt.zip | cut -d ":" -f 2 > Hello.txt.zip.hash

上記コマンドにより以下のようなハッシュ値が取得できます。

root@kali:~# cat Hello.txt.zip.hash
$pkzip2$1*2*2*0*13*7*b042d89e*0*43*0*13*b042*ab66*c354e2c6e579378c0784e27df319185a18104b*$/pkzip2$

取得したハッシュ値の形式を以下のサイトで確認します。

hashcat.net

今回はpkzipに該当するもの(17200)を確認します。

 

ハッシュ値の探索

hashcatを使ってハッシュ値を探索します。以下のようなコマンドで実行します。

hashcat -m 17210 -a 3 Hello.txt.zip.hash --increment '?a?a?a?a' 

  • -m:ハッシュ形式の指定
  • -a:アタックモードの指定
  • --increment:あとに続くマスク形式'?a?a?a?a'の文字数に至るまで一文字ずつ増やす設定(この例では4文字まで実行)
  • '?a?a?a?a':マスク指定

マスクの文字設定 

オプション 概要 内容
?l アルファベット小文字 abcdefghijklmnopqrstuvwxyz
?u アルファベット大文字 ABCDEFGHIJKLMNOPQRSTUVWXYZ
?d 数字 0123456789
?s 記号 !”#$%&'()*+,-./:;<=>?@[\]^_`{|}~
?a ?l?u?d?sと同じ  
?b 16進数 0x00 – 0xff

hashcat.net

 

上記を実行すると1分もしないうちに以下の結果が表示されます。 

$pkzip2$1*2*2*0*13*7*b042d89e*0*43*0*13*b042*ab66*c354e2c6e579378c0784e27df319185a18104b*$/pkzip2$:pass

 

ここまでで、Zipファイルに設定したパスワードを解析できました。

 

ご参考:Hack The Boxでの利用例

オンラインでセキュリティスキルの勉強ができるHack The Box(HTB)で実際にhashcatを使用したマシンの記事を以下に記載します。

【Hack The Box】Sunday - 家studyをつづって

【Hack The Box】node - 家studyをつづって

【Hack The Box】Previse - 家studyをつづって

【Hack The Box】Delivery - 家studyをつづって

【Hack The Box】Armageddon - 家studyをつづって