Windows 2000 栈溢出 利用异常
当在一个函数(test)里面自定义了异常处理,如下:
那么在运行时,它会把自定义的异常处理函数MyExceptionhandler()的地址放入栈中(PUSH 004013CC)
然后把fs:[0]的地址(也是TEB的地址,SEH链的起始地址)放入栈中,然后把ESP的地址赋值给fs:[0];
异常链结构:
struct SEH
{
SEH* next;//指向下一个异常链地址
int* funcAddress;//指向保存异常处理函数地址的地址(我讨厌指针这个词,在汇编里面,不是地址,就是数据);
}
上面的操作就是,链表的插入,插在了头部。
溢出:
test函数里面,strcpy()函数,如果拷贝超出了容器数组的边界,就会把栈的数据覆盖
而栈里面容器后面是SEH结构,如果用shellcode的地址把funcAddress覆盖了,异常处理就会被骗。
异常调用:
当发生除0异常时,会调用函数进行异常处理
对异常进行分发等一系列操作,然后就找到了fs:[0]的异常处理链,fs:[0]里面保存的就是之前那个ESP的地址,
它就跑过来要调用这个地址里面保存的函数地址,但是这个函数地址已经被修改了。然而系统是傻的,管你什么地址,能过去就过去。
所以就到了shellcode里面。(shellcode执行开始的地址就是buf的地址,buf是局部变量,相对于EBP的偏移是恒定的,可通过偏移找出来。
当然了,不考虑普遍适用性,通过调试找出来,写死也可以);
注意事项:
char buf[],这是个字符串数组,字符串数组在strcpy时会被'0x00'截断,因此,shellcode中不能有’0x00'。
可以把构筑好的shellcode异或加密,使得没有'0x00',运行时再解密后面的代码。
调试:
在代码中加入 __asm int 3;用于添加断点,编译好程序。直接运行,系统会报错,点取消,然后会自动使用默认调试器调试。
OD设置系统默认调试器:option --> just in time(实时调试)
Windows 2000 栈溢出 利用异常的更多相关文章
- 20155306 白皎 0day漏洞——漏洞利用原理之栈溢出利用
20155306 白皎 0day漏洞--漏洞利用原理之栈溢出利用 一.系统栈的工作原理 1.1内存的用途 根据不同的操作系统,一个进程可能被分配到不同的内存区域去执行.但是不管什么样的操作系统.什么样 ...
- Windows server 2012 利用ntdsutil工具实现AD角色转移及删除域控方法
场景1:主域控制器与辅助域控制器运行正常,相互间可以实现AD复制功能.需要把辅助域控制器提升为主域控制器 ,把主域控制器降级为普通成员服务器:这种场景一般应用到原主域控制器进行系统升级(先转移域角色, ...
- 为了体验 ILS 在Win2012R2 Hyper-V上安装Windows 2000 AdvSer
Win2012 R2 Hyper-V 的集成服务包已不支持Windows 2000 先安装SP4.IE6.更新汇总包,再来安装这个. 安装完成后,会有几个未知设备,直接禁用就可以了. 开启Window ...
- Windows环境下利用github快速配置git环境
在windows环境下利用github客户端我们可以直接拥有可视化的界面来管理工程,当然你也可以选择你喜欢的命令行工具来做.今天我分享一个比较快速的方式来配置git环境. 先去下载github的win ...
- 网络负载均衡环境下wsHttpBinding+Message Security+Windows Authentication的常见异常
提高Windows Communication Foundation (WCF) 应用程序负载能力的方法之一就是通过把它们部署到负载均衡的服务器场中. 其中可以使用标准的负载均衡技术, Windows ...
- Windows 2003】利用域&&组策略自动部署软件
Windows 2003]利用域&&组策略自动部署软件 转自 http://hi.baidu.com/qu6zhi/item/4c0fa100dc768613cc34ead0 ==== ...
- [Oracle] UNIX与Windows 2000上Oracle的差异(III)
作者:Ian Adam & David Stien, SAIC Ltd 日期:19-Dec-2003 出处:http://www.dbanotes.net翻译:Fenng ORACLE 的安装 ...
- [Oracle] UNIX与Windows 2000上Oracle的差异(II)
作者:Ian Adam & David Stien, SAIC Ltd 日期:19-Dec-2003 出处:http://www.dbanotes.net翻译:Fenng 数据库启动与关闭 在 ...
- [Oracle]UNIX与Windows 2000上Oracle的差异(I)
作者:Ian Adam & David Stien, SAIC Ltd 日期:19-Dec-2003 出处:http://www.dbanotes.net翻译:Fenng ---------- ...
随机推荐
- day12-Python运维开发基础(推导式、生成器与生成器函数)
1. 推导式(列表推导式.集合推导式.字典推导式) # ### 推导式 : 通过一行循环判断,遍历出一系列数据的方式是推导式 """ 推导式一共三种: 列表推导式,集合推 ...
- springboot发送email邮件
添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>sp ...
- vue 项目上传到码云,push时error: failed to push some refs to 'https://gitee.com/mawenrou/vue_ht.git'
vue 项目上传到码云,push时error: failed to push some refs to 'https://gitee.com/mawenrou/vue_ht.git' 因为之前已经创建 ...
- redis学习笔记-02:为什么使用NoSQL数据库
一.第一代:单机版的MySQL 1.静态网页,动态交互类型的网站不多. 2.架构:APP---->DAL---->MySQL Instance 3.数据存储的瓶颈: (1)数据量总大小超过 ...
- shiro用ajax方式登录
用了shiro一段时间了,但是有点受不了它请求登录如果验证不通过直接跳的是loginUrl…所以我想很多人想用ajax实现shiro的登录直接在回调函数里面通过js显示出错信息吧. 今天查了一天的资料 ...
- javaweb框架--自定义标签与freemaker结合
http://blog.csdn.net/myfmyfmyfmyf/article/details/8960299 很有用但是不不知道怎么说,写个例子,总之方便多了,并且容易管理,重复利用强 1.自定 ...
- intel关于spark gc的优化建议
Apache Spark由于其出色的性能.简单的接口和丰富的分析和计算库而获得了广泛的行业应用.与大数据生态系统中的许多项目一样,Spark在Java虚拟机(JVM)上运行.因为Spark可以在内存中 ...
- 题解 P3258 【[JLOI2014]松鼠的新家】
树链剖分板子题 先说点别的 小熊维尼啊,嘿嘿嘿. 写题经历 悲惨命运:树剖调了2天,一直90分,死活不AC,调出了心病,快下课时改了一下数据范围,A了--.(刚开始数组开了800100,改120010 ...
- Jenkins + git + maven 安装
1.jenkins安装 sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo ...
- vue 父组件向子组件传参(笔记)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...