Crack hash password with John the Ripper and Hashcat

Після отримання root-доступу до Linux важливо не зупинятися на досягнутому. Чому б не спробувати зламати паролі користувачів? Якщо пощастить і для входу в різні системи буде використовуватися той самий обліковий запис, можна поширити атаку і на інші машини. Для злому паролів є два випробувані інструменти: John the Ripper і Hashcat.

TOOLS FOR FIND VULNERABILITY

Логин Свят

1/3/20235 min read

Файли passwd та shadow

У Linux-системах особливий інтерес становлять два файли: /etc/passwd і /etc/shadow. Файл /etc/passwd містить основну інформацію про всі облікові записи в системі: про користувача root, про службові облікові записи та про реальних користувачів. Кожен рядок файлу /etc/passwd включає сім полів. Типовий рядок буде виглядати приблизно так:

msfadmin:x:1000:1000:msfadmin,,,:/home/msfadmin:/bin/bash

Третє поле містить унікальний номер – ідентифікатор користувача. У четвертому полі йде ідентифікатор групи. П'яте поле зазвичай містить повне ім'я користувача, хоча може бути порожнім. Шосте поле – домашній каталог користувача. І, нарешті, сьоме поле містить стандартну оболонку (зазвичай /bin/bash).

Файл /etc/shadow зберігає зашифровані паролі користувачів системи. На відміну від файлу /etc/passwd, доступного для читання всім користувачам, файл /etc/shadow доступний лише користувачеві з правами root. Крім зашифрованих паролів, у файлі shadow також міститься інша інформація, наприклад терміни дії паролів. Типовий рядок файлу /etc/shadow виглядатиме приблизно так:

msfadmin:$1$XN10Zj2c$Rt/zzCW3mLtUWA.ihZjA5/:14684:0:99999:7:::

Після використання вразливості ядра та отримання доступу на кореневому рівні можна використовувати ці два файли, щоб спробувати розкрити паролі інших користувачів та отримати доступ до інших систем.

Злом хешей за допомогою John the Ripper

Насамперед потрібно скопіювати вміст файлів /etc/passwd та /etc/shadow в окремі текстові файли на локальній машині. Нехай це будуть файли passwordfile.txt та shadowfile.txt відповідно.

cat /etc/passwd

root:x:0:0:root:/root:/bin/bash

daemon:x:1:1:daemon:/usr/sbin:/bin/sh

bin:x:2:2:bin:/bin:/bin/sh

sys:x:3:3:sys:/dev:/bin/sh

sync:x:4:65534:sync:/bin:/bin/sync

games:x:5:60:games:/usr/games:/bin/sh

man:x:6:12:man:/var/cache/man:/bin/sh

lp:x:7:7:lp:/var/spool/lpd:/bin/sh

mail:x:8:8:mail:/var/mail:/bin/sh

news:x:9:9:news:/var/spool/news:/bin/sh

uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh

proxy:x:13:13:proxy:/bin:/bin/sh

www-data:x:33:33:www-data:/var/www:/bin/sh

backup:x:34:34:backup:/var/backups:/bin/sh

list:x:38:38:Mailing List Manager:/var/list:/bin/sh

irc:x:39:39:ircd:/var/run/ircd:/bin/sh

gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh

nobody:x:65534:65534:nobody:/nonexistent:/bin/sh

libuuid:x:100:101::/var/lib/libuuid:/bin/sh

dhcp:x:101:102::/nonexistent:/bin/false

syslog:x:102:103::/home/syslog:/bin/false

klog:x:103:104::/home/klog:/bin/false

sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin

msfadmin:x:1000:1000:msfadmin,,,:/home/msfadmin:/bin/bash

bind:x:105:113::/var/cache/bind:/bin/false

postfix:x:106:115::/var/spool/postfix:/bin/false

ftp:x:107:65534::/home/ftp:/bin/false

postgres:x:108:117:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash

mysql:x:109:118:MySQL Server,,,:/var/lib/mysql:/bin/false

tomcat55:x:110:65534::/usr/share/tomcat5.5:/bin/false

distccd:x:111:65534::/:/bin/falseuser:x:1001:1001:just a user,111,,:/home/user:/bin/bash

service:x:1002:1002:,,,:/home/service:/bin/bash

telnetd:x:112:120::/nonexistent:/bin/false

proftpd:x:113:65534::/var/run/proftpd:/bin/false

statd:x:114:65534::/var/lib/nfs:/bin/false cat

/etc/shadow

root:$1$/avpfBJ1$x0z8w5UF9Iv./DR9E9Lid.:14747:0:99999:7:::

daemon:*:14684:0:99999:7:::

bin:*:14684:0:99999:7::

:sys:$1$fUX6BPOt$Miyc3UpOzQJqz4s5wFD9l0:14742:0:99999:7:::

sync:*:14684:0:99999:7:::

games:*:14684:0:99999:7:::

man:*:14684:0:99999:7:::

lp:*:14684:0:99999:7:::

mail:*:14684:0:99999:7:::

news:*:14684:0:99999:7:::

uucp:*:14684:0:99999:7:::

proxy:*:14684:0:99999:7:::

www-data:*:14684:0:99999:7:::

backup:*:14684:0:99999:7:::

list:*:14684:0:99999:7:::

irc:*:14684:0:99999:7:::

gnats:*:14684:0:99999:7:::

nobody:*:14684:0:99999:7:::

libuuid:!:14684:0:99999:7:::

dhcp:*:14684:0:99999:7:::

syslog:*:14684:0:99999:7:::

klog:$1$f2ZVMS4K$R9XkI.CmLdHhdUE3X9jqP0:14742:0:99999:7:::

sshd:*:14684:0:99999:7:::

msfadmin:$1$XN10Zj2c$Rt/zzCW3mLtUWA.ihZjA5/:14684:0:99999:7:::

bind:*:14685:0:99999:7:::

postfix:*:14685:0:99999:7:::

ftp:*:14685:0:99999:7:::

postgres:$1$Rw35ik.x$MgQgZUuO5pAoUvfJhfcYe/:14685:0:99999:7:::

mysql:!:14685:0:99999:7:::

tomcat55:*:14691:0:99999:7:::

distccd:*:14698:0:99999:7:::

user:$1$HESu9xrH$k.o3G93DGoXIiQKkPmUgZ0:14699:0:99999:7:::

service:$1$kR3ue7JZ$7GxELDupr5Ohp6cjZ3Bu//:14715:0:99999:7:::

telnetd:*:14715:0:99999:7:::

proftpd:!:14727:0:99999:7:::

statd:*:15474:0:99999:7:::

John the Ripper - популярний інструмент для злому паролів, що підтримує багато типів хешей. Крім того, у нього є вкрай корисна функція авторозпізнавання типу хеша. Інструмент існує вже досить давно і має репутацію одного з найефективніших і найзручніших зломщиків.

Перш ніж почати згодовувати хеші "Джону", нам потрібно об'єднати файли passwordfile і shadowfile в один за допомогою утиліти unshadow.

unshadow passwordfile.txt shadowfile.txt > main_file.txt

На виході матимемо формат, який Джон зможе прочитати. Запустимо наступну команду, щоб об'єднати вихідні дані у новому текстовому файлі під назвою main_file.txt.

"Джон" може працювати і самостійно: потрібно просто ввести john і вказати вихідний файл. Але краще допомогти йому і надати wordlist - список слів або словник, що містить паролі. У каталозі /usr/share/wordlists є кілька словників, але ми будемо використовувати словник sqlmap.txt, так як він виглядає набагато солідніше. За допомогою прапора --wordlist вкажемо, який словник слід використовувати, і передамо "Джону" вихідний файл:

john --wordlist=/usr/share/wordlists/sqlmap.txt main_file.txt

Warning: detected hash type "md5crypt", but the string is also recognized as "aix-smd5"

Use the "--format=aix-smd5" option to force loading these as that type instead

Using default input encoding: UTF-8

Loaded 7 password hashes with 7 different salts (md5crypt, crypt(3) $1$ [MD5 128/128 SSE2 4x3])

Remaining 1 password hash Press 'q' or Ctrl-C to abort, almost any other key for status

0g 0:00:00:51 DONE (2022-05-05 14:10) 0g/s 27478p/s 27478c/s 27478C/s Zzzzzzz1..zzzzzzzzzzzzzzz Session completed

Тип використовуваного хеша "Джон" визначив як md5crypt, також відомий як aix-smd5. Через деякий час сесія успішно завершується. Тепер можна використовувати прапор --show, щоб побачити успішно зламані паролі:

john --show main_file.txt

sys:batman:3:3:sys:/dev:/bin/sh

klog:123456789:103:104::/home/klog:/bin/false

msfadmin:msfadmin:1000:1000:msfadmin,,,:/home/msfadmin:/bin/bash

postgres:postgres:108:117:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash

user:user:1001:1001:just a user,111,,:/home/user:/bin/bash

service:service:1002:1002:,,,:/home/service:/bin/bash

6 password hashes cracked, 1 left

Після імені користувача, вказаного у першому полі, у другому полі ми тепер бачимо пароль у вигляді відкритого тексту. «Джон» зміг зламати шість із семи хешів. Результат у кожному конкретному випадку буде залежати від заліза, від допоміжних словників і, звичайно ж, від довжини і складності паролів, які потрібно зламати.

Злом хешей за допомогою Hashcat

Ще один потужний інструмент для зламування хешей – Hashcat. У нього безліч функцій, є версії на базі CPU та GPU. З виходом Hashcat v3.00 інструменти GPU та CPU були об'єднані в один. Версія, призначена лише для CPU, дістала назву Hashcat-legacy. На відміну від "Джона", Hashcat не такий вибагливий - йому можна відразу надати безпосередньо хеші паролів. Скопіюємо хеші, які потрібно зламати, у новий текстовий файл під назвою hashes.txt:

cat hashes.txt

$1$/avpfBJ1$x0z8w5UF9Iv./DR9E9Lid.

$1$fUX6BPOt$Miyc3UpOzQJqz4s5wFD9l0

$1$f2ZVMS4K$R9XkI.CmLdHhdUE3X9jqP0

$1$XN10Zj2c$Rt/zzCW3mLtUWA.ihZjA5/

$1$Rw35ik.x$MgQgZUuO5pAoUvfJhfcYe/

$1$HESu9xrH$k.o3G93DGoXIiQKkPmUgZ0

$1$kR3ue7JZ$7GxELDupr5Ohp6cjZ3Bu//

Залежно від того, який тип хешу необхідно зламати, Hashcat пропонує різні режими роботи. Оскільки Джон вже визначив тип хешей нашого файлу shadow як md5crypt, ми можемо ввести hashcat --help, щоб побачити всі опції та режими, доступні для даного алгоритму шифрування. Зважаючи на все, для md5crypt потрібно використовувати режим 500:

0500 | md5crypt, MD5 (Unix), Cisco-IOS $1$ (MD5) | Operating Systems

3200 | bcrypt $2*$, Blowfish (Unix) | Operating Systems

7400 | sha256crypt $5$, SHA256 (Unix) | Operating Systems

1800 | sha512crypt $6$, SHA512 (Unix) | Operating Systems

122 | macOS v10.4, MacOS v10.5, MacOS v10.6 | Operating Systems

1722 | macOS v10.7 | Operating Systems

7100 | macOS v10.8+ (PBKDF2-SHA512) | Operating Systems

Для запуску злому виконаємо таку команду:

hashcat -m 500 -a 0 -o cracked.txt hashes.txt /usr/share/wordlists/sqlmap.txt -O

hashcat (v4.1.0) starting...

* Device #2: Not a native Intel OpenCL runtime. Expect massive speed loss.

You can use --force to override, but do not report related errors.

OpenCL Platform #1: Intel(R) Corporation

========================================

* Device #1: Intel(R) Core(TM) i5 CPU M 480 @ 2.67GHz, 934/3736 MB allocatable, 4MCU

OpenCL Platform #2: The pocl project

====================================

* Device #2: pthread-Intel(R) Core(TM) i5 CPU M 480 @ 2.67GHz, skipped.

Hashes: 7 digests; 7 unique digests, 7 unique salts

Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates

Rules: 1 Applicable optimizers:* Optimized-Kernel* Zero-Byte

Тут потрібно кілька пояснень:

- Прапор -m визначає режим роботи.

- Прапор -a визначає тип атаки. У нашому випадку це 0 – простий режим, який використовується за замовчуванням.

- Далі, за допомогою прапора -o ми вказали вихідний файл - cracked.txt. Як вихідний файл з хешами ми передали файл hashes.txt. Як і John the Ripper, Hashcat дозволяє використовувати словники паролів.

- Нарешті, прапор -O включає оптимізацію ядер (потрібний цей прапор чи ні, залежить від того, яка система використовується, проте слід мати на увазі, що він обмежує довжину паролів).

Поки Hashcat робить свою роботу, можна в будь-який момент ввести s, щоб переглянути її статус та оцінити прогрес:

[s]tatus [p]ause [b]ypass [c]heckpoint [q]uit => s

Session..........: hashcat

Status...........: Running

Hash.Type........: md5crypt, MD5 (Unix), Cisco-IOS $1$ (MD5)

Hash.Target......: hashes.txt

Time.Started.....: Mon Aug 6 14:18:10 2018 (30 secs)

Time.Estimated...: Mon Aug 6 14:21:08 2018 (2 mins, 28 secs)

Guess.Base.......: File (/usr/share/wordlists/sqlmap.txt)

Guess.Queue......: 1/1 (100.00%)

Speed.Dev.#1.....: 15816 H/s (7.84ms) @ Accel:256 Loops:125 Thr:1 Vec:4

Recovered........: 5/7 (71.43%) Digests, 5/7 (71.43%) Salts

Progress.........: 1648627/9845703 (16.74%)

Rejected.........: 3059/1648627 (0.19%)

Restore.Point....: 234929/1406529 (16.70%)

Candidates.#1....: 9dH8eJEs -> 9notenler

HWMon.Dev.#1.....: N/A

Коли процес буде близьким до завершення, ви побачите відповідне повідомлення, а також додаткову інформацію: про кількість відновлених хешей, час початку та час завершення роботи.

Approaching final keyspace - workload adjusted.

Session..........: hashcat

Status...........: Exhausted

Hash.Type........: md5crypt, MD5 (Unix), Cisco-IOS $1$ (MD5)

Hash.Target......: hashes.txt

Time.Started.....: Mon Aug 6 14:18:10 2018 (2 mins, 59 secs)

Time.Estimated...: Mon Aug 6 14:21:09 2018 (0 secs)

Guess.Base.......: File (/usr/share/wordlists/sqlmap.txt)

Guess.Queue......: 1/1 (100.00%)Speed.Dev.#1.....: 15738 H/s (8.15ms) @ Accel:256 Loops:125 Thr:1 Vec:4

Recovered........: 5/7 (71.43%) Digests, 5/7 (71.43%) Salts

Progress.........: 9845703/9845703 (100.00%)

Rejected.........: 30891/9845703 (0.31%)

Restore.Point....: 1406529/1406529 (100.00%)

Candidates.#1....: zzbell0506 -> zzzzzzzzzzzzzzz

HWMon.Dev.#1.....: N/A Started: Mon Aug 6 14:18:06 2018 Stopped: Mon Aug 6 14:21:10 2018

Тепер можна відобразити вміст файлу cracked.txt і побачити паролі у відкритому вигляді:

cat cracked.txt

$1$fUX6BPOt$Miyc3UpOzQJqz4s5wFD9l0:batman

$1$Rw35ik.x$MgQgZUuO5pAoUvfJhfcYe/:postgres

$1$kR3ue7JZ$7GxELDupr5Ohp6cjZ3Bu//:service

$1$HESu9xrH$k.o3G93DGoXIiQKkPmUgZ0:user