突破SafeSEH机制之二——利用未启用SafeSEH模块绕过SafeSEH

本文探讨如何在遇到SafeSEH保护机制时,通过布置shellcode并利用未启用SafeSEH的模块中的跳转指令,如pop pop ret,来绕过该机制并恢复控制权。在调试过程中,发现覆盖的SEH头在执行pop pop ret后返回到shellcode的低地址,但实际上shellcode始于返回地址之后16个字节的位置。
摘要由CSDN通过智能技术生成
敲黑板敲黑板~~今天我们继续~
上次讲到SafeSEH的突破,介绍了一个简单的利用堆绕过SafeSEH 突破SafeSEH机制之一——利用堆绕过SafeSEH
本篇总共遇到了3个问题还没有解决,有没有大神帮我解答一下,我都把问题背景给标黄了。
突破思路:
那么有3种情况,系统可以允许异常处理函数执行:
1、异常处理函数位于加载模块内存范围之外,DEP关闭
2、异常处理函数位于加载模块内存范围之内,相应模块未启用SafeSEH(SafeSEH表为空),不是纯IL(本次要调试的)
3、异常处理函数位于加载模块内存范围之内,相应模块启用SafeSEH,异常处理函数地址包含在SafeSEH表中( 放弃

可以看到,我们突破SafeSEH的方法分为3种
1、排除DEP干扰,在加载模块内存范围外找一个跳板指令就可以转入shellcode执行
2、利用未启用SafeSEH模块中的指令作为跳板,转入shellcode执行
3、由于SafeSEH表加密,对于新手的我暂时不考虑了。

今天我们一起调试 第2种 ,加载模块未启用SafeSEH,啥意思?
简单来说,就是... 知道LoadLibrary吧,知道dll吧?系统会在程序运行的时候提供各种各样的模块供程序加载调用(kernel32.dll,user32.dll等),这些程序加载的模块由于某种原因没有启用SafeSEH,这样就可以为我们所用!一般来说,这些系统提供的dll都会有启用SafeSEH,为了本次实验,我们自己制作一个没有启用SafeSEH的dll。

第一步 编写一个包含异常处理的漏洞程序
环境:
XP SP3
VS 2008
禁止优化选项(C/C++------optimization:disable)
Release版本编译
关闭DEP(还是那个问题,我在vs2008里并没有关闭DEP(截图在上一个帖子),可是执行结果却没有影响,有没有遇到相同问题的同学??)


代码:
[C]  纯文本查看  复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
char shellcode[]=
"\x90\x90\x90\x90... ..."
DWORD MyException( void )
{
         printf ( "There is an exception" );
         getchar ();
         return 1;
}
void test( char * input)
{
         char str[200];
         strcpy (str,input);       
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值