ハッシュ関数は、このタイプの関数の入力は任意のバイナリデータであり、出力は固定長のバイナリデータです。このタイプの関数には次のような特徴があります。
一方向性: 入力から出力を計算するのは簡単で高速ですが、出力から入力を推論することは数学的に不可能です。
衝突制約: 同じ出力を持つ 2 つの異なる入力を見つけることは非常に困難です。
これらの特性を満たす関数をハッシュ関数と呼ぶことができます。あるデータをハッシュ関数の入力とし、出力を計算し、この出力をそのデータのハッシュ値と呼ぶのが通例である。
ハッシュ関数の大きな機能は、パスワードを直接保存するのではなく(つまり、平文のパスワードを保存しない)、パスワードのハッシュ値を保存することです。検証時に、入力されたパスワードのハッシュ値を再度計算するだけで、保存されたパスワードのハッシュ値と比較すると、パスワードが正しいかどうかがわかります。ハッシュ関数の一方向性と衝突制約の特性により、攻撃者がパスワードのハッシュ値を取得したとしても、パスワード自体を知ることは困難です。
攻撃者はパスワードのハッシュ値を取得しましたが、本当にパスワード自体を知る方法はありませんか?もちろんそうではありません。パスワードのハッシュ値から直接パスワードを計算すること自体は数学的には実行できませんが、ハッシュ関数が入力から計算して出力を得るのは簡単で迅速であることを知っています。大したことは試してみることができます。人間が設定する可能性のあるパスワードもそれらだけです。一つ一つ試してみると、運が良ければ試してみることができます。ハッシュ値に対応する入力を取得しようとし続ける操作をブラストと呼ぶ。
このような考え方に基づいて、hashcatが生まれました。hashcatは、hashを爆破することが簡単なことであることを証明するために生まれたと言われています。hashcatは世界最速のハッシュブラストツールであると主张しており、GPUとFGPAをサポートしています。
hashcatは高速であるだけでなく、コマンドを使用して200種類以上のハッシュ関数を専門的にサポートしています:
hashcat --help
hashcatがサポートするすべてのハッシュ関数のリストを見ることができます。
Kali にはデフォルトで hashcat がインストールされており、そのまま使用できます。しかし私の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', 'ボンド007', 'xxxxxx', '*H@&(NT*@BR#^'] for パスワード in パスワード: md5 = hashlib.md5() md5.update(パスワード) print md5.hexdigest()
上記のコードは 4 つの文字列のハッシュ値をそれぞれ計算します。出力結果は次のとおりです。
4297f44b13955235245b2497399d7a93 cbdb7e2b1ed566ceb796af2df07205a3 dad3a37aa9d50688b5157698acfd7aee d77db958c179bbffae04b2b908b75c26
出力結果をファイル md5.hash に保存し、1 行あたり 1 つの hahs 値を使用します。次に、hashcat を使用してこれらのハッシュ値をブラストします。コマンドは次のとおりです:
hashcat -w 3 -a 0 -m 0 --remove -o md5.out md5.hash wordlist.dic
パラメータ -w は、次の表に示すように、動作モードを指定するために使用されます。
| N | パフォーマンス | ランタイム | 消費電力 | デスクトップへの影響 |
|---|---|---|---|---|
| 1 | Low | 2 ms | Low | Minimal |
| 2 | Default | 12 ms | 経済的 | 目立つ |
| 3 | High | 96 ms | High | Unresponsive |
| 4 | Nightmare | 480 ms | Insane | Headless |
パラメータ -a は攻撃モードを指定するために使用されます。0 の意味は、次の表に示すように、直接的かつ連続的に、つまりパスワード辞書を使用してブラストされます。-a の値は 5 つあります。
| N | Mode |
|---|---|
| 0 | Straight |
| 1 | Combination |
| 3 | Brute-force |
| 6 | Hybrid Wordlist + Mask |
| 7 | Hybrid Mask + Wordlist |
-m ブラストするハッシュを指定するため値のハッシュ関数、0 はハッシュ関数が md5 であることを意味し、その他の値は次の表に示します:
| N | Name | Category |
|---|---|---|
| 0 | MD5 | Raw Hash |
| 300 | MySQL4.1/MySQL5 | データベースサーバー |
| 1000 | NTLM | オペレーティングシステム |
| 1800 | sha512crypt $6$, SHA512 (Unix) | オペレーティングシステム |
| 2611 | vBulletin < v3.8.5 | Forums, CMS, E-Commerce, Frameworks |
この表は长すぎます。ここでは、この记事で取り上げたいくつかのハッシュ関数のみを示します。parameter–help を使用すると、すべてが表示されます。
parameter–remove の意味は、ハッシュ値がブラストされると、その値が md5.hash から削除されることです。
parameter-o には、ブラスト結果を保存する場所を示すファイル名が続きます。
最後の 2 つのパラメータ md5. hash と wordlist.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 クレジットカード _ opencl_runtime_16.1.1_x64_ubuntu_6.4.0.25.tgz 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 link /sbin/ldconfig.real: /usr/lib32/nvidia-375/libEGL.so.1 is not a symbolic link
しかし、何も影響しないようなので、無視してください。これらをインストールした後、再び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 などのツールが必要です。Windows 7仮想マシンを見つけて、hashcatという名前の新しい管理者ユーザーを作成し、パスワードを設定し、Windows 7でSAMInsideをダウンロードして解凍した後、管理者権限で実行し、次の図に示すようにFile->Import Local Users vis Schedulerをクリックします。
その後、SAMInsideは「応答しない」かもしれませんが、問題ではありません。数秒辛抱強く待ってください。SAMInsideは期待どおりに私たちが望むハッシュを読み取ります。
パスワードを破壊したいユーザー「hashcat」を選択し、Ctrl+5を押してNT-hashをコピーし、hashcatがインストールされているUbuntuに戻り、次のコマンドを使用してコピーされたハッシュ値をファイルwin7.hashに保存します。
echo 356ceae0c89fb6b6bhashcat -w 3 -a 0 -m 1000 --remove -o win7.out win7.hash wordlist.dicしばらくして実行が完了し、win7.out ファイルを確認すると、ブラストが成功したことがわかりました。ユーザーの hashcat のログイン パスワードは rush2112:
werner@Yasser:~/hashcat$ cat win7.out 356ceae0c89fb65ed6d6aa7a445c4ce5:rush2112SAM ファイルを取得する方法は、「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_2mount コマンドを使用して、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仮想マシンのファイルがあり、まさに私が望んでいたものであることがわかりました。ターゲットのSAMファイルをvmdisk_fsからコピーします:
cp ~/vmdisk_2/Windows/System32/config/SAM ./ちなみに、SYSTEMファイルもコピーします:
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 でのハッシュパスワードフォーマット」ではありません。
3. linux ログイン パスワードのハッシュを破壊する
まず、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 (8 ビット文字の正しい処理)、「$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発破が成功したことがわかります。
4. Mysql ログイン パスワード ハッシュを破壊する
まず、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
プレーンテキストファイルではありませんが、ユーザーのルートのログインパスワードのハッシュ値は次のとおりであることがわかります。
6B825255FB466413D6B1B724644E23428C94BBCBこの値をファイル mysql.hash に保存し、次のコマンドを使用して mysql ログインパスワードのハッシュをブラストします。
{}
しばらくして、爆破が完了し、结果を确认します:
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 = ハッシュリブ.md5() md5.update("ヴェルナー123456!!!") 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」モードを使っています。次に、他のいくつかのモードを検討しましょう。
7. 概要
hashcat を使用してハッシュをブラストするには、最初にハッシュを見つけることができます。システムやソフトウェアによってハッシュが保存される場所が異なり、ハッシュ値を正確に見つける必要があります。;2 つ目は、ハッシュ タイプを正しく判断し、hashcat がこのタイプのハッシュをサポートしているかどうかを判断し、-m の正しいパラメータを選択することです。そうしないと、成功することはほとんど不可能です。第三に、パスワード辞書のほうがいい。最終的に爆破に成功できるかどうかは、やはり辞書を見る。パスワード辞書は大きければ大きいほど良いわけではありませんが、とにかく大きい方が良いです。hashcat もスピードで有名です。大きな辞書は hashcat にとって問題ではありません。ここでは、より良い辞書を記録します: 過去の漏洩ゲート + 一般的に使用される弱いパスワード辞書コレクション。7Z、解凍パスワードは anywlan です。さらに、小さな辞書をたくさん収集した場合は、小さな辞書を結合、並べ替え、重複を除去して、hashcat ブラストを容易にするための大きな辞書を取得できます。小さな辞書が同じディレクトリにある場合は、1つのコマンドで処理できます。
cat * | sort | uniq > Merge.dic小さな辞書がカテゴリごとに整理され、複数のレベルのディレクトリに分散されている場合はどうなりますか?明らかに cat コマンドだけでは十分ではありませんが、実際には 1 つのコマンドだけで十分です。小さな辞書がすべて MyDictionary ディレクトリに保存されていると仮定すると、コマンドは次のように書くことができます。
find ./MyDictionary -type f -exec cat {} \; | sort | uniq > Merge.dic