Pivoting — одна з ключових технік під час пентесту, яка дозволяє обійти сегментацію мережі та отримати доступ до внутрішніх ресурсів компанії. У статті автор ділиться власним досвідом налаштування Pivoting та Port Forwarding під час пентесту. На прикладі реальної лабораторії він крок за кроком показує, як отримати доступ до внутрішніх сегментів мережі, використовуючи компрометовані хости, інструменти типу Ligolo-ng, Cobalt Strike, Meterpreter, а також стандартні SSH-техніки. Гайд орієнтований на новачків, але містить і поглиблену практику, що буде корисною фахівцям Red Team.
Пивотинг – це техніка, для обходу сегментації мережі та прокидання нашого трафіку всередину. Тобто ми використовуємо цю техніку для того, щоб прокинути трафік з машини атакуючого, в локальну мережу компанії, в яку ми не маємо доступу (через сегментацію). Пивотинг буває різним, я розберу основні техніки та інструменти.
Port Forwarding (прокидання або перенаправлення портів) – це техніка, що дозволяє пересилати мережеві пакети з одного порту на інший між пристроями. Бувають кілька видів Port Forwarding – локальний, віддалений і динамічний.
Прокидання порту з нашої машини на віддалену:
ssh -N -L local_addr:local_port:remote_addr:remote_port user@target
Тут – local_addr і local_port – це адреса і порт на вашому локальному комп’ютері
remote_addr і remote_port – це адреса і порт на віддаленому сервері, до якого ми хочемо дістатися
user@target – машина, через яку ми прокинемо трафік
ssh -N -R remote_address:remote_port:local_address:local_port user@target
Тут ми віддалено переадресовуємо порти з віддаленої машини, на локальну (нашу).
Це тунелювання всього мережевого трафіку атакуючого (а не тільки одного порту) через віддалену машину (схоже на проксі).
ssh -N -D port user@target
У цій команді:
port – порт, через який ми направимо трафік
target – це адреса віддаленого сервера, до якого ми підключаємося, там буде створено SOCKS-канал, через який перенаправлятимемо мережевий трафік.
У нас буде 2 кейси – з однією мережею та з двома. Виглядають вони так:


Стрілки, я відзначив наш шлях, до цільових хостів. Отже, почнемо.
Я почав саме з півотингу, бо на мій погляд краще спочатку розповісти та показати його.
Я вирішив переглянути хости, що в мене є і виявив, що:
IP Windows машини – 10.0.2.6, IP Linux машини – 10.0.2.5
Linux машина має веб-інтерфейс, через який ми можемо завантажувати файли
Власне кажучи для початку я покажу класичні методи Pivoting’а, для цього я скомпроментую Linux-хост і за допомогою декількох утиліт перенаправлю свій трафік, на хост, що цікавить мене. Для початку розглянемо веб-інтерфейс Linux-хоста і спробуємо завантажити наш шелл:

Далі, я трохи підредагував шелл і закинув його на хост:
І отримав коннект:
Добре, я переглянув мережні інтерфейси та побачив наступну картину:

Тепер, я за допомогою різних утиліт прокину свій трафік в підсіти, що цікавить мене, і просканую її.
Go Simple Tunnel працює в режимі проксі та має багато режимів, про які ви можете почитати в офіційному репозиторії.
Доставка утиліти:
Запуск:

І пробуємо дістатися машини:
Все вийшло! Однак, не все може виходити, наприклад скан мережі, що робить цей інструмент не таким вже і хорошим.
Особисто у мене це фаворит і найулюбленіший спосіб, при пивотингу (бо працює як VPN ), так що його я опишу другим. Нам потрібен проксі (позначений як проксі) і агент (позначений як агент), які ми візьмемо тут . Proxy, ми запускаємо на своїй машині, а агент на скомпроментованій.



Тепер нам потрібно підняти новий мережевий інтерфейс і додати шлях до підмережі, до якої ми хочемо отримати доступ: Піднімаємо інтерфейс:
Код: ip tuntap add user root mode tun ligolo ip link set ligolo up
Код: ip route add 10.0.0.0/24 dev ligolo ip route list


Потім починаємо тунелювання командою start:
Тепер тестуємо:


Тут були основні способи (тобто без екзотики) пивотингу, які найчастіше використовують, але це було на Linux. Тепер я розповім про Windows-хости. Я знаю, що розповідати тут особливо нічого, тому що команди і принцип однакові, проте я розповім про півотинг, з популярнихC2 (Зокрема я розповім про Havoc Framework і Cobalt Strike) C2
У цьому розділі я розповім про те, як реалізований півотинг у різних C2 утилітах.
Meterpreter:
autorouteauxiliary/server/socks_proxy




Ми додаємо шлях до мережі, до якої хочемо дістатися:
run autoroute -s 10.0.0.0/24

Тепер ми можемо взаємодіяти з хостами в тій мережі, проте при такому прокиданні ми можемо взаємодіяти з тією мережею, тільки модулями Metasploit, а для того, щоб працювати з тією мережею за допомогою Proxychains, ми повинні використовувати модуль – auxiliary/server/socks_proxy.
Ставимо версію 4set VERSION 4a

Потім ми додаємо запис в /etc/proxychains4.conf–socks4 127.0.0.1 1080

Все відмінно!
Після того, як я створив пейлоад (тут без картинок) , я розвідав Windows машину і дізнався, що це Windows Server 2008 R2, а значить уразливий для MS17-010(eternalblue), яку ми проексплуатуємо через Metasploit.
Потім запустимо експойт:
Далі я запустив шелл(команда shell) і скачав агент:

Запускаємо та отримуємо доступ
Тепер ми можемо в консоль системи вписати: socks add 6080і додати запис – socks5 127.0.0.1 6080до /etc/proxychains4.conf, для взаємодії з внутрішньою мережею за допомогою агента.


Відмінно!
Напевно це один із найпопулярніших (на мій погляд) C2 фреймворків, воно і зрозуміло, адже в ньому безліч модулів, під різні Red Team завдання. Отже, ми вже отримали доступ до оболонки в системи, і тепер ми просто повинні створити агент і завантажити його на підконтрольну систему:


Далі ПКМ з агента -> Pivoting -> SOCKS Server
Стартуємо сервер:

Додаємо socks4
Далі /etc/proxychains4.confми додаємо – socks4 127.0.0.1 9988і пробуємо доступ до хоста:
Чудово! Думаю на цій ноті можна закінчити нашу практику з Pivoting і перейти до теми прокидання портів (Port Forwarding).
Ця техніка корисна, коли атакуючий не може підвантажити утиліту і доводиться працювати з тим, що є. Почнемо ми з Local Port Forwarding (можете почитати на початку)
Я буду використовувати Linux-машину, тому що на ній встановлений SSH, проте на Windows всі команди ті ж. Отже, для того, щоб локально прокинути порт нам потрібно знати креди від хоста (що проблематично), але ми уявимо, що ми їх дізнаємося:
ssh -N -L 127.0.0.1:9999:10.0.0.1:80 [email protected].
localhost:9999перекине на внутрішній вебсайт( 10.0.0.1) через доступний нам хост10.0.2.5


Добре, тепер приступимо до наступної техніки.
За допомогою динамічного прокидання портів, ми можемо проксирувати наш весь трафік через порт віддаленої машини. Щоб виконати динамічний прокид, ми повинні вписати наступну команду: ssh -N -D 4444 [email protected] Цією командою ми перенаправимо наш трафік через порт 4444 на Linux-машині:
Потім додаємо запис – socks4 127.0.0.1 4444і /etc/proxychains4.confпробуємо доступ до хоста:
У нас все вийшло!
У цій статті ми розібралися що являє собою Pivoting і Port Forwarding, також розібралися як працювати зі спеціальними утилітами і C2 фреймворками.