-
-
[原创]有关的notepad++.5.4.5栈漏洞的详细分析,初步分析论坛已有
-
发表于:
2015-11-29 17:24
4536
-
[原创]有关的notepad++.5.4.5栈漏洞的详细分析,初步分析论坛已有
新人,喷我时候留情
不知道是哪个洋鬼子写的exploit,但是我照着他的exploit做分析的时候,感觉他给的exploit给的有问题,起码我是编译没有成功,但是把他的exploit截出来一些还是可以的,小弟现在也就只能做些这种拾人牙慧的事情,不过大牛也是重新人开始的。正体。
首先溢出点:
0049D0BE 51 push ecx
0049D0BF FF75 10 push dword ptr [ebp+10]
0049D0C2 50 push eax
0049D0C3 8B07 mov eax, dword ptr [edi]
0049D0C5 FF3406 push dword ptr [esi+eax]
0049D0C8 FF15 60914B00 call dword ptr [<&KERNEL32.ReadFile>] ; kernel32.ReadFile //发生溢出的api
就是这里,这个api使用的有问题,如果我的文本够长的话就会覆盖吊栈
看看栈,数明了一下溢出参数
000BFFCC 000002B0 |hFile = 000002B0
000BFFD0 000C0128 |Buffer = 000C0128
000BFFD4 00020000 |BytesToRead = 20000 (131072.)
000BFFD8 000BFFF0 |pBytesRead = 000BFFF0
000BFFDC 00000000 \pOverlapped = NULL、
此时000C0008
再看看栈溢出后栈的情况
000C0134 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
000C0144 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
000C0154 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
000C0164 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
000C0174 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
000C0184 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
000C0194 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
000C01A4 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAA
好,根据在Msg报文的分发函数上面下条件断点找到这里的窗口过程在
0041729B 83BE 44040000 0>cmp dword ptr [esi+444], 1 ; 窗口过程
拖进ida,看他的详细函数处理流程,再找它的溢出利用点。
在ida中可以看到
在ida中我从sub_40D050开始看
……
.text:0040D0F5 push 0 ; int
.text:0040D0F7 lea eax, [esp+268h+var_24C]
.text:0040D0FB push eax ; int
.text:0040D0FC lea ecx, [esp+26Ch+Buffer]
.text:0040D100 push ecx ; wchar_t *
.text:0040D101 push edi ; int
.text:0040D102 mov ecx, esi
.text:0040D104 call sub_40A170 //参数溢出的函数于此处可以观察出ebp值,用于计算到底填充文本需要多大,才能覆盖ebp之后的地址,
.text:0040D109 test al, al
.text:0040D10B jz loc_40D1E1
……
在其子函数sub_40A170中可以看到
text:0040A2DF call _fread
看其子函数sub_40A170中的函数声明部分:
int v6; // esi@1
FILE *hFile; // edi@1
char result; // al@2
int v9; // eax@7
size_t v10; // eax@9
size_t v11; // edi@9
int v12; // eax@9
int v13; // ecx@9
char v14; // bl@10
unsigned int v15; // [sp-10h] [bp-34h]@1
int v16; // [sp+0h] [bp-24h]@1
FILE *v17; // [sp+4h] [bp-20h]@1
char v18; // [sp+Ah] [bp-1Ah]@6
bool v19; // [sp+Bh] [bp-19h]@3
unsigned int *v20; // [sp+Ch] [bp-18h]@1
int v21; // [sp+14h] [bp-10h]@1
int (__cdecl *v22)(int, PVOID, int); // [sp+18h] [bp-Ch]@1
unsigned int v23; // [sp+1Ch] [bp-8h]@1
int v24; // [sp+20h] [bp-4h]@1
//之后边上可以被溢出的缓冲区变量Buffer地址
再看溢出函数
……
v10 = fread(&Buffer, 1u, 0x20000u, hFile);// 这里也可以被溢出的
……
即此函数被覆盖,当函数返回sub_40D050的:
.text:0040D109 test al, al
时候将会发生劫持行为
引用文章:http://bbs.pediy.com/showthread.php?t=112088
有关shellcode利用,以及精心做好的给notepad++.5.4.5打开的文本明天放出
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)