首页
论坛
专栏
课程

[翻译]Exploit 编写系列教程第六篇 绕过Cookie,SafeSeh,HW DEP 和ASLR

2009-12-8 19:43 35774

[翻译]Exploit 编写系列教程第六篇 绕过Cookie,SafeSeh,HW DEP 和ASLR

dge
6
2009-12-8 19:43
35774
最新回复 (33)
riusksk 41 2009-12-8 19:51
2
0
终于出来了,dge兄弟幸苦了,呵呵
moonife 8 2009-12-8 20:10
3
0
第六篇是最长的 也是最有含量的
支持和感谢dge兄的翻译
yingyue 2009-12-8 20:23
4
0
我知道翻译是很辛苦的
youstar 2 2009-12-8 20:51
5
0
辛苦了,下载下来看看!
仙果 19 2009-12-9 10:07
6
0
谢谢共享了哈。。真是好文章
西门飞雪 2009-12-19 12:35
7
0
兄弟,感谢你的辛勤翻译
ddup 2010-1-5 14:31
8
0
辛苦了,好东西!!!
fireworld 2010-1-5 19:56
9
0
感谢楼主的分享
linquid 2010-4-27 13:57
10
0
这几篇文章都有连贯性,所以必须一篇一篇 看,确实需要时间
可见光 2010-5-3 22:35
11
0
我的vc2005为什么在linker设置了/safeseh:yes,编译的程序safeseh还是关闭的,大家有没有出现这种情况
znjcx 2010-5-17 23:02
12
0
请问第五篇还没有翻译出来吗?
imbadyc 2010-9-13 19:41
13
0
好文章!谢谢楼主
neineit 10 2010-9-14 10:58
14
0
我只能说非常感谢
zzcc 2010-9-22 08:06
15
0
辛苦了。。。。。
wanarenese 2010-11-12 17:19
16
0
最近碰到了,才知道这篇文章的好,之前不识货,感谢了
wufenjack 2010-12-23 11:10
17
0
第六篇中绕过SafeSeh:利用加载模块之外的地址这一小节的例子中使用00270b0b改写了seh , 00270b0b 处的汇编代码是 call 【ebp+0x30】,这样的话怎么会执行的我们改写的nseh中的cc去?
我理解的是eip应该到了当前ebp+0x30的位置。是不是我理解不对,请高手指点下,谢谢!
riusksk 41 2010-12-24 18:19
18
0
ebp+0x30不就正好指向nseh!

0:000>
eax=00000000 ebx=00000000 ecx=00270b0b edx=7c828786 esi=00000000 edi=00000000
eip=00270b0b esp=0012f8ec ebp=0012f90c iopl=0 nv up ei pl zr na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246
00270b0b ff5530 call dword ptr [ebp+30h] ss:0023:0012f93c=0012fee0
0:000>
eax=00000000 ebx=00000000 ecx=00270b0b edx=7c828786 esi=00000000 edi=00000000
eip=0012fee0 esp=0012f8e8 ebp=0012f90c iopl=0 nv up ei pl zr na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246
0012fee0 cc int 3
wufenjack 2010-12-28 09:00
19
0
在第六章-绕过ASLR:基于SEH的exploit一节中,seh在608字节后被覆盖,我通过测试发现,程序断了,返回地址被覆盖了,而不是因为seh被覆盖出错了,这个是怎么回事?seh整迷糊了,高手来帮忙解答下,谢谢!
riusksk 41 2010-12-28 19:24
20
0
正是因为覆盖返回地址才导致异常,这样我们构造的SEH handler 才有机会运行,然后我们通过覆盖SEH来控制异常处理的执行流程。
riusksk 41 2010-12-28 19:26
21
0
请你通篇读完全文后再提问,不要看到一半不懂就急忙来发帖,答案都在下文呢!
wufenjack 2010-12-29 08:33
22
0
嗯,谢谢,我自己再仔细调试一遍看看。有必要再回头看看第三篇的基础了,
csiau 2011-6-22 09:41
23
0
谢谢共享了哈。。真是好文章
holiday 2011-11-1 12:24
24
0
感谢分享!
Free万岁!
ljbljb 2012-1-6 10:32
25
0
强, 感谢分享
ljbljb 2012-1-6 10:34
26
0
非常感谢!辛苦!
shenger 2012-12-21 16:24
27
0
话说我在看英文版的,想了想还是搜搜看雪有没翻译吧。。还真有!
yangwenyi 2014-8-27 18:03
28
0
谢谢分享!
superkv 2014-8-28 07:44
29
0
通过覆盖上层函数的栈数据来绕过

当函数的参数是对象指针或结构指针时,这些对象或结构存在于调用者的堆栈中,这也能导致GS 被绕过,
(覆盖对象和虚函表指针,如果你把这个指针指向一个用于欺骗的虚函数表,你就可以重定向这个虚函数
的调用,并执行恶意的代码。)。
请问怎么覆盖对象和虚函数表指针,不是这样来的吗[ptr][buffer][ebp][...]
Gall 2015-6-23 19:08
30
0
感谢分享, 我个人在实验过程中遇到一个问题, 请解答。

+++++++++++++++++++++++++++++++++++++++++
测试环境: Windows XP SP3 English
             Microsoft Visual C++ 2008 Express Edition
+++++++++++++++++++++++++++++++++++++++++

[Exploit 编写系列教程.pdf ]
[
第六篇: 绕过 Cookie,SafeSeh,HW DEP和 ASLR][第144页]

使用Visual C++ 2008 编译下面代码, 如下图所示。

[/B]#include "stdafx.h"
#include "stdio.h"
#include "windows.h"

void GetInput(char* str, char* out)
{
    char buffer[500];
    try
    {
         strcpy(buffer,str);
         strcpy(out,buffer);
         printf("Input received : %s\n",buffer);
    }
    catch (char * strErr)
    {
        printf("No valid input received ! \n");
        printf("Exception : %s\n",strErr);
    }
}

int main(int argc, char* argv[])
{
    char buf2[128];
    GetInput(argv[1],buf2);
    return 0;
}[B]


使用Windbg进行调试,显示信息如下:
[/B]CommandLine: "C:\Documents and Settings\lab\Desktop\basicbof\basicbof\Debug\basicbof.exe" AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Symbol search path is: SRV*C:\localsymbols*http://msdl.microsoft.com/download/symbols;cache*c:\localsymbols*http://msdl.microsoft.com/download/symbols
Executable search path is: 
ModLoad: 00400000 00419000   basicbof.exe
ModLoad: 7c900000 7c9af000   ntdll.dll
ModLoad: 7c800000 7c8f6000   C:\WINDOWS\system32\kernel32.dll
(574.f5c): Unknown exception - code c0000135 (first chance)
(574.f5c): Unknown exception - code c0000135 (!!! second chance !!!)
eax=0012fc54 ebx=00000000 ecx=0012fca8 edx=7c90e4f4 esi=7ffd8000 edi=c0000135
eip=7c96478e esp=0012fc54 ebp=0012fca4 iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000246
ntdll!RtlRaiseStatus+0x26:
7c96478e c9              leave[B]


为何没有出现文中覆盖EIP的情况,
(908.470): Access violation - code c0000005 (!!! second chance !!!)
eax=0000021a ebx=00000000 ecx=7855215c edx=785bbb60 esi=00000001 edi=00403380
eip=41414141 esp=0012ff78 ebp=41414141 iopl=0         nv up ei pl nz na po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000202
41414141 ??
上传的附件:
lacoucou 12 2015-6-23 22:05
31
0
那位大牛贴下原文地址
bruceDL 2015-8-31 11:28
32
0
泉哥,我在这里有个疑问,这个30的偏移是怎么来的呢?
假如抛开教程来编写这个exp,当我发现可以触发异常并且可以覆盖SEH和nSEH,那我该怎么确定nSEH应该指向什么指令?
第三篇里面用的是pop/pop/ret,也有一段说明为什么这么做可以跳到SEH去执行,知其然也知其所以然。这一篇里面虽然我用call [ebp+30]也成功了,但是原文里好像没说这么做的原因,是纯粹靠调试过程中的观察还是说有系统底层机制的原理在里面呢?
帖子过去比较久了,不晓得泉哥还看不看得到…
LuckStar 2016-4-11 22:44
33
0
辛苦了,翻译的非常好
背包绅士 2018-8-9 21:51
34
0
bruceDL 泉哥,我在这里有个疑问,这个30的偏移是怎么来的呢? 假如抛开教程来编写这个exp,当我发现可以触发异常并且可以覆盖SEH和nSEH,那我该怎么确定nSEH应该指向什么指令? 第三篇里面用的是po ...
你的问题有答案了吗 ?我看到这里也有疑问
游客
登录 | 注册 方可回帖
返回