文章目录

  • 基础知识
    • 漏洞概述
      • 漏洞挖掘
      • 漏洞分析
      • 漏洞利用
    • 漏洞在安全中的应用
    • 二进制文件概述
      • PE文件格式
      • 虚拟内存
      • PE文件与虚拟内存之间的映射

基础知识

漏洞概述

  通常把这类能够引起软件做一些“超出设计范围的事情”的bug称为漏洞(vulnerability)。
  功能性逻辑缺陷(bug):影响软件的正常功能,例如,执行结果错误,图标显示错误
  安全性逻辑缺陷(漏洞):通常情况下不影响软件的正常功能,但被攻击者成功利用后,有可能引起软件去执行额外的恶意代码,常见的漏洞包括软件中的缓冲区溢出漏洞、网络中的跨站脚本漏洞(XSS)、SQL注入漏洞等。

漏洞挖掘

  技术角度讲,漏洞挖掘实际上是一种高级的测试(QA),学术界一直热衷于使用静态分析方法寻找源代码中的漏洞;而在工程界,普遍使用Fuzz,一种“灰”盒测试。

漏洞分析

  分析漏洞时,如果能够搜索到POC(proof of concept)代码,使用POC重现漏洞被触发现场。使用调试器观察漏洞的细节,或者利用工具(如Paimei)更方便的找到漏洞触发点。当无法获得POC的时候,通过厂商对漏洞的描述,使用补丁分析的方法,首先比较patch前后可执行文件都有哪些地方被修改,利用反汇编工具(IDA OD)重点分析这些地方。
  漏洞分析需要扎实的逆向基础和调试技术,除此之外,还要精通各种场景下的漏洞利用方法。这种技术更多依靠的是经验,很难总结出通用的条款。实战为王。

漏洞利用

  漏洞利用技术可以追溯到20世纪80年代的缓冲区溢出漏洞利用,直到Aleph One于1996年在Phrack第49期上发表《Smashing The Stack For Fun And Profit》,这种技术才真正流行并日趋完善。包括内存漏洞(堆栈溢出)和Web应用漏洞(脚本注入)等

漏洞在安全中的应用

  1·从不运行任何来历不明的软件,为什么还会中病毒?
  系统漏洞利用引起计算机被远程控制(冲击波蠕虫、slammer蠕虫);服务器软件存在安全漏洞,或者系统中可以被RPC远程调用的函数中存在缓冲区溢出漏洞,攻击者可以发起“主动”进攻。
  
  2·只是点击了URL连接,并没有执行任何其他操作,为什么会中木马?
  浏览器在解析html文件时存在缓冲区溢出漏洞,可以通过承载恶意代码的HTML文件,当通过链接点击访问的时候漏洞被触发,导致HTML中所承载的shellcode被执行,这段代码通常是在没有任何提示的情况下去指定的地方下载木马客户端并运行。
  
  3·本身是数据文件的非可执行文件,如果解析器在解析数据文件的特定数据结构时存在缓冲区溢出漏洞,则可以通过构造payload触发并利用

  4·高强度密码只能抵抗密码暴力猜解的攻击,具体安全还取决于很多其他因素:
  密码存在哪里,例如,存本地计算机还是远程服务器
  密码怎样存,例如,明文存放还是加密存放,什么强度的加密算法等
  密码怎样传递,例如,密钥交换的过程是否安全,网络通讯是否使用SSL等

传输过程
传输过程
本地
服务器

二进制文件概述

PE文件格式

  PE(Portable Exec utable)是Win32平台下可执行文件遵守的数据格式。一个可执行文件不光包括了二进制的机器代码,还会自带许多其他信息,如字符串、菜单、图标、位图、字体等。PE文件格式规定了所有的这些信息在可执行文件中如何组织。在程序被执行时,操作系统会按照PE文件格式的约定去相应的位置准确地定位各种类型的资源,并分别装载到内存的不同区域。
  PE文件格式把可执行文件分成若干个数据结(section),不同的资源被存放在不同的节中。一个典型的PE文件中包含的节如下:
  .text 由编译器产生,存放着二进制的机器代码,反汇编和调试的对象
  .data 初始化的数据块,如宏定义、全局变量、静态变量等
  .idata 可执行文件所使用的的动态链接库等外来函数与文件的信息
  .rarc 存放程序的资源,如图标、菜单等

  .除此之外,还可能存在的节包括“reloc”、“edata”、“tls”、“rdata”等,使用Microsoft Visual C++中的编译指示符#pragma dat a_seg()可以把代码中的任意部分编译到PE的任意节中,节名也可以自己定义。如果可执行文件经过了“加壳”处理,PE的节信息就可能出现异常。

虚拟内存

  .Windows的内存可以被氛围两个层面:物理内存和虚拟内存。其中物理内存比较复杂,需要进入Windows内核基本Ring0才能看到。通常,在用户模式下,我们用调试器看到的内存地址都是虚拟内存。
通过虚拟内存管理器映射实现每个进程分配“独立”的4GB空间。当需要进行实际的内存操作的时候,内存管理器才会把“虚拟地址”和“物理地址”联系起来。

PE文件与虚拟内存之间的映射

  .在调试漏洞是,可能经常需要做这样两种操作。
(1)·静态反汇编工具看到的PE文件中某条指令的位置是相对于磁盘文件而言的,即所谓的文件偏移,我们可能还需要知道这条指令在内存中的位置,即虚拟内存地址(VA)。
(2)·在调试时看到的某条指令的地址是虚拟内存地址,也常需要回到PE文件中找到对应的机器码。

文件偏移地址(File Offset)
  .数据在PE文件中的地址叫文件偏移地址,文件在磁盘存放时相对于文件开头的偏移,可能叫做文件地址更准确。
装载基址(Image Base)
  .PE装入内存时的基地址。默认情况下,EXE文件在内存中的基地址是0x0040 0000 ,DLL文件是0x1000 0000 。可以通过修改编译选项更改。
虚拟内存地址(Virtual Address VA)
PE文件中的指令被装入内存后的地址。
相对虚拟地址(Relative Virtual Address,RVA)
相对虚拟地址是内存地址相对于映射基址的偏移量。
虚拟内存地址、映射基址、相对虚拟内存地址三者之间:
   VA=Image Base+RVA
   RVA=VA-Image Base
   Image Base=VA-RVA

  文件偏移是相对于文件开始出0字节的偏移,RVA(相对虚拟地址)是相对于装载基址0x0040 0000 处的偏移。由于操作系统在进行装载时“基本”上保持PE中的各种数据结构,所以文件偏移地址和RVA有很大的一致性。
  PE文件中的数据按照磁盘数据标准存放,以0x200字节为基本单位进行组织。当一个数据节(section)不足0x200字节时,不足的地方以0x00填充;PE数据节的大小永远是0x200的整数倍。
  当代码装入内存,将按照内存数据标准存放,并以0x1000字节为基本单位进行组织。内存中的节总是0x1000的整数倍。

    文件偏移=虚拟内存地址(VA)-装载基址(Image Base)-节偏移=RVA-节偏移

《0day安全:软件漏洞分析技术》学习笔记·1(需要补充节部分)相关推荐

  1. 0day安全:软件漏洞分析技术——系统内核漏洞

    本文是阅读<0day安全:软件漏洞分析技术>后的笔记.      内核漏洞主要的作用包括:远程任意代码执行,本地权限提升,远程拒绝服务攻击,本地拒绝服务攻击.从漏洞的利用来看,远程拒绝服务 ...

  2. 0day安全:软件漏洞分析技术(第2版)

    0day安全:软件漏洞分析技术(第2版) 基本信息 作者:王清   张东辉   周浩   王继刚   赵双 丛书名:安全技术大系 出版社:电子工业出版社 ISBN:9787121133961 上架时间 ...

  3. 《0day安全-软件漏洞分析技术》实验笔记2

    实验 3.4 通用shellcode 工具 Windows XP SP3 Visual C++ 6.0 OD IDA 源代码 见随书代码,参考:https://github.com/jas502n/0 ...

  4. 【逆向】《0day安全-软件漏洞分析技术》实验笔记2

    实验 3.4 通用shellcode 工具 Windows XP SP3 Visual C++ 6.0 OD IDA 源代码 见随书代码,参考:https://github.com/jas502n/0 ...

  5. 书评第003篇:《0day安全:软件漏洞分析技术(第2版)》

    本书基本信息 丛书名:安全技术大系 作者:王清(主编),张东辉.周浩.王继刚.赵双(编著) 出版社:电子工业出版社 出版时间:2011-6-1 ISBN:9787121133961 版次:1 页数:7 ...

  6. 《0day安全:软件漏洞分析技术第二版》

    简单说来,这次再版的原因有二: 首先,国人深知与时俱进的道理,技术上面更是如此.随着windows平台保护技术的不断改进,win7的广泛使用,第一版中所述的很多方法已有较大局 限.为此我们逐一搜集了近 ...

  7. 0day安全:软件漏洞分析技术(第2版)pdf

    下载地址:网盘下载 内容简介  · · · · · · 本书分为4篇17章,系统全面地介绍了Windows平台缓冲区溢出漏洞的分析.检测与防护.第一篇为常用工具和基础知识的介绍:第二篇从攻击者的视角出 ...

  8. 《ODAY安全:软件漏洞分析技术》学习心得-----shellcode的一点小小的思考

    I will Make Impossible To I'm possible -----------LittleHann 看了2个多星期.终于把0DAY这本书给看完了,自己动手将书上的实验一个一个实现 ...

  9. 《ODAY安全:软件漏洞分析技术》学习心得

    I will Make Impossible To I'm possible -----------LittleHann 看了2个多星期.终于把0DAY这本书给看完了,自己动手将书上的实验一个一个实现 ...

最新文章

  1. 仅需6步,教你轻易撕掉app开发框架的神秘面纱(2):MVP比MVC更好吗
  2. javascript定时器
  3. Oracle11gR2 64bit+Oracle11gR2Client32bit+pl/sql 9
  4. linux css 工具,7个Linux和Ubuntu下的免费CSS编辑器
  5. 线上日志分析与其他一些脚本
  6. Vue.js 极简小例:读值、样式调用、if判断、a 标签、点击事件、管道
  7. 解决VMware Tools installation cannot be started manually while Easy Install is in progress.
  8. 从客户变成员工在租赁公司打工--我成为程序员所经历的(三)
  9. VMWareCentOS7硬盘扩容
  10. 虚拟机win 7 上安装VWware Tools提示升级系统到SP1
  11. 恒生UFX交易接口基本介绍
  12. 图像特征与描述(2)
  13. MySQL查询结果中Duration Time和Fetch Time的含义
  14. vue3:加载本地图片等静态资源
  15. USB 虚拟串口简介
  16. 货郎担问题java算法_经典算法(1)---货郎担问题
  17. 键盘+moveit+rviz 控制六轴机械臂(仿真)
  18. 人工智能如何用在智能家居行业?
  19. 移动端vue+vant+高德地图实现拖拽选址,周边选址,搜索选址,自动定位,选择城市功能,获取地址经纬度,详细地址
  20. 一个合格的中级前端工程师需要掌握的技能笔记(中)

热门文章

  1. 3D文档(BRD、MRD、PRD)定义联系区别
  2. 博客-Blog开发,追踪现在的潮流
  3. 设计几何体素描_素描几何体教案
  4. 骚操作!!程序员同时应聘十几个工作,靠裁员补偿年入千万
  5. 富士通论坛2015:从创新看企业社会责任
  6. 布隆过滤器(亿级数据过滤算法)
  7. OSE RTOS中APP进程接收消息机制
  8. linux快速搜索指定内容-小知识
  9. PDF怎么转换成WORD?3大方法助您PDF转Word!
  10. JD6606S用于USB的PD充电协议芯片资料共享