John The Ripper入門
言わずと知れたハッシュクラックツール
INSTALL
john/INSTALL at bleeding-jumbo · openwall/john · GitHub
john/INSTALL-UBUNTU at bleeding-jumbo · openwall/john · GitHub
john/INSTALL-WINDOWS at bleeding-jumbo · openwall/john · GitHub
使い方
ハッシュファイルの用意
例えばこのような形式で、
cat hash2.txt 1A732667F3917C0F4AA98BB13011B9090C6F8065
ハッシュクラック
john <hashfile>
これだけでハッシュの種類の判別からクラックまで行う。。。らしいが色々なことが原因で上手くいかない方が多い。
ハッシュの判別
john
でハッシュクラックを行う場合に--format=
でハッシュの種類を指定できる。john
のハッシュ判別任せだと頼りないので何らかの方法でハッシュを判別しておいた方がいい。
hash-identifier
github.com
pypi.org
使い勝手の悪さは否めないけれどオフラインでは優秀かと。johnやhashcatの形式で出力してもらえるようだが自分の場合上手くいっていない。
ファイルの読み込みは同じディレクトリに無いと上手くいかない。ハッシュを直接渡すか、どうしてもINPUTにファイルを利用する場合は
$ cat ../hash2.txt | python3 hash-id.py ~~~ HASH: Possible Hashs: [+] SHA-1 [+] MySQL5 - SHA-1(SHA-1($pass)) ~~~
といったような使い方をしている。どっちにしろハッシュが判別できているので今は良い。
ハッシュの種類が分かったならば、
john --list=formats | grep -i sha1
というように検索し適応しそうなフォーマットを探す。
ワードリストの利用
実際には、上記のようにjohn
だけで
デフォルトのワードリストやブルートフォースするだけでは無理なので、大抵の場合より大きなワードリストを利用する。--wordlist=
で指定する。
rockyou.txt
パスワードのワードリストとして辞書攻撃系によく利用されるのがrockyou.txt
Common Password List ( rockyou.txt ) | Kaggle
Kali Linuxだと/usr/share/wordlists
に入っていたハズ。
安心してハッシュクラック
ここまで準備できれば相当複雑なものでない限り、辞書にあればクラック可能である。
john --format=raw-sha1 --wordlist=/usr/share/wordlists/rockyou.txt hash2.txt Using default input encoding: UTF-8 Loaded 1 password hash (Raw-SHA1 [SHA1 256/256 AVX2 8x]) Warning: no OpenMP support for this hash type, consider --fork=2 Press 'q' or Ctrl-C to abort, almost any other key for status kangeroo (?) 1g 0:00:00:00 DONE (2021-03-30 09:25) 11.11g/s 1301Kp/s 1301Kc/s 1301KC/s karakara..kalinda Use the "--show --format=Raw-SHA1" options to display all of the cracked passwords reliably Session completed
tips
ハッシュにラベル付け
ハッシュファイルは複数行あってもクラックできる。そのような場合には、ハッシュごとにラベル付け?を行うとどれがどのハッシュの結果か分かりやすい。ハッシュの先頭にlabel:
を付ける。
$ cat hash.txt bob:02c75fb22c75b23dc963c7eb91a062cc alice:b0baee9d279d34fa1dfd71aadb908c3f root:c44a471bd78cc6c2fea32b9fe028d30a master:d0199f51d2728db6011945145a1b607a web:dcddb75469b4b4875094e14561e573d8 linux:e10adc3949ba59abbe56e057f20f883e 346:e19d5cd5af0378da05f63f891c7467af hello:e99a18c428cb38d5f260853678922e03 you:fcea920f7412b5da7be0cf42b8c93759 $ john --format=raw-md5 --wordlist=/usr/share/wordlists/rockyou.txt hash.txt Using default input encoding: UTF-8 Loaded 9 password hashes with no different salts (Raw-MD5 [MD5 256/256 AVX2 8x3]) Warning: no OpenMP support for this hash type, consider --fork=2 Press 'q' or Ctrl-C to abort, almost any other key for status 123456 (linux) 1234567 (you) abc123 (hello) basketball (master) 11111 (alice) 00000 (web) zxcvbnm (bob) asdfghjkl (root) abcd1234 (346) 9g 0:00:00:00 DONE (2021-03-30 09:34) 450.0g/s 57600p/s 57600c/s 230400C/s football1..summer1 Use the "--show --format=Raw-MD5" options to display all of the cracked passwords reliably Session completed
毎回同じワードリスト使うのに指定するのがメンドクサイ
john.conf
のWordlist
を任意のワードリストに変更すればよい。
cat john.conf ~~~ [Options] # Default wordlist file name (including in batch mode) #Wordlist = $JOHN/password.lst Wordlist = /usr/share/wordlists/rockyou.txt ~~~
こうするとデフォルトで任意のワードリストを利用できる。
クラック済みの結果を再び確認
--show
オプションを利用する。
john --show hash2.txt ?:kangeroo 1 password hash cracked, 0 left
パスワードハッシュ以外のハッシュクラック
ハッシュクラックは、他にも暗号化zipやssh秘密鍵のパスフレーズといったものにも利用できる。
johnのパッケージにはjohnでハッシュクラックを行うためのハッシュに変換するバイナリが含まれている。これらを利用することで様々なものを扱える。
zip crack
$ file secure.zip secure.zip: Zip archive data, at least v1.0 to extract $ zip2john secure.zip > ziphash ver 1.0 efh 5455 efh 7875 secure.zip/zippy/flag.txt PKZIP Encr: 2b chk, TS_chk, cmplen=38, decmplen=26, crc=849AB5A6 $ john --format=PKZIP --wordlist=/usr/share/wordlists/rockyou.txt ziphash Using default input encoding: UTF-8 Loaded 1 password hash (PKZIP [32/64]) Will run 2 OpenMP threads Press 'q' or Ctrl-C to abort, almost any other key for status pass123 (secure.zip/zippy/flag.txt) 1g 0:00:00:00 DONE (2021-03-30 11:15) 16.66g/s 136533p/s 136533c/s 136533C/s newzealand..total90 Use the "--show" option to display all of the cracked passwords reliably Session completed $ unzip secure.zip Archive: secure.zip [secure.zip] zippy/flag.txt password: extracting: zippy/flag.txt
ssh-passphrase crack
$ python /usr/share/john/ssh2john.py idrsa.id_rsa > sshhash $ john --format=ssh --wordlist=/usr/share/wordlists/rockyou.txt sshhash Using default input encoding: UTF-8 Loaded 1 password hash (SSH [RSA/DSA/EC/OPENSSH (SSH private keys) 32/64]) Cost 1 (KDF/cipher [0=MD5/AES 1=MD5/3DES 2=Bcrypt/AES]) is 0 for all loaded hashes Cost 2 (iteration count) is 1 for all loaded hashes Will run 2 OpenMP threads Note: This format may emit false positives, so it will keep trying even after finding a possible candidate. Press 'q' or Ctrl-C to abort, almost any other key for status mango (idrsa.id_rsa) Warning: Only 1 candidate left, minimum 2 needed for performance. 1g 0:00:00:05 DONE (2021-03-30 11:53) 0.1908g/s 2736Kp/s 2736Kc/s 2736KC/s *7¡Vamos! Session completed
このように様々なハッシュ変換ツールがあり、変換後のハッシュはhashcat
にも利用できる。
bitlocker2john dmg2john gpg2john hccap2john john keepass2john putty2john racf2john rar2john uaf2john vncpcap2john wpapcap2john zip2john ~~~~ 1password2john.py aruba2john.py deepsound2john.py encfs2john.py itunes_backup2john.pl ldif2john.pl monero2john.py pem2john.py rexgen2rules.pl truecrypt2john.py 7z2john.pl ascii.chr dictionary.rfc2865 enpass2john.py iwork2john.py leet.pl money2john.py pfx2john.py rules unrule.pl adxcsouf2john.py axcrypt2john.py digits.chr ethereum2john.py john.conf lib mozilla2john.py pgpdisk2john.py rulestack.pl upper.chr aem2john.py bestcrypt2john.py diskcryptor2john.py filezilla2john.py kdcdump2john.py libreoffice2john.py multibit2john.py pgpsda2john.py sap2john.pl uppernum.chr aix2john.pl bitcoin2john.py dmg2john.py fuzz.dic keychain2john.py lion2john-alt.pl neo2john.py pgpwde2john.py sha-dump.pl utf8.chr aix2john.py bitshares2john.py dns fuzz_option.pl keyring2john.py lion2john.pl netntlm.pl potcheck.pl sha-test.pl vdi2john.pl alnum.chr bitwarden2john.py DPAPImk2john.py geli2john.py keystore2john.py lm_ascii.chr netscreen.py prosody2john.py signal2john.py vmx2john.py alnumspace.chr bks2john.py dumb16.conf genincstats.rb kirbi2john.py lotus2john.py office2john.py pse2john.py sipdump2john.py ztex alpha.chr blockchain2john.py dumb32.conf hccapx2john.py known_hosts2john.py lower.chr openbsd_softraid2john.py ps_token2john.py ssh2john.py andotp2john.py ccache2john.py dynamic.conf hextoraw.pl korelogic.conf lowernum.chr openssl2john.py pwsafe2john.py sspr2john.py androidbackup2john.py cisco2john.pl dynamic_disabled.conf htdigest2john.py krb2john.py lowerspace.chr padlock2john.py radius2john.pl staroffice2john.py androidfde2john.py codepage.pl dynamic_flat_sse_formats.conf hybrid.conf kwallet2john.py luks2john.py pass_gen.pl radius2john.py stats ansible2john.py cracf2john.py ecryptfs2john.py ibmiscanner2john.py lanman.chr mac2john-alt.py password.lst regex_alphabets.conf strip2john.py apex2john.py cronjob ejabberd2john.py ikescan2john.py lastpass2john.py mac2john.py pcap2john.py repeats16.conf telegram2john.py applenotes2john.py dashlane2john.py electrum2john.py ios7tojohn.pl latin1.chr mcafee_epo2john.py pdf2john.pl repeats32.conf tezos2john.py
ぶっちゃけjohn
とhashcat
どっちが良いか
使い勝手が良いのはjohn
、しかしGPUを利用してクラックを行う場合にはhashcat
が有効である。確かjohn
の方はGPUへの対応は不完全であったハズ。