当前位置: 首页 > news >正文

漏洞利用开发基础学习记录

文章目录

  • 简介
    • Win32缓冲区溢出
      • 内容
      • 难点
    • SEH 溢出
      • 内容
      • 难点
    • Egg Hunters
      • 内容
      • 难点
    • Unicode 溢出
      • 内容
      • 难点
    • x86-64 缓冲区溢出
      • 内容
      • 难点
  • 参考资料

简介

本文基于ERC.Xdbg漏洞分析文章进行初步归纳整理,主要有Win32 缓冲区溢出、SEH 溢出、Egg Hunters、Unicode 溢出、x86-64 缓冲区溢出,工具下载链接ERC.Xdbg

Win32缓冲区溢出

内容

1.通过输入发现修改了eip,确定存在漏洞
2.利用ERC --FindNRP命令确定溢出有效长度,修改指定的eip
3.因最终的shellcode在堆栈中,所以寻找带有jmp esp的命令且该命令所在模块未含有ASLR等安全属性
4.将寻找到的目标命令eip改写到溢出的有效长度成功修改eip,执行特定shellcode

难点

对于eip如何修改达到目标的shellcode位置,这里是采用的寻找一个固定地址且命令为jmp esp,这样就可以直接将eip调整到shellcode位置

SEH 溢出

内容

1.通过输入发现x64dbg中的SEH链的异常处理例程被修改
2.利用ERC --FindNRP命令确定溢出有效长度,修改使其能够达到目标的异常处理例程,也就是拿到eip的指向
3.寻找pop pop ret命令且该命令所在模块未含有ASLR等安全属性
4.将寻找到的目标命令eip改写到溢出的有效长度成功修改eip,这样程序运行后将返回到修改的下一个异常地址中
5.构建一个jmp跳过到寻找的目标命令下方,这样就可以执行构造的shellcode

难点

SEH溢出之所以要寻找pop pop ret命令,是因为在触发异常时当前的堆栈保存的结构是一个名为EXCEPTION_DISPOSITION的结构,而且esp+8的位置就正好指向下一个链表的位置,也就是编写溢出代码的位置,详细请参考SEH Handler结构分析

Egg Hunters

内容

1.基于上面SEH溢出漏洞是通过修改jmp跳转到下方,但是有时程序在对字符串做过滤的时候遇到0x00、0x0A、0x0D等硬编码时会终止,所以无法跳转到下方构建的Shellcode
2.这样只能向上跳转,但是向上跳转有最大限制80字节显然是不够用,所以构建一个寻找标识的内容的代码,这样可以拓展到寻找到更多长度的shellcode

难点

对于这个寻找标识的代码构建比较考察编程功底,想要写好非常困难,所以一般直接使用现有的或者魔改后的(防止被特征)

Unicode 溢出

内容

1.与上面基本类似,但由于程序会将输入的内容格式化为unicode,所以在寻找pop pop retn的命令eip时也必须寻找到可以构建unicode方式的eip
2.在跳转到构建的溢出数据块时,由于输入的数据都是unicode无法直接当成命令去使用,所以利用0x75(它会将前后的0x00合并形成一个新命令)、0x71(相当于Unicode版的nop)进行构建shellcode

难点

1.在寻找跳转的eip时要找到unicode版本的eip
2.而该eip后续会作为汇编代码进行执行,所以寻找的时候也要符合硬编码的规范使其不崩溃
3.搭配特别硬编码0x75和0x71实现代码执行

x86-64 缓冲区溢出

内容

1.64位程序与32位缓冲区溢出几乎相同,唯一的区别就在于64位会对eip进行校验,如果违法就不进行更改eip
2.所以使用原先的命令ERC --FindNRP是无法定位到溢出的有效数据大小的,应当在内存中搜索特定的标识进行定位,命令为ERC --Pattern o 字符串,这样就可以得到被溢出的数据有效大小
3.但是数据依然在栈中,根据x64特性会将返回值放到eax中,在本实例中可以直接搜索具有jmp eax的地址进行跳跃执行编写的ShellCode

难点

无法像之前那样直接使用命令FindNRP定位溢出数据大小,本质上与x32缓冲区溢出并无区别

参考资料

漏洞利用开发基础知识 1:Win32 缓冲区溢出
漏洞利用开发基础知识 2:SEH 溢出
漏洞利用开发基础知识 3:Egg Hunters
漏洞利用开发基础知识 4:Unicode 溢出
漏洞利用开发基础知识 5:x86-64 缓冲区溢出

http://www.lryc.cn/news/384829.html

相关文章:

  • 云通SIPX,您的码号资源智能调度专家!
  • 04-Mysql 索引,事务
  • U盘提示格式化怎么搞定?本文有5种方法(内含教程)
  • day02-登录模块-主页鉴权
  • git rebase的使用
  • LICEcap-开源GIF 屏幕录制工具
  • 【Java Web】会话管理
  • RestTemplate修改默认转换器,使用FastJsonConverter
  • 什么是div移动指令?如何用vue自定义指令实现?
  • Golang | Leetcode Golang题解之第187题重复的DNA序列
  • 智能猫砂盆到底是不是智商税?解救上班族双手的测评合集来了
  • java 数据新增、更新、删除监听,并记录日志或其他业务
  • developer.android.com在国内无法正常访问解决方法
  • 大学物理(下)笔记
  • Mind+在线图形编程软件(Sractch类软件)
  • 数智化招采供应链平台七大优点
  • Java面试题:对比HTTP的GET和POST方法,并讨论它们的使用场景
  • webpack+webpack server入门
  • Java内存模型以及多线程并发深度剖析
  • 【JS问题】require相对路径引入模块
  • SAP ABAP 常用实用类
  • 笔记本电脑录屏,教你3个方法,简单录屏
  • A-8 项目开源 qt1.0
  • CNC数控机床如何通过工业智能网关实现远程运维?天拓四方
  • PMP培训,哪个机构的通过率高?
  • 贷款承诺状态映射参数表,用于加工的提示信息
  • 理解 iOS 开发中的 NS_ENUM 和 NS_OPTIONS
  • 2024年6月26日 (周三) 叶子游戏新闻
  • LangChain4j之HelloWorld
  • MySQL 基础概念