首页
社区
课程
招聘
[原创]有关的notepad++.5.4.5栈漏洞的详细分析,初步分析论坛已有
发表于: 2015-11-29 17:24 4536

[原创]有关的notepad++.5.4.5栈漏洞的详细分析,初步分析论坛已有

2015-11-29 17:24
4536

新人,喷我时候留情
不知道是哪个洋鬼子写的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期)

收藏
免费 3
支持
分享
最新回复 (4)
雪    币: 171
活跃值: (519)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
正在用notepad++6.8版本的说
2015-11-30 10:19
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
多多支持原创心血
2015-12-8 22:34
0
雪    币: 191
活跃值: (848)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
4
感谢分享
2015-12-16 21:10
0
雪    币: 27
活跃值: (622)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
感谢分享。
记得 exploit-db 上有一个关于np++ 栈溢出的poc 忘记是哪个版本了。。
2016-3-8 18:06
0
游客
登录 | 注册 方可回帖
返回
//