hashcatについての紹介
あいさつ
初めまして。この環境では「あまねみさ」という名前を借りて、情報を発信していこうと思っています。現在、ペンテスターとして働いていますが、技術系の記事は初心者にとって難解で、実際の使い方がよくわからないものも多いと感じています。(自分も最初は調べることから躓きましたw)
そこで、これから自分の知識整理も兼ねて、初心者でもわかりやすい形でツールや技術の使い方をシンプルにまとめていきます。よろしくお願いします。
hashcatとは
hashcatは、hash値を使ってパスワードを解析するためのツールです。要するに、特定のhash値から対応するパスワードを見つけることができます。
下準備
hashcatを使用するために必要なもの
1.hash値
2.PC(GPUを使ったほうが解析速度が速い)
3.忍耐力=かなり時間かかることもあるため、特に複雑なパスワードでは推測をしていくことで解析時間を短くする方法が必要です。
Installの手順
1.インストールコマンドの実行
$ sudo apt update && sudo apt install hashcat
hashcatの基本の使い方
$ hashcat -m 0 -a 0 hash.txt word.txt'
基本的な使い方は上のような使い方です。
上のコマンドの詳細を説明していきます。
* hash.txt
の中にviコマンドなどを使って自分が解析をしたいhash値を入れてください。
* word.txt
は解析に使う辞書ファイルです。詳細は後程説明します。
オプション
hashcatの-m
とは
-m
とはhash typeを指定するオプションです。
*hash typeとはhashcatでhash値を解析するときにhash値のタイプを自分で指定しないといけません。
ではどのようにしてhash値のタイプを知ることができるのでしょうか??
A.
hashid hash.txt
これを実行すればhash typeを知ることができます。
hashcatはJohn the Ripperのように自動でハッシュタイプを判定する機能がないため実行時にhash typeを自分で指定する必要があります。
よく使うものを下に載せときます。
ハッシュタイプ | 特徴 | -mで指定する値 |
---|---|---|
MD5 | 32文字の16進数 | -m 0 |
SHA-1 | 40文字の16進数 | -m 100 |
SHA-256 | 64文字の16進数 | -m 1400 |
bcrypt | Blowfish-based | -m 3200 |
NTLM | Windows パスワード | -m 1000 |
MySQL 5.x | SHA-1 | -m 300 |
WPA/WPA2 | Wi-Fi | -m 22000 |
SHA-512 | -m 1800 | |
Kerberos 5 TGS-REP | チケット | -m 13100 |
LM Hash | Windows古い形式 | -m 3000 |
詳細はこちらをご覧ください。
https://hashcat.net/wiki/doku.php?id=example_hashes
hashcatの-a
とは
-a
とは攻撃モードを指定するオプションです。
でも、攻撃モードと言ってもわからない方も多いかと思われます。
hashcatには5つのアタックモードがあります。
攻撃手法 | -aで指定する値 |
---|---|
辞書攻撃 | -a 0 |
辞書の組み合わせ攻撃 | -a 1 |
ブルートフォース攻撃 | -a 3 |
辞書とマスクの組み合わせ攻撃 | -a 5 |
マスクと辞書の組み合わせ攻撃 | -a 7 |
これらを完璧に説明することは難しいですができるだけわかりやすく説明してみます。
1.辞書攻撃
辞書攻撃とは辞書ファイル内の単語をハッシュ値と照合します。
$ hashcat -m 1500 -a 0 hash.txt rockyou.txt
裏を返せば辞書内にあるワードしかhashcatを使い解析をすることができません。
有名なところでいうとrockyou.txt
です。
CTFではよく使われたりしています。
https://github.com/praetorian-inc/Hob0Rules/blob/master/wordlists/rockyou.txt.gz
2.辞書の組み合わせ攻撃
辞書の組み合わせ攻撃とは二つの辞書の単語を組み合わせて攻撃します。
$ hashcat -m 0 -a 1 hash.txt wordilst-1.txt wordlist-2.txt
例えば以下のような辞書1,辞書2があったとします。
hellow
see
good
other
このような場合は
hellowgood
hellowother
seegood
seeother
このような感じで辞書の組み合わせ攻撃が行われます。
3.ブルートフォース攻撃
ブルートフォース攻撃とは総当たりで全組み合わせを試す攻撃です。そのため別名総当たり攻撃です。
$ hashcat -a 3 -m 0 hash.txt ?a?a?a?a?a?a?a?a
現実的ではないため最終手段になります。そのため相当の時間がかかるので高性能なGPUを積んだPCを使い攻撃をするまたは、下で説明する辞書とマスクの組み合わせ攻撃、マスクと辞書の組み合わせ攻撃で選択肢を狭めることをお勧めします。
*?a?a?a?a?a?a?a?a
これはフォーマットを自分で指定しています。
番外編
マスク攻撃とは?
マスク攻撃とは特定のパターンに基づいてパスワードの候補を生成する攻撃方法です。
?l: 小文字(a-z)
?u: 大文字(A-Z)
?d: 数字(0-9)
?s: 特殊文字(!@#$%^&*, etc.)
?a: 任意の文字(小文字、大文字、数字、特殊文字のすべて)
?b: 8ビットASCII文字
?1, ?2: カスタム文字
マスク自体は文字がどの形なのかを指定しているのでもしどれかわからないときは?a
またはカスタム文字を指定して使うようにしましょう。
カスタム文字の使い方
$ hashcat -a 3 -m 0 hash.txt -1 '?l?d' '?1?1?1?1?1?1'
このように定義をすると小文字または数字で6文字の文字列に対してブルートフォースします。
やり方は実にシンプルで-1
を箱として考えてください。(カスタムマスクは最大4つまで定義でき、-2 xxx -3 xxx -4 xxx
のように定義できます。)
そして箱の中には何が入るかを定義します。今回は小文字と数字として定義しました。
そして最後にそのカスタム文字が何文字か(?1で一塊なので文字数分書く)を定義します。
今回は6文字ですので'?1?1?1?1?1?1'``になりましたが5文字なら
'?1?1?1?1?1'としても可能です。 そして5文字のカスタム文字と6文字目は特殊文字のみ!という定義も可能です。 やり方としては
'?1?1?1?1?1?s'`
これにより5文字の数字または小文字と6文字目の特殊文字という形式でパスワードの解析がされます。
マスクを使うために覚えといてほしいことはカスタム以外は文字数がわかっているのならそのままフォーマットを指定する。もしカスタム文字を使うのなら先に箱を作り定義をする。
以上を覚えておけば簡単に使えると思います。
ちなみに、パスワードが8文字以上で何文字かは予想できる文字列があるという推測できていると想定して考えてみようと思います。
文字数の制限
単刀直入に言うと
$ hashcat -m 0 -a 3 hash.txt --increment --increment-min 8 --increment-max 15 '?d?d?d?d'
これで最低8文字目から15文字目まで解析をすることができます。(00000000~999999999999999)
上で説明したように?d
を?a
に変えることですべての文字、数字に対応することができます。
4.辞書とマスクの組み合わせ攻撃
辞書とマスクの組み合わせ攻撃とは辞書ファイルの単語に対してマスクを適用します。
$ hashcat -m 0 -a 6 -o cracked.txt hash.txt wordlist.txt '?l?u?d?l?l'
wordlist.txtの中身がhellow
だった場合
このようなコマンドを実行するとhellowaA1aa
のようなものが生成されます。
要するにwordlist.txtの中身とマスクで定義したものの組み合わせが辞書の単語の後に生成されます。
5.マスクと辞書の組み合わせ攻撃
マスクと辞書の組み合わせ攻撃とは辞書ファイルの単語に対してマスクを適応します。
$ hashcat -m 0 -a 7 -o cracked.txt hash.txt wordlist.txt '?l?u?d?l?l'
wordlist.txtの中身がhellow
だった場合
このようなコマンドを実行するとaA1aahellow
のようなものが生成されます。
要するにwordlist.txtの中身とマスクで定義したものの組み合わせが辞書の単語の前にマスクが適用されます。逆になっているだけですね。
最後に
今回初めてQiitaに投稿してみました。
仕事をするにあたり頻繁に使用するツールの使い方を自分なりに初心者でもわかりやすく理解しやすいをモットーに投稿していこうと思うのでよろしくお願いします。