Может появиться необходимость изменить содержание PDF-файла или извлечь определенные данные из него. В этой статье покажу, как взломать PDF на Python с помощью Pikepdf или John the Ripper.
Еще по теме: Брут пароля ZIP на Python
Взлом PDF на Python
Рассмотрим два способа взломать пароль PDF-файлы:
- Брут PDF-файла с помощью Python.
- Извлечение хеша пароля PDF и взлом с помощью John the Ripper.
Статья в образовательных целях, для обучения этичных хакеров. Ни редакция spy-soft.net, ни автор не несут ответственности за ваши действия.
Взлом PDF на Python с помощью Pikepdf
Прежде чем начнем, давайте установим необходимые библиотеки:
1 |
$ pip install pikepdf tqdm |
pikepdf — библиотека Python для создания, изменения и восстановления файлов PDF. Это питоновская обертка библиотеки C++ QPDF.
Мы будем использовать pikepdf для взлома защищенного паролем PDF-файла.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import pikepdf, sys from tqdm import tqdm # целевой PDF-файл pdf_file = sys.argv[1] # файл со списком слов wordlist = sys.argv[2] # загрузка списка паролей passwords = [line.strip() for line in open(wordlist)] # перебор паролей for password in tqdm(passwords, "Расшифровка PDF"): try: # открытие PDF-файла with pikepdf.open(pdf_file, password=password) as pdf: # Пароль успешно расшифрован, выход из цикла print("[+] Пароль найден:", password) break except pikepdf._qpdf.PasswordError as e: # неверный пароль, продолжаем в цикле continue |
Сначала загружаем словарь для брута. Я использовал популярный словарь RockYou.
Затем перебираем список и пытаемся открыть файл с каждым паролем, передавая аргумент пароля методу pikepdf.open(). Это, если пароль неверный, вызовет исключение pikepdf._qpdf.PasswordError.
Мы также используем tqdm для отображения прогресса:
1 2 3 4 |
$ python pdf_cracker.py foo-protected.pdf /usr/share/wordlists/rockyou.txt Расшифровка PDF: o.i%|| | 2137/14344395 [00:06<12:00:08, 320.70it/s] [+] Пароль найден: abc123 |
Мы нашли пароль после 2137 попыток. Взлома пароля занял около 6 секунд. Скорость составила почти 320 слов/с. Не очень быстро, но следующий способ сможет взломать PDF быстрее.
Взлом PDF на Python с помощью John the Ripper
John the Ripper — это бесплатный и быстрый инструмент для взлома паролей. John the Ripper установлен в Kali Linux по умолчанию.
Сначала нам потребуется способ извлечь хеш пароля из PDF-файла для его дальнейшего взлома с использованием John the Ripper. К счастью для нас, есть скрипт на Python, pdf2john.py, который делает это. Давайте скачаем его с помощью wget:
1 2 3 4 5 6 7 8 9 |
root@rockikz:~/pdf-cracking# wget https://raw.githubusercontent.com/truongkma/ctf-tools/master/John/run/pdf2john.py --2020-O5-18 00:39:27-- https://raw.githubusercontent.com/truongkma/ctf-tools/master/John/run/pdf2john.py Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.0.133, 151.101.64.133, 151.101.128.133, . Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.0.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 13574 (13K) [text/plain] Saving to: rpdf2john.py* pdfZjohn.py I0g%[===============================================>] 13.26K --.-K0/s in 0.09s 2020-05-18 00:39:28 (148 KB/s) - 'pdf2john.py* saved [13574/13574] |
Поместите PDF-файл, защищенный паролем, в текущий каталог (мой файл называется foo-protected.pdf) и выполните следующую команду:
1 |
root@rockikz:~/pdf-cracking# python3 pdf2john.py foo-protected.pdf | sed "s/::. *$//" | sed "s/A. *://" | sed -r 's/A.{2}//' | sed 's/.\{1\}$//' > hash |
Это извлечет хеш пароля PDF в новый файл с именем hash:
После сохранения хеша пароля в файл hash, я использовал команду cat, чтобы вывести его на экран.
1 2 |
root@rockikz:~/pdf-cracking# cat hash $pdf$4‘4,128 *-4l16 +5cb61dc85566dac748c461e77d0e8ada *324341f937dldc86a7dbdaaelfal4-flb328bf4e5e4e 758a4164004e56fffa0108 *32»d81a2-Fla96040566a63bd-F52be82el44b7d589155-F4956al25e3bcac0dl51647 |
И наконец, использую файл хеша для взлома пароля (команда john [файл-хеша]):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
root@rockikz:/pdf-cracking# john hash using default input encoding: utf-b Loaded 1 password hash (PDF [MD5 SHA2 RC4/AES 32/64]) Cost 1 (revision) is 4 for all loaded hashes will run 4 openMP threads Proceeding with single, rules:Single Press ' q' or Ctrl-C to abort, almost any other key for status Almost done: Processing the remaining buffered candidate passwords, if any. Proceeding with wordlist:/usr/share/john/password.1st, rules:Wordlist P12345 <?> 1g 0:30:00:00 DONE 2/3 (2020-05-13 00:51) 1.851g/s 4503p/s 4503c/s 4503C/S chacha..0087554321 Use the "--show --format=PDF" options to display all of the cracked passwords reliably Session completed root.flrockikz; ^-/pdf-crac king#__________________________________________________________________________________________________ |
Как видите, пароль — 012345, и его удалось найти со скоростью 4503 слов/с.
Итак, наша задача выполнена, и мы успешно узнали, как взламывать пароли PDF с использованием pikepdf и John the Ripper.
ПОЛЕЗНЫЕ ССЫЛКИ:
- Брут FTP с помощью ftplib на Python
- Как восстановить удаленные метаданные PDF
- Как взломать PDF с помощью Zydra на Kali Linux