バグのバウンティしてみたい

ペンテストとテンペストを言い間違える

今の努力が将来に繋がることを願う。悪用厳禁。

John The Ripper入門

John The Ripper

www.openwall.com


言わずと知れたハッシュクラックツール

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.confWordlistを任意のワードリストに変更すればよい。

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

ぶっちゃけjohnhashcatどっちが良いか

使い勝手が良いのはjohn、しかしGPUを利用してクラックを行う場合にはhashcatが有効である。確かjohnの方はGPUへの対応は不完全であったハズ。