ハッシュ関数は、このタイプの関数の入力は任意のバイナリデータであり、出力は固定長のバイナリデータです。このタイプの関数には次のような特徴があります。
一方向性: 入力から出力を計算するのは簡単で高速ですが、出力から入力を推論することは数学的に不可能です。
衝突制約: 同じ出力を持つ 2 つの異なる入力を見つけることは非常に困難です。
これらの特性を満たす関数はすべてハッシュ関数と呼ぶことができます。あるデータをハッシュ関数の入力とし、出力を計算し、この出力をそのデータのハッシュ値と呼ぶのが通例である。
ハッシュ関数の大きな機能は、パスワードを直接保存するのではなく(つまり、平文のパスワードを保存しない)、パスワードのハッシュ値を保存することです。検証時に、入力されたパスワードのハッシュ値を再度計算するだけで、保存されたパスワードのハッシュ値と比較すると、パスワードが正しいかどうかがわかります。ハッシュ関数の一方向性と衝突制約の特性により、攻撃者がパスワードのハッシュ値を取得したとしても、パスワード自体を知ることは困難です。
攻撃者がパスワードのハッシュ値を手に入れたのですが、本当にパスワード自体を知る方法はないのでしょうか?もちろんそうではありません。パスワードのハッシュ値から直接パスワードを計算すること自体は数学的には実行できませんが、ハッシュ関数が入力から計算して出力を得るのは簡単で迅速であることを知っています。大したことは試してみることができます。人間が設定する可能性のあるパスワードもそれらだけです。一つ一つ試してみると、運が良ければ試してみることができます。ハッシュ値に対応する入力を取得しようとし続ける操作をブラストと呼ぶ。
このような考え方からhashcatが生まれ、hashcatを爆破することが簡単なことであることを証明するために生まれたと言われています。hashcatは世界最速のハッシュブラストツールであると主张しており、GPUとFGPAをサポートしています。
hashcat は高速であるだけでなく、コマンドを使用して 200 以上のハッシュ関数を専門的にサポートしています:
hashcat --help
hashcat がサポートするすべてのハッシュ関数のリストを見ることができます。ここには掲載しません。
hashcat は Kali にデフォルトでインストールされており、そのまま使用できます。しかし私のKaliはVirtualBoxにインストールされていて、なんだか仮想機会が遅いので、物理ホストでhashcatを使いたいと思っています。まずhashchatの公式サイトにアクセスしてhashcatをダウンロードしてください。現在のところ、最新版はv3.5.0で、2017.04.05にリリースされました。更新日からhashchatは活気に満ちていることがわかります。コンパイルの手間を省き、そのままバイナリパッケージをダウンロードすると、わずか2.7Mで、ともすれば数十Gのゲームと比べると小さいです。
ダウンロードが完了したら、hashcat を解凍すると、次のことが表示されます。
このようなファイルは、それぞれ 32 ビットと 64 ビットの linux および windows の実行可能ファイルです。コンピューターの状況に応じていずれかを選択してください。私は hashcat64.bin を選択しました。美しさのために、~/.bashrc ファイルに行を追加します。
alias hashcat='hashcat64.bin のパス'
保存した後、仮想端末を再度開き、~/.bashrc ファイルを有効にします。これにより、どこにいても、ディレクトリを切り替えたり、見苦しい「64.bin」を入力したりすることなく、直接 hashcat コマンドを入力することができます。下の図に示すように。
さて、これで hashcat を使用してさまざまなハッシュを爆破できます。
MD5 は、最も有名で広く使用されているハッシュ関数の 1 つであるはずです。まず、Python を使用してブラスト用にいくつかの MD5 値を生成します。コードは次のとおりです。
import hashlib パスワード = ['123123', 'bond007', 'xxxxxx', '*H@&(NT*@BR#^'] for パスワード in パスワード: MD5 = hashlib.MD5() MD5.update(パスワード) print MD5.hexdigest()
上記のコードは 4 つの文字列のハッシュ値をそれぞれ計算し、出力結果は次のとおりです。
4297f44b13955235245b2497399d7a93 cbdb7e2b1ed566ceb796af2df07205a3 dad3a37aa9d50688b5157698acfd7aee d77db958c179bbffae04b2b908b75c26
出力結果をファイル MD5.hash に保存し、1 行あたり hahs 値を 1 つずつ保存します。次に、hashcat を使用してこれらのハッシュ値をブラストします。コマンドは次のとおりです:
hashcat -w 3 -a 0 -m 0 --remove -o MD5.out MD5.hash wordlist.dic
パラメータ -w は、次の表に示すように、動作モードを指定するために使用されます。
| N | パフォーマンス | ランタイム | 消費電力 | デスクトップへの影響 |
|---|---|---|---|---|
| 1 | Low | 2 ms | 低 | 最小 |
| 2 | デフォルト | 12 ms | 経済的 | 目立つ |
| 3 | 高 | 96 ms | 高 | 応答しない |
| 4 | 悪夢 | 480 ms | 狂気 | 首なし |
パラメータ -a は攻撃モードを指定するために使用されます。0 の意味は直接的かつ連続的です。つまり、次の表に示すように、-a には 5 つの値があります。
| N | モード |
|---|---|
| 0 | ストレート |
| 1 | 組み合わせ |
| 3 | ブルートフォース |
| 6 | ハイブリッド ワードリスト + マスク |
| 7 | ハイブリッド マスク + ワードリスト |
-m ブラストするハッシュを指定するために使用されます値のハッシュ関数、0 はハッシュ関数が MD5 であることを意味します。その他の値は次の表に示します。
| N | 名前 | カテゴリ |
|---|---|---|
| 0 | MD5 | Rawハッシュ |
| 300 | MySQL4.1/MySQL5< | データベースサーバー |
| 1000 | NTLM | オペレーティングシステム |
| 1800 | sha512crypt $6$、SHA512 (Unix) | オペレーティング システム |
| 2611 | vBulletin < v3.8.5 | フォーラム、CMS、電子商取引、フレームワーク |
この表は長すぎます。ここでは、この記事で取り上げたいくつかのハッシュ関数のみを示します。パラメータ – ヘルプを使用すると、すべてが表示されます。
パラメータ – remove の意味は、特定のハッシュ値が正常にブラストされた場合、その値が MD5 から削除されることです。ハッシュを削除します。
パラメータ -o には、ブラスト結果を保存する場所を示すファイル名が続きます。
最後の 2 つのパラメータは MD5 です。ハッシュとワードリスト。dic はそれぞれブラストされるハッシュ値とパスワード辞書です。ハッシュ値とパスワード辞書は両方とも行ごとに 1 つずつあります。MD5.hash のコンテンツは Python で計算されています。適切なパスワード辞書を手元に持っていない場合は、コマンドを使用できます:
wget -O wordlist.dic https://samsclass.info/123/proj10/500_passwords.txt
下载一个。现在完事具备,按下回车,结果华丽地报错:(
clGetPlatformIDs(): CL_PLATFORM_NOT_FOUND_KHR
実行環境が不足している可能性があるので、インストールしてください。私は以下のものを合计でインストールしました:
sudo apt-get install gcc make p7zip-full git lsb-core wget http://registrationcenter-download.intel.com/akdlm/irc_nas/9019/opencl_runtime_16.1.1_x64_ubuntu_6.4.0.25.tgz tar -xvf opencl_runtime_16.1.1_x64_ubuntu_6.4.0.25.tgz cd opencl_runtime_16.1.1_x64_ubuntu_6.4.0.25 sudo ./install.sh
ネットワーク速度が良ければ、しばらくすると大丈夫です。最初のコマンドでエラーが表示されます。
/sbin/ldconfig.real: /usr/lib/nvidia-375/libEGL.so.1 is not a symbolic リンク /sbin/ldconfig.real: /usr/lib32/nvidia-375/libEGL.so.1 は ではなく シンボリック リンク
ですが、何も影響しないようなので無視してください。これらをインストールした後、再びEnterを押して、もともとエラーを報告していたコマンドを実行すると、やはり再びエラーを報告しておらず、あっという間に実行が完了した。コマンドが実行された後、MD5.hash ファイルと MD5.out ファイルの内容を確認すると、MD5.hash には 1 つのハッシュしか残っていないことがわかりました。ブラストに成功した 3 つのハッシュはファイル MD5.out に転送されています。MD5.out には 3 つのハッシュ値とその元の値が次の図に示されています。
Windows ログイン パスワードのハッシュ値は SAM ファイルに保存されます。SAM は「security account manager」の頭文字です。通常、それは
C:\Windows\system32\config\SAM
にあります。SAM ファイルは Windows によって保護されており、直接読み取ることはできません。SAMInside などのツールが必要です。Windows7仮想マシンを見つけて、hashcatという名前の新しい管理者ユーザーを作成し、パスワードを設定し、Windows7でSAMInsideをダウンロードして解凍した後、管理者権限で実行し、次の図に示すようにFile->Import Local Users vis Schedulerをクリックします。
その後、SAMInsideは「応答しない」かもしれませんが、問題ではありません。数秒辛抱強く待ってください。SAMInsideは期待どおりに私たちが望むハッシュを読み取ります。次の図に示すように:
パスワードを破壊したいユーザー「hashcat」を選択し、Ctrl+5を押してNT-hashをコピーし、hashcatがインストールされているUbuntuに戻り、コピーしたハッシュ値をファイルwin7.hashに保存します。
echo 356CEAE0C89FB65ED6D6AA7A445C4CE5 < 356ceae0c89fb65ed6d6aa7a445c4ce5:rush2112
SAM ファイルを取得する方法は、「Windows ハッシュのエクスポート方法シリーズ 1」を参照してください。以下に、仮想マシン Windows7 の SAM ファイルを読み取るプロセスを記録します。
物理マシンの場合は、Win PE でマシンを起動し、ディスク上の SAM ファイルを読み取ります。私のは仮想マシンです。仮想ディスクのファイルをファイルシステムにマウントすると、仮想ディスクのファイルを読み取ることができます。私が使っている仮想マシンは VirtualBox で、コマンド vdfuse を使用するとこれができます。vdfuse がない場合は、まず virtualbox-fuse をインストールする必要があります。
sudo apt-get install virtualbox-fuse
また、virtualbox-fuse のインストール パッケージをダウンロードして自分でインストールすることもできます。
インストールが完了すると、vdfuse コマンドが使用され、仮想ディスクのマッピングとマウントを開始できます。
mkdir -p ~/vmdisk sudo vdfuse -t vmdk -f Win7Pro32.vmdk ~/vmdisk/
この手順を実行した後、~/vmdisk ディレクトリを表示します。これには EntireDisk、Partition1、Partition2 の 3 つのファイルがあります。新しいディレクトリを作成します。
mkdir -p ~/vmdisk_en mkdir -p ~/vmdisk_1 mkdir -p ~/vmdisk_2
mount コマンドを使用して、EntireDisk、Partition1、Partition2 の 3 つのファイルをそれぞれマウントします。
sudo mount ~/vmdisk/EntireDisk ~/vmdisk_en sudo マウント ~/vmdisk/Partition1 ~/vmdisk_1 sudo mount ~/vmdisk/Partition2 ~/vmdisk_2
ディスク全体のマウントに失敗したことがわかりました。パーティション1のコンテンツは私が望んでいたものではなく、パーティション2の中にはWindows 7仮想マシンのファイルがあり、まさに私が望んでいたものでした。vmdisk_fs からターゲット SAM ファイルをコピーします:
cp ~/vmdisk_2/Windows/System32/config/SAM ./
ちなみに、システム ファイルもコピーします:
cp ~/vmdisk_2/Windows/System32/config/SYSTEM ./
SAM ファイルの内容を確認すると、次の図に示すように、プレーンテキスト ファイルではなく、確かに Windows スタイルです。
さて、SAM ファイルは正常に開かれましたが、まだハッシュが得られません。次にどうすればよいですか?ツールを使ってSAMファイルの内容を解析するしかありません。SAM ファイルと SYSTEM ファイルの両方を Kali に取り込み、コマンドを実行します:
samdump2 -o sam.hash SYSTEM sam
次に、sam.hash を表示すると、各ユーザーのログイン パスワードのハッシュ値も確認できます。sam.hash ファイルの各行はユーザーであり、各行の形式は次のとおりです。
ユーザー名: RID: LM-hash 値: NTLM-hash 値
この形式は samdump2 コマンド出力形式であり、「Windows でのハッシュ パスワード形式」ではありません。
まず、linux システムを実行するコンピュータが必要です。これは簡単ですが、仮想マシンで十分です。次に、次のコマンドを実行して新しいユーザーを追加し、パスワードを設定します。
sudo adduser justforfun
linux でのユーザーのログイン パスワードのハッシュ値はファイル /etc/shadow に保存されます (注: /etc/passwd ではありません)。次のコマンドを使用して、新しいユーザーのログイン パスワードのハッシュ値を確認します。
test@test-VirtualBox:~$ sudo tail -n 1 /etc/shadow justforfun:$6$0fokwg59$6hpMS5dM9wDT/42DDoSD0i0g/wHab50Xs9iEvVLC3V20yf1kRmXZHGXCM0Efv6XU69hdgMZ4FwaMzso4hQaGQ0:17373:0:99999:7:::
tail コマンドはファイルの最後の数行を読み取るために使用されます。デフォルトは 10 行です。パラメータ -n で行数を指定します。新しく作成したユーザーは当然最後の行にあるので、tail -n 1 で読み取ります。読み取った結果は「:」で分割されたデータです。最初の部分はユーザー名「justforfun」、2 番目の部分はパスワードのハッシュ値です。この記事では他の部分については気にする必要はありません。第二部に焦点を当てて研究します。
で始まる「$6$」は、使用されるハッシュ関数のタイプがSHA-512であることを意味し、「$6$」を除いて、linuxでは、「$1$」はMD5、「$2a$」はBlowfish、「$2y$」はBlowfish(correct handling of 8-bit chars)、「$5$」を意味します。SHA-256を指し、詳細はWikipedia:passwdを参照してください。さらに、ファイル /etc/login.defs もハッシュ アルゴリズムについて説明しています。
「$6$」から次の「$」の前までの部分「0fokwg59」は塩(SALT)である。塩とは何ですか?百度はCNB2009の質問「md5塩値とは何か」に対する回答が簡単でわかりやすいことを知っている。
は簡単に言えば、同じパスワードに異なるハッシュ値を持たせるための手段であり、塩化である。MD5自体は不可逆的ですが、現在インターネット上には多くのデータベースがアンチクエリをサポートしています。ユーザーのパスワードデータベースが誤って漏洩した場合、ハッカーはアンチクエリ方式でユーザーのパスワードを取得したり、データベースに頻繁に出現するハッシュコード(つまり多くの人が使用している)を暴力的にクラックしたりすることができます(通常は弱いパスワードであるため)。塩値は、パスワードのハッシュ処理中に追加される追加のランダム値です。たとえば、私の id は 123456 です。データベースに保存されている場合は、文字列「123456/123456このようにして、別の愚かなパスワードが 123456 の場合、依然として異なるハッシュ値を構築でき、検証に成功できます。この時、私のidは塩値としてパスワードの複雑なハッシュを行います。だから。。塩値の役割は、データベース漏洩による損失を減らすことです。もしあなたのRPが非常に良くて、私のパスワードが123456であることを当てたら、私もあなたを止めることはできませんよ
この答えはmd5に対して、他のハッシュ関数も同じです。塩の後の部分がハッシュ値になります。次に、2 番目の部分全体を linux.hash ファイルにコピーします。linux.hash の内容は次のようになります。
$6$0fokwg59$6hpMS5dM9wDT/42DDoSD0i0g/wHab50Xs9iEvVLC3V20yf1kRmXZHGXCM0Efv6XU69hdgMZ4FwaMzso4hQaGQ0
次に、次のコマンドを使用して linux ログイン パスワード ハッシュをブラストします。
hashcat -w 3 -a 0 -m 1800 --remove -o linux.out linux.hash wordlist.dic
しばらくして、爆破が完了し、結果を確認します:
werner@Yasser:~/hashcat$ cat linux.out $6$0fokwg59$6hpMS5dM9wDT/42DDoSD0i0g/wHab50Xs9iEvVLC3V20yf1kRmXZHGXCM0Efv6XU69hdgMZ4FwaMzso4hQaGQ0:4321
発破が成功したことがわかります。
まず、Mysql が必要です。たまたま私の仮想マシンにあります。Baidu は、Mysql ログイン パスワードのハッシュ値がファイル user.MYD に保存されていることを知っています。ファイル user.MYD はどこにありますか?わからないので、
test@test-VirtualBox:~$ sudo find / -name user.MYD /var/lib/mysql/mysql/user.MYD
/var/lib/mysql/mysql/user.MYD で見つかりました。ファイルの内容を確認してください:
sudo cat /var/lib/mysql/mysql/user.MYD
プレーンテキスト ファイルではありません。ユーザー root のログイン パスワードのハッシュ値は次のとおりです。
6B825255FB466413D6B1B724644E23428C94BBCB
この値をファイル mysql.hash に保存し、次のコマンドを使用して mysql ログイン パスワードをブラストします。ハッシュ:
hashcat -w 3 -a 0 -m 300 --remove -o mysql.out mysql.hash wordlist.dic
しばらくして、爆破が完了し、結果を確認します:
werner@Yasser:~/hashcat$ cat mysql.out 6b825255fb466413d6b1b724644e23428c94bbcb:viper
発破が成功したことがわかります。
Discuz!我が国で有名なphpフォーラムプログラムであり、非常に広く使用されています。さあ、Discuzを爆破しましょう!ユーザーパスワードのハッシュ値。まずハッシュ値を見つけなければなりませんが、どこから見つけるのでしょうか?もちろんDiscuzから!のデータベースにあります。
ディスクーズ可能!データベースはどこにありますか?私はこのように解決して、その公式サイトから最新版のDiscuzをダウンロードしました!ソースコードを実行してインストールすると、Discuz が得られます!のデータベース
Discuz!デフォルトのデータベース名は ultrax で、pre_ucenter_members テーブルにはログイン パスワードのハッシュ値が保存されます。「pre_」はデフォルトのプレフィックスであり、インストール中に変更できます。「ucenter_members」は変更されません。次の sql 文を使用してログイン パスワードのハッシュ値を照会します:
select password,salt from pre_ucenter_members;
ハッシュ値と塩値をファイルに保存します:
echo 69bcba126b93c6f397983629a0f70553:c13fd9 > discuz.hash
ハッシュ値と塩値は同じ行にあり、「:」で分割されています。最後に、次のコマンドを使用して Discuz ログイン パスワード ハッシュをブラストします。
hashcat -w 3 -a 0 -m 2611 --remove -o discuz.out discuz.hash wordlist.dic
しばらくして、爆破が完了し、結果を確認します:
werner@Yasser:~/hashcat$ cat discuz.out 69bcba126b93c6f397983629a0f70553:c13fd9:winter
発破が成功したことがわかります。
これまで、わずか500単語の小さな辞書を使って、毎回ほんの一瞬で、様々なハッシュをスムーズに爆破しています。おかしくないですか?これは私がhashcatを使う練習のために辞書内にわざと弱いパスワードを設定したからです。そうでなければ、爆発しないのは気分が悪いのではないでしょうか。実際にはこんなに運が良いはずがない。それほど弱くないパスワードのmd5値を適当に計算して、大きな辞書で爆破して、運を試す一方で、hashcatがどれだけ速いかを見てみましょう。
まず MD5 値を計算します。
import hashlib
MD5 = hashlib.MD5()
MD5.update("werner123456!!!")
print MD5.hexdigest()出力は次のとおりです:
b17133f9abff287ed0546c1af2b171f7
次に、9.4 億のパスワードを含む 10.5G サイズの辞書を選択し、爆破を開始します:
hashcat -w 3 -a 0 -m 0 --remove -o big.out b17133f9abff287ed0546c1af2b171f7 big.dic
ハッシュ値が1つしかない場合は、ファイルに保存する必要はなく、コマンドラインの引数に直接書き込んでもよいことに注意してください。寝る前に爆破を始め、翌日起きて結果を見ると、
Started: Wed Jul 26 22:55:27 2017 Stopped: Wed Jul 26 23:02:28 2017
わずか7分でした!7時間かかると思っていたのですが、予想の60倍も早かったです!残念ながら、ハッシュ値の爆破に成功しなかった。どうやら「werner123456!!!」はパスワード辞書にはないようだ。100Gのパスワード辞書を用意する必要があるようですが、こんなに大きな辞書を保存したり移行したりするのは非常に不便で、他に方法はないのでしょうか?もちろんありますが、攻撃モードを覚えていますか?私たちはずっと「Straight」モードを使っています。次に、他のいくつかのモードを検討しましょう。
hashcat を使用してハッシュをブラストするには、最初にハッシュを見つけることができます。システムやソフトウェアによってハッシュが保存される場所が異なり、ハッシュ値を正確に見つける必要があります。2 つ目は、ハッシュ タイプを正しく判断し、hashcat がこのタイプのハッシュをサポートしているかどうかを判断し、-m の正しいパラメータを選択することです。そうしないと、成功することはほとんど不可能です。第三に、パスワード辞書のほうがいい。最終的に爆破に成功できるかどうかは、やはり辞書を見る。パスワード辞書は大きければ大きいほど良いわけではありませんが、とにかく大きい方が良いです。hashcat もスピードで有名です。大きな辞書は hashcat にとって問題ではありません。ここでは、より良い辞書を記録します: 過去の漏洩ゲート + 一般的に使用される弱いパスワード辞書コレクション。7Z、解凍パスワードは anywlan です。さらに、小さな辞書をたくさん収集した場合は、小さな辞書を結合、並べ替え、重複を除去して、hashcat ブラストを容易にするための大きな辞書を取得できます。小さな辞書が同じディレクトリにある場合は、1つのコマンドで処理できます。
cat * | sort | uniq > Merge.dic
小さな辞書がカテゴリごとに整理され、複数のレベルのディレクトリに分散されている場合はどうなりますか?明らかに cat コマンドだけでは十分ではありませんが、実際には 1 つのコマンドだけで十分です。小さな辞書がすべてディレクトリ MyDictionary に保存されていると仮定すると、コマンドは次のように書くことができます。
find ./MyDictionary -type f -exec cat {} \; | ソート | uniq > Merge.dic