Windows下生成shell的一种新方法

使用Metasploit生成Windows反弹Shell木马:从原理到实战 在网络安全领域,理解攻击链的构成是构建有效防御的基础。反弹Shell作为一种经典的远程控制技术,其核心原理是让被控端主动向控制端发起网络连接,从而绕过防火墙等出口限制。这项技术体现了网络协议在安全攻防中的双向应用价值,常被用于渗透测试、安全研究等授权场景,以验证系统的防御能力。Metasploit Framework(MSF)作为业界广泛使用的渗透测试平台,其内置的msfvenom工具能够高效生成各类Payload,例如针对Windows系统的Meterpreter反弹TCP载荷。通过配置LHOST、LPO 阅读详情

  
   shell实际上就是一小段可执行程序,有代码段、数据段和堆栈。只不过这段程序在内存中的位置只有在程序执行时才能确定,而在编译时并不能知道,这就给我们的编程带来了不少麻烦,数据不好定位与赋值。UNIX下的jmp、call定位在我的VC上好像不太行;而数据的赋值一般用mov byte ptr[ebp-x],'?'来进行,既麻烦、又浪费间。另外要得到shell的代码,还得用VC中的disassembly命令。那么有没有好一点的办法呢?先看一下下面的程序: 

#include <stdio.h> 
#include <windows.h> 
#include <stddef.h> 
void main() 
{ 
char *buff,*data,shell[500]; 
long off; 
int i 
__asm 
{ 
mov eax,offset begin 
mov buff,eax 
mov off,offset end 
sub off,eax 
} 
for(i=0;i<off;i++) 
shell=buff; 

for(i=0;i<4;i++) //写入偏移值(代码段的大小) 
{char ch=(char)(off>>(8*i)); 
shell[4+i]=ch; 
} 

//初始化数据段 
data=shell+off; 
data[0]=0x01; 
.... 

//输出shell 
FILE *fp; 
fp=fopen("shell","w"); 
fwrite(shell,off+?,1,fp); 
fclose(fp); 
return; 

//shell 
begin://shell开始 
__asm{ 
mov ebp,esp 
add ebp,0x11111111 //偏移值 
… 
} 
end://shell结束 
; 
} 
   首先应该注意到,程序没有执行完就return了,后面不被执行的地方就是我们要的shell代码,程序一开始就用一个buff指针指向这里。然后就把buff中的内容移到一个shell数组中,这就是我们要的shell代码段了。off是shell代码段的大小,data=shell+off,即data指向shell代码段之后,这就中数据段了,可以直接用data[x]=?对数据段进行初始化(是不是很方便?)。最后输出shell数组中的内容,就是完整的shell了,输出的格式可以自己定义,这里是以十六进制格式直接输出到一个文件中。 

   上面是shell数据的初始化与shell的输出。shell中数据段是如何定位的。大家看看不被执行的那一段汇编程序,mov ebp,esp,使ebp指向shell的代码段(运行时)开始处。add ebp,0x11111111,使ebp的指针下移(0x11111111并不是最终值,这个0x11111111会前面的shell[4+i]=?处中被off覆盖,4是0x11111111在shell中的偏移量),指向数据段(运行时)起始处。这下好了前面写入data[x]中的数据,我们可以在shell中用[ebp+x]来访问(也就是说shell与data形成了一一应的关系)。这里直接用off覆盖可能会产生0,我们可以把off与0xffffffff进行异或再覆盖,当然在shell中也要异或一次。最后我们把上面的程序稍作改动,并定义成宏。并把一些常用的操作也定义成宏,如下: 

/*********shell.h*************/ 
/***程序框架的宏************/ 
#define SHELLDATA / 
void main()/ 
{/ 
char *BUFF,*DATA,SHELL[50000];/ 
int CODESIZE,DATASIZE=0;/ 
int I;/ 
__asm mov eax,offset begin/ 
__asm mov BUFF,eax/ 
__asm mov CODESIZE,offset end/ 
__asm {sub CODESIZE,eax }/ 
for(I=0;I<CODESIZE;I++)/ 
SHELL=BUFF;/ 
for(I=0;I<4;I++)/ 
{ char ch=(char)(CODESIZE>>(8*I));/ 
SHELL[7+I]=(char)0xff-ch;/ 
}/ 
DATA=SHELL+CODESIZE; 


#define SHELLCODE/ 
return;/ 
begin:/ 
__asm mov ebp,0xffffffff/ 
__asm xor ebp,0x11111111/ 
__asm add ebp,esp 


#define SHELLEND/ 
end:/ 
;/ 
} 


/***赋值用的宏************/ 
#define STRING(ID,STR)/ 
strncpy(&DATA[ID],STR,strlen(STR)+1);/ 
if(DATASIZE<ID+(int)strlen(STR)+1)/ 
DATASIZE=ID+(int)strlen(STR)+1; 


#define CHAR(ID,VAULE)/ 
DATA[ID]=VAULE;/ 
if(DATASIZE<ID+1)/ 
DATASIZE=ID+1; 


#define INT(ID,VAULE)/ 
for(I=0;I<4;I++)/ 
{ char ch=(char)(VAULE>>(8*I));/ 
DATA[ID+I]=(char)ch;/ 
}/ 
if(DATASIZE<ID+4)/ 
DATASIZE=ID+4; 

/***为使写SHELL方便,而定义的一些宏***********/ 

#define D(x) [ebp+x] 
#define P(x) push x 
#define L(x) }__asm lea edx,x __asm {push edx 

#define INVOKE0(f) {call dword ptr f} 
#define INVOKE1(f,p1) {p1}{call dword ptr f} 
#define INVOKE2(f,p1,p2) {p2}{p1}{call dword ptr f} 
#define INVOKE3(f,p1,p2,p3) {p3}{p2}{p1}{call dword ptr f} 
#define INVOKE4(f,p1,p2,p3,p4) {p4}{p3}{p2}{p1}{call dword ptr f} 

/***函数**********************/ 
void OUTPUT(char *shell,int num) 
{ 
FILE *fp; 
fp=fopen("shell","w"); 

//Hex输出 
//fwrite(shell,num,1,fp); 

//数组形式输出 
for(int i=0;i<num;i++) 
{fprintf(fp,"0x%x,",(unsigned char)shell); 
if((i+1)%10==0) 
fprintf(fp,"/n"); 
} 

fclose(fp); 
} 

   这里的SHELLDATA等是原来的程序主框架,是必须的;CHAR、STRING等宏是为了初始化数据时方便而写的的,第一个参数是一个整数,指明该参数在数据段中的位置。INVOKE4(f,p1,p2,p3,p4)中的4指的是函数中参数的个数是4个,f指的是函数名的地址如:可为[ebp+4],p1,p2是参数必须用L(地址入栈),P(直接入栈)来调用。例如:MessageBox函数的入口地址在[ebp+4]中,正文在[ebp+8]中,标题在[ebp+24]中,那么可写为 
xor eax,eax 
INVOKE4([ebp+4],P(eax),L([ebp+8]),L([ebp+24]),P(eax) ) 

到此,我们的程序就应该成如下格式: 
#include <stdio.h> 
#include <windows.h> 
#include <stddef.h> 
#include "shell.h" 
SHELLDATA 
//定义数据 
STRING(0,"abcdefg") 
INT(8,25) 
CHAR(12,'A') 
…… 
//输出shell 
OUTPUT(SHELL, CODESIZE+DATASIZE); 
SHELLCODE 
__asm{ 
//shell汇编代码 
... 
} 
SHELLEND 

   接下来就是要找函数的API地址了,我们可以的LoadLibrary和GetProcAddress的入中地址放在DATA[0],DATA[4]中,以后可以直接使用call [ebp],call [ebp+4](CALL [ebp]会出现0,可用mov eax,ebp,call[eax]代替)。 

   要找地址的函数名放在DATA数组中,可从DATA[8]开始。函数名在找到地址后就没有用了,就把找到的地址放在函数名的位置(把函数名覆盖),这样有一个好处:可以直接根据函数名的位置访问函数。 
数据段中的0要进行处理,我们可以在数据初始化之后,输出之前进行加密(用C在程序中实现),在SHELL的开头进行解密。这样得到的SHELL中的字符是加过密的,运行时自动解密,不要再另行处理了,十分方便。 

由于本人对VC及宏不太了解,上面的一些代码并不合理,如INVOKE能不能用一个宏来写,数据初始时能不能自动定位,这些都有待广大读者来解决。

                                                      

Windows反弹Shell实战:从PowerShell到Meterpreter的渗透技巧 在网络安全领域,反弹Shell是一种关键的远程控制技术,其核心原理是利用反向连接建立通信通道。与传统的正向连接不同,反弹Shell通过让目标主机主动连接攻击者指定的监听端口,有效绕过防火墙入站限制和NAT网络环境。这项技术的核心价值在于为渗透测试人员提供稳定的后渗透入口,是进行信息收集、权限提升和内网横向移动的基础。在实际应用场景中,尤其在Windows环境下,由于系统架构和安全机制的差异,实现反弹Shell需要掌握特定的技巧。例如,利用PowerShell的System.Net.Sockets.TCPCl 阅读详情

相关推荐

ShellEd(shell脚本编辑器)2.0.3

ShellEd是一个Eclipse平台下的shell脚本编辑器插件 使用时请注意Eclipse的版本

shell脚本运用--自动生成C语言框架 linux

自动创建C语言框架,不用每次都输入#include 、int main()、 return 0; 等各种东西。加快了编程速度。近似等同于自动书写C代码。

Linux驱动开发工程师,熟悉Linux/Android底层驱动、TP、显示、IIC、网络等通用外设调试适配,Linux上层应用开发。常用平台瑞芯微、全志、恩智浦等。 1442

ShellEd(shell脚本编辑器)

ShellEd是一个Eclipse平台下的shell脚本编辑器.

windows运行.sh,运行shell脚本

因为疫情的缘故,现在手边只有windows笔记本一台,却想运行sh make.sh!很绝望…搜了半天,我来记录一下。 只要下载个Git就能实现!Git下载,根据需要自行下载。 要记录好下载路径,进入Git文件夹: 然后打开Git文件下的bin,可以看到: 再打开sh.exe,输入.sh文件所在文件夹路径,比如D:\Git\bin\make.sh,如图: 再运行 sh make.sh 就胜利了!!!哈哈哈!!! 我本来也是那么以为的,但我这样的小白不会知道还要改环境变量!就因为这个我忙活了半天T^T气吐

qq_40041133的博客 2万+

FPGA以太网开发实战:YT8511 PHY芯片MDIO接口配置全流程(附Verilog代码)

本文详细介绍了FPGA以太网开发中YT8511 PHY芯片MDIO接口的配置全流程,包括MDIO接口技术解析、Verilog状态机设计、核心代码实现细节及实战调试经验。通过提供经过验证的Verilog代码和优化策略,帮助开发者快速掌握以太网PHY芯片配置技术,提升通信系统性能。

weixin_29184371的博客 232

【2024保研经验帖】中科院信工所夏令营经验分享

中科院信工所夏令营经验分享,信工所夏令营据说只要报了就能进,这个是不是真的尚不清楚,不过qq群里有八九百个人,也属实可怕。招生老师说我们这届夏令营招200-300个左右,于是又开始惶惶不安。 夏令营时期都是线上进行,先是每个科室进行线上招生宣讲,然后报名第一志愿部门和第二志愿部门,不同部门的考核是不同的。有的部门只要求英语面试和综合面试,有的部门除了面试还需要机试,而有的部门除了这些还需要笔试。

m0_63002183的博客 4489

一、Shell编程--windows下的shell开发运行工具

工欲善其事,必先利其器;对于shell脚本使用vim在linux开发可能效率比较底下,而且大多都是windows开发,当然能够在windows下运行更好。1、开发工具:subli text 3 1)安装插件ShellScriptImproved,用于语法提示以及关键字高亮&lt;1&gt;选择菜单preferences-&gt;package control&lt;2&gt; 输入 并选择ins...

gosenkle的专栏 5万+

深入解析MOSFET结电容与分布参数:Cgd、Cgs、Cds与Ciss、Crss、Coss的关系与应用

本文深入解析了MOSFET结电容Cgd、Cgs、Cds及其等效参数Ciss、Crss、Coss对开关性能的影响。文章详细阐述了米勒电容Cgd如何导致开关损耗与振荡,并提供了基于电容参数的高频电路选型、驱动设计及PCB布局优化等实战指南,帮助工程师解决开关电源与电机驱动中的常见问题。

weixin_29240711的博客 1280

SAPIEN PowerShell最高编辑器和工具之一

例如,由于Windows存储程序的复杂性,不可能通过名为this cylinder的appx文件安装Windows存储程序,但您可以在停车场轻松完成此操作。PowerDevil使用管道,这意味着命令的输出可能是不同的命令。您可能都熟悉CMD的命令和命令提示符Windows环境,这是Windows NT演示的第一天,语法类似于后期DOS图形环境。您可以在web上编写PowerDevil的脚本,但由于该脚本中有许多命令,因此提供了许多工具来简化编写这些脚本,Windows本身就是一个图形环境。

q2315702359的博客 895

DAIC-WOZ数据集文件结构详解:CLNF特征文件、音频转录与PHQ8评分全解读

本文深入解析DAIC-WOZ数据集的文件结构,重点介绍CLNF特征文件、音频转录与PHQ8评分的详细内容。通过多模态数据处理实战指南,帮助研究者高效利用这一抑郁分析领域的重要资源,掌握面部动作单元、声学特征和文本转录的科学解读与应用技巧。

weixin_29159711的博客 183

Ubuntu下Ollama局域网共享大模型服务:5分钟搞定配置与防火墙设置

本文提供了一份在Ubuntu系统上快速配置Ollama实现局域网共享大模型服务的实战指南。通过修改服务配置使其监听所有网络接口,并设置UFW防火墙规则,用户可在5分钟内让同一Wi-Fi下的其他设备(如笔记本、手机)便捷调用主机上的AI模型能力,实现团队或多设备间的AI资源共享。

ik6789012的博客 822

shell编辑工具和在windows上执行linux命令,升职加薪必看

为了做好运维面试路上的助攻手,特整理了上百道。

m0_60707538的博客 997

python 爬虫 xpath 存储到数据库

参考

我是张先生 1289

shell介绍以及windows下利用反弹shell的方法

Shell: 是一种命令行解释器,它作为用户与操作系统内核之间的接口,允许用户通过输入命令来与计算机系统进行交互。

fatesaber_的博客 1494

yolov26改进 | Neck篇 | 利用Gold-YOLO改进yolov26对小目标检测能力(全网独家首发)

本文介绍利用Gold-YOLO的Neck改进YOLOv26,通过信息聚集—分发机制GD,先全局汇聚不同层级特征,再将融合后的全局信息重新注入各尺度分支,增强浅层细节与深层语义之间的交互,减少传统Neck逐层传递造成的信息损失。该结构虽然融合路径更长,但能够在不过度增加延迟的前提下提升多尺度目标检测能力,尤其适合大小目标并存、尺度变化明显和复杂背景场景。本文将讲解GD机制、Neck替换、模块注册与配置方法,并提供完整代码、配置文件及Codex修改思路,方便直接复现、实验对比和二次创新。

Snu77的博客 289

探索 .NET 多版本兼容的精美 WinForms UI 控件库:ReaLTaiizor

你可以根据需要修改主题的颜色方案。// 示例:修改主题颜色设置主色和次色。应用到中。通过继承和重写控件的方法,可以实现自定义样式。// 示例:自定义 MetroButton 样式// 自定义绘制逻辑创建类继承自。重写OnPaint方法,添加自定义绘制逻辑。

墨夶的博客 1509

MSF生成Windows反弹Shell木马完整实验教程

本文手把手讲解利用Metasploit框架,通过msfvenom生成Windows反向TCP木马、搭建Apache下载服务、配置MSF监听捕获靶机反弹会话的完整渗透流程,附分步命令与功能详解,实操性强。

网安学习者一位 1011

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

渗透测试面试常问-Windows 反弹shell有哪些方式

Windows不自带nc所以一般要通过上传nc.exe来实现。NC正向shellNC反向shell。

2301_79457955的博客 2069

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Windows下怎么练习shell脚本

win7系统怎么练习shell脚本?如果你不想升级到win10也不想装虚拟机,那么来看看这里,让你在windows下快速开启shell脚本学习。

jean_1221的博客 2万+

Windows Shell 与 CMD 程序之间联系与区别

Windows Shell 是用户与操作系统交互的界面总称,包含图形化界面和命令行工具。CMD(cmd.exe)是一种传统的命令行 Shell,主要用于执行文本命令和批处理脚本,但功能相对基础。相比之下,PowerShell 是更强大的现代命令行工具,支持面向对象和复杂脚本,适合系统管理和自动化任务。微软推荐优先使用 PowerShell 和 Windows Terminal(现代化终端程序),而 CMD 仅用于兼容旧脚本或简单命令。日常图形操作则通过文件资源管理器等图形 Shell 完成。根据任务需求,用

qq_39980997的博客 1140

反弹shell---生成木马反弹shell(Windows)

Windows反弹shell的一种方式--生成木马

weixin_50956890的博客 4544

深入探究 Windows 反弹 Shell 的方法与实战

本文详细介绍了 Windows 系统下多种反弹 Shell 的方法,包括 nc 工具、mshta 工具、rundll32、regsvr32 以及 PowerShell 等方式。每种方法都有其特点和适用场景,在实际操作中,需根据目标系统环境、网络状况等因素选择合适的方法。同时,反弹 Shell 技术主要用于合法的渗透测试和安全评估场景,严禁用于非法活动。希望读者通过本文的学习,能对 Windows 反弹 Shell 技术有更深入的理解和掌握,提升网络安全攻防能力。

m0_57836225的博客 1697

《metasploit笔记》- 生成木马反弹shell

windows、linux和Android生成木马反弹shell例子

weixin_43875895的博客 1115

windows11 terminal 和 shell 美化

windows11 terminal 和 shell 美化

sty01z的博客 4492

windows 反弹shell_原创干货 | windows反弹shell小结

前言本文是att&ck Command-Line Interface的展开篇平时遇到rce的漏洞,我们通常会弹一个shell给自己,(提权,内网渗透,搭建跳板,等等)linux反弹shell得益于命令行特别友好,所以我们可以非常简单地就可以把shell弹出来,比如使用bash,perl,python,nc,获得shell的原理其实就是建立了一个socket通道,那么今天我们来看看...

weixin_39533896的博客 1290
上一篇: 在C中使用内联汇编
下一篇: 通用ShellCode深入剖析
codeshell
博客等级 码龄22年 9粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值