|
《漏洞利用与渗透测试基础》课程期末复习资料
《漏洞利用与渗透测试基础》课程讲稿章节目录:
第一章 绪论
第一节 病毒和木马
第二节 软件漏洞及产生原因
第三节 漏洞产业链
第四节 渗透测试
第五节 实验环境
第二章 基础知识
第一节 内存区域
第二节 函数调用
第三节 常见寄存器与栈帧
第四节 汇编语言—寄存器及主要指令
第五节 汇编语言—寻址方式
第六节 函数调用汇编示例
第七节 PE文件
第八节 虚拟内存
第九节 OllyDBG和IDA
第十节 OllyDBG示例
第三章 漏洞概念
第一节 漏洞概念及特点
第二节 漏洞分类
第三节 漏洞库
第四节 第一个漏洞
第四章 常见漏洞
第一节 缓冲区溢出漏洞-栈溢出
第二节 缓冲区溢出漏洞-其他溢出
第三节 格式化字符串漏洞
第四节 整数溢出漏洞
第五章 漏洞利用
第一节 漏洞利用概念
第二节 Shellcode编写示例
第三节 Shellcode编写
第四节 软件防护技术
第五节 漏洞利用技术-地址利用技术
第六节 漏洞利用技术-绕过DEP防护
第六章 漏洞挖掘
第一节 漏洞挖掘-源代码检测
第二节 漏洞挖掘-可执行代码检测
第三节 动态检测
第四节 模糊测试实例
第五节 自己动手写Fuzzer
第七章 渗透测试基础
第一节 渗透测试过程
第二节 Kali Linux基础
第三节 Metasploit渗透测试框架
第八章 渗透测试实践
第一节 渗透实践—被动信息收集
第二节 渗透实践—主动信息收集
第三节 渗透实践—Nessus扫描
第四节 渗透实践—攻破XP系统
第五节 渗透实践—后渗透攻击
第九章 WEB安全基础
第一节 WEB基础
第二节 HTTP会话管理
第三节 WEB编程环境
第四节 JavaScript实践
第五节 PHP语言
第六节 HTTP请求
第七节 PHP连接数据库
第八节 Cookie实战
第九节 十大WEB安全威胁
第十章
第一节 文件上传漏洞
第二节 SQL注入漏洞
第三节 SQLMAP
第四节 跨站脚本
一、客观部分:(单项选择、判断、填空)
(一)、选择部分
1、木马与病毒的重大区别是()
A.木马会自我复制
B.木马具有隐蔽性
C.木马不具感染性
D.木马通过网络传播
★考核知识点: 病毒与木马的概念
参见讲稿章节:1-1
附1.1(考核知识点解释):
计算机病毒(Computer Virus),根据《中华人民共和国计算机信息系统安全保护条例》,病毒的明确定义是“指编制或者在计算机程序中插入的破坏计算机功能或者破坏数据,影响计算机使用并且能够自我复制的一组计算机指令或者程序代码”。
病毒往往具有很强的感染性,一定的潜伏性,特定的触发性和很大的破坏性等,由于计算机所具有的这些特点与生物学上的病毒有相似之处,因此人们才将这种恶意程序代码称之为“计算机病毒”。
木马(Trojan Horse),是指那些表面上是有用的软件、实际目的却是危害计算机安全并导致严重破坏的计算机程序。它是具有欺骗性的文件(宣称是良性的,但事实上是恶意的),是一种基于远程控制的黑客工具,具有隐蔽性和非授权性的特点。
所谓隐蔽性是指木马的设计者为了防止木马被发现,会采用多种手段隐藏木马,这样服务端即使发现感染了木马,也难以确定其具体位置;所谓非授权性是指一旦控制端与服务端连接后,控制端将窃取到服务端的很多操作权限,如修改文件、修改注册表、控制鼠标、键盘、窃取信息等等。一旦中了木马,你的系统可能就会门户大开,毫无秘密可言。
木马与病毒的重大区别是木马不具传染性,它并不能像病毒那样复制自身,也并不“刻意”地去感染其他文件,它主要通过将自身伪装起来,吸引用户下载执行。特洛伊木马中包含能够在触发时导致数据丢失甚至被窃的恶意代码,要使特洛伊木马传播,必须在计算机上有效地启用这些程序,例如打开电子邮件附件或者将木马捆绑在软件中放到网络吸引人下载执行等。
2、漏洞也称为(),是计算机系统的硬件、软件、协议在系统设计、具体实现、系统配置或安全策略上存在的缺陷。
A.机密性
B.不完整性
C.可否认性
D.脆弱性
★考核知识点: 漏洞的概念
参见讲稿章节:3-1
附3.1.1(考核知识点解释)
漏洞也称为脆弱性(Vulnerability),是计算机系统的硬件、软件、协议在系统设计、具体实现、系统配置或安全策略上存在的缺陷。这些缺陷一旦被发现并被恶意利用,就会使攻击者在未授权的情况下访问或破坏系统,从而影响计算机系统的正常运行甚至造成安全损害。
漏洞的定义包含了以下三个要素:首先,漏洞是计算机系统本身存在的缺陷;其次,漏洞的存在和利用都有一定的环境要求;最后,漏洞的存在本身是没有危害的,只有被攻击者恶意利用,才能给计算机系统带来威胁和损失。
3、栈的存取采用()的策略
A.先进先出
B.后进先出
C.后进后出
D.先进后出
★考核知识点: 栈溢出的概念
参见讲稿章节:4-1
附4.1.2(考核知识点解释)
被调用的子函数中写入数据的长度,大于栈帧的基址到esp之间预留的保存局部变量的空间时,就会发生栈的溢出。要写入数据的填充方向是从低地址向高地址增长,多余的数据就会越过栈帧的基址,覆盖基址以上的地址空间。
如果返回地址被覆盖,当覆盖后的地址是一个无效地址,则程序运行失败。如果覆盖返回地址的是恶意程序的入口地址,则源程序将转向去执行恶意程序。
栈的存取采用先进后出的策略,程序用它来保存函数调用时的有关信息,如函数参数、返回地址,函数中的非静态局部变量存放在栈中。栈溢出是缓冲区溢出中最简单的一种。
4、以下说法正确的是()
A.Metasploit项目最初由HD Moore在2005年夏季创立。
B.Metasploit v2版本为Metasploit从一个渗透攻击框架性软件华丽变身为支持渗透测试全过程的软件平台打下坚实的基础。
C.除了渗透攻击之外,Metasploit在发展过程中逐渐增加对渗透测试全过程的支持,包括情报搜集、威胁建模、漏洞分析、后渗透攻击与报告生成。
D. Metasploit版本都可以自动生成报告。
★考核知识点: 对Metasploit的认识
参见讲稿章节:7-3
附7.3.1(考核知识点解释)
Metasploit是一个开源的渗透测试框架软件,也是一个逐步发展成熟的漏洞研究与渗透代码开发平台,此外也将成为支持整个渗透测试过程的安全技术集成开发与应用环境。
Metasploit项目最初由HD Moore在2003年夏季创立,目标是成为渗透攻击研究与代码开发的一个开放资源。2004年8月,在拉斯维加斯举办的BlackHat全球黑客大会上,HD与Spoonm携最新发布的Metasploit v2.2站上演讲台,他们的演讲题目是“Hacking Like in the Movies”(像在电影中演的那样进行渗透攻击)。大厅中挤满了听众,过道中也站着不少人,人群都已经排到了走廊上。两个屏幕上展现着令人激动的画面,左侧屏幕显示他们正在输入的MSF终端命令,而右侧屏幕展示一个正在被攻陷和控制的Windows系统。在演讲与Demo过程中,全场掌声数次响起,听众被Metasploit的强大能力所折服,大家都拥有着一致的看法:“Metasploit时代已经到来”。
Metasploit v3版本为Metasploit从一个渗透攻击框架性软件华丽变身为支持渗透测试全过程的软件平台打下坚实的基础。而2011年8月,Metasploit v4.0的发布则是Metasploit在这一发展方向上吹响的冲锋号角。
v4.0版本在渗透攻击、攻击载荷与辅助模块的数量规模上都有显著的扩展,此外还引入一种新的模块类型——后渗透攻击模块,以支持在渗透攻击成功后的后渗透攻击环节中进行敏感信息搜集、内网拓展等一系列的攻击测试。除了渗透攻击之外,Metasploit在发展过程中逐渐增加对渗透测试全过程的支持,包括情报搜集、威胁建模、漏洞分析、后渗透攻击与报告生成。
5、以下有关认证与授权的说法正确的是()
A.认证和授权的功能相同
B.授权是根据不同用户的凭证来确定用户的身份。
C.授权是通过认证后确定用户的权限有哪些。
D.一般来说,单因素认证的安全强度要高于多因素认证。
★考核知识点: 认证与授权的概念
参见讲稿章节:9-9
附9.4(考核知识点解释)
在安全领域中,认证(Authentication)和授权(Authorization)的功能不相同。认证的目的在于确定“你是谁”,即根据不同用户的凭证来确定用户的身份,而授权的目的是确定“你可以干什么”,即通过认证后确定用户的权限有哪些。最常见的身份认证方式就是通过用户名与密码进行登录。认证就是验证凭证的过程,如果只有一个凭证被用于认证,则称为单因素认证;如果有两个或多个凭证被用于认证,则称为双因素认证或多因素认证。一般来说,多因素认证的安全强度要高于单因素认证。
(二)、判断部分
1、堆空间是由低地址向高地址方向增长,而栈空间从高地址向低地址方向增长。(√)
★考核知识点:堆、栈的概念
参见讲稿章节:2-1
附2.1.2(考核知识点解释)
栈(stack)是向低地址扩展的数据结构,是一块连续的内存的区域。栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的默认大小是2M,如果申请的空间超过栈的剩余空间时,将提示溢出。
堆(heap)是向高地址扩展的数据结构,是不连续的内存区域,堆的大小受限于计算机的虚拟内存。操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序;对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样,代码中的delete语句才能正确的释放本内存空间。另外,由于找到的堆结点的大小不一定正好等于申请的大小,系统会自动的将多余的那部分重新放入空闲链表中。
(1)申请方式
栈:由系统自动分配。例如,声明一个局部变量int b,系统自动在栈中为b开辟空间。
堆:需要程序员自己申请,并指明大小,在c中malloc函数,如p1 = (char *)malloc(10)。
(2)申请效率
栈由系统自动分配,速度较快,但程序员是无法控制的。
堆是由程序员分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来方便。
(3)增长方向
堆空间是由低地址向高地址方向增长,而栈空间从高地址向低地址方向增长。
2、符号溢出是使用另外的数据类型来存储整型数造成的。(×)
★考核知识点:整数溢出的概念
参见讲稿章节:4-4
附4.3(考核知识点解释)
高级程序语言中,整数分为无符号数和有符号数两类,其中有符号负整数最高位为1,正整数最高位为0,无符号整数则无此限制。常见的整数类型有8位、16位、32位以及64位等,对应的每种类型整数都包含一定的范围,当对整数进行加、乘等运算时,计算的结果如果大于该类型的整数所表示的范围时,就会发生整数溢出。
根据溢出原理的不同,整数溢出可以分为以下三类:
(1)存储溢出
存储溢出是使用另外的数据类型来存储整型数造成的。例如,把一个大的变量放入一个小变量的存储区域,最终是只能保留小变量能够存储的位,其他的位都无法存储,以至于造成安全隐患。
(2)运算溢出
运算溢出是对整型变量进行运算时没有考虑到其边界范围,造成运算后的数值范围超出了其存储空间。
(3)符号问题
整型数可分为有符号整型数和无符号整型数两种。在开发过程中,一般长度变量使用无符号整型数,然而如果程序员忽略了符号,在进行安全检查判断的时候就可能出现问题。
3、主动信息收集也就是说不会与目标服务器做直接的交互、在不被目标系统察觉的情况下,通过搜索引擎、社交媒体等方式对目标外围的信息进行收集。(×)
★考核知识点:主动信息收集的概念
参见讲稿章节:8-2
附8.1.1 - 8.1.2(考核知识点解释)
信息收集又分为被动信息收集和主动信息收集。很多人不重视信息收集这一环节,其实信息收集对于渗透来说是非常重要的一步,收集的信息越详细对以后渗透测试的影响越大,毫不夸张的说,信息的收集决定着渗透的成功与否。
主动信息收集和被动信息收集相反,主动收集会与目标系统有直接的交互,从而得到目标系统相关的一些情报信息。
被动信息收集也就是说不会与目标服务器做直接的交互、在不被目标系统察觉的情况下,通过搜索引擎、社交媒体等方式对目标外围的信息进行收集,例如:网站的whois信息、DNS信息、管理员以及工作人员的个人信息等等。
(三)、填空部分
1、Win32系统提供两个特殊的寄存器 和 用于标识位于系统栈顶端的栈帧。
★考核知识点:常见的寄存器与栈桢
参见讲稿章节:2-3
附2.1.4:(考核知识点解释)
寄存器(register)是中央处理器CPU的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。我们常常看到32位CPU、64位CPU这样的名称,其实指的就是寄存器的大小。32位CPU的寄存器大小就是4个字节。
CPU本身只负责运算,不负责储存数据。数据一般都储存在内存之中,CPU要用的时候就去内存读写数据。但是,CPU的运算速度远高于内存的读写速度,为了避免被拖慢,CPU都自带一级缓存和二级缓存。基本上,CPU缓存可以看作是读写速度较快的内存。但是,CPU缓存还是不够快,另外数据在缓存里面的地址是不固定的,CPU每次读写都要寻址也会拖慢速度。因此,除了缓存之外,CPU使用寄存器来储存最常用的数据。也就是说,那些最频繁读写的数据(比如循环变量),都会放在寄存器里面,CPU优先读写寄存器,再由寄存器跟内存交换数据。
每一个函数独占自己的栈帧空间。当前正在运行的函数的栈帧总是在栈顶。Win32系统提供两个特殊的寄存器用于标识位于系统栈顶端的栈帧:
(1)ESP:栈指针寄存器(extended stack pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶。
(2)EBP:基址指针寄存器(extended base pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的底部。
2、ROP的全称为Return-oriented programming( ),是一种新型的基于 的攻击,攻击者从已有的库或可执行文件中提取指令片段,构建恶意代码。
★考核知识点:ROP的概念
参见讲稿章节:5-6
附5.3.2:(考核知识点解释)
ROP的全称为Return-oriented programming(返回导向编程),是一种新型的基于代码复用技术的攻击,攻击者从已有的库或可执行文件中提取指令片段,构建恶意代码。ROP允许我们绕过DEP和ALSR,但不能绕开GS缓冲区溢出的检测防护技术。
ROP基本的思想是借助已经存在的代码块(也叫配件),这些配件来自程序已经加载的模块。我们可以在已加载的模块中找到一些以retn结尾的配件,把这些配件的地址布置在堆栈上, 当控制EIP并返回时候, 程序就会跳去执行这些小配件, 而这些小配件是在别的模块代码段, 不受DEP的影响。
换言之,ROP允许攻击者从已有的库或可执行文件中提取指令片段,构建恶意代码。
对于ROP技术,可以总结为如下三点:
[1].ROP通过ROP链(retn)实现有序汇编指令的执行。
[2].ROP链由一个个ROP小配件(相当于一个小节点)组成。
[3].ROP小配件由“目的执行指令+retn指令组成”。
3、目前常用的静态安全检测技术
包括 、 、 、 、 等。
★考核知识点:常见的静态检测技术
参见讲稿章节:6-1
附6.1.1:(考核知识点解释)
由于源代码中的变量赋值明确,程序流程清晰,逻辑关系明了,采用静态安全检测技术更容易深入进行数据流的分析,并且可以全面地考虑执行路径的信息,能够更有效的发现漏洞。因此,静态安全检测技术是软件源代码的主要安全检测技术。
静态安全分析技术检测源代码安全缺陷和漏洞的主要优势是不需要构建代码运行环境,分析效率高,资源消耗低。虽然都存在较高的误报率,但仍然在很大程度上减少了人工分析的工作量。目前常用的静态安全检测技术包括词法分析、数据流分析、污点传播、符号执行、模型检查、定理证明等。
4、 是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息。
★考核知识点:Hook的概念
参见讲稿章节:6-2
附6.1.3:(考核知识点解释)
上述介绍的基于关键词的静态检测,存在很多缺陷,比如:逆向分析技术的复杂性,加大了我们在每次关键函数调用上的分析难度;虽然能够找寻到函数的参数,但是参数的具体内容无法准确判断,因为参数是在程序运行中动态存在的。举个例子来说:如果一个程序中使用循环调用strcpy函数,并且每次调用时传递的参数都按照变化不定的内存中的数据为参数,那么这种情况使用静态逆向技术就无法分析。
如何化静为动呢?既然溢出漏洞的发掘入手点在于捕捉关键函数及其参数内容,那么在这些函数上能不能放上一个监视点呢?使用Hook技术就可以达成该目的。
钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。
钩子(Hook),既然是位于消息被正式处理之前,那么它同样可以用于函数被正式调用之前,也就是说我们可以在那些操作栈的关键函数上加上钩子,将它们换成我们的函数实现,这样我们就可以做到真正的动态监视。
5、Meterpreter中实现了 、 、 、 与 等多样化的功能特性。
★考核知识点:Meterpreter的功能
参见讲稿章节:7-3
附7.3.1:(考核知识点解释)
在成功实施渗透攻击并获得目标系统的远程控制权之后,Metasploit框架中另一个极具威名的工具Meterpreter在后渗透攻击阶段提供了强大功能。
Meterpreter可以看做一个支持多操作系统平台,可以仅仅驻留于内存中并具备免杀能力的高级后门工具,Meterpreter中实现了特权提升、信息攫取、系统监控、跳板攻击与内网拓展等多样化的功能特性,此外还支持一种灵活可扩展的方式来加载额外功能的后渗透攻击模块,足以支持渗透测试者在目标网络中取得立足点之后进行进一步的拓展攻击,并取得具有业务影响力的渗透效果。
从技术角度来说,Meterpreter让它的“前辈们”(如国外的BO、BO2K,以及国内的冰河、灰鸽子等)黯然失色。
二、主观部分:
(一)、名词解释
1.远程利用漏洞
★考核知识点:远程利用漏洞的概念
参见讲稿章节:3-2
附3.2.1:(考核知识点解释)
软件漏洞可以考虑从以下几方面进行漏洞的分类,包括:软件漏洞被攻击者利用的地点,软件漏洞形成原因,漏洞生命周期不同阶段,漏洞对系统安全的直接威胁后果等。
(1)按照软件漏洞被攻击者利用的地点进行分类
① 本地利用漏洞
本地利用漏洞是指攻击者必须在本机拥有访问权限的前提下才能攻击并利用的软件漏洞。比较典型的是没有网络服务功能的本地软件漏洞,以及本地权限提升漏洞。本地提权漏洞能让普通用户获得最高管理员权限甚至系统内核的权限。
② 远程利用漏洞
远程利用漏洞是指攻击者可以直接通过网络发起攻击并利用的软件漏洞。这类软件漏洞危害极大,攻击者能随心所欲地通过此漏洞对远端计算机进行远程控制,此类漏洞也是蠕虫病毒主要利用的漏洞。
2.堆溢出
★考核知识点:堆溢出的概念
参见讲稿章节:4-2
附4.1.3:(考核知识点解释)
堆溢出是指在堆中发生的缓冲区溢出。
由于堆与栈结构的不同,堆溢出不同于栈溢出。相比于栈溢出,堆溢出的实现难度更大,而且往往要求进程在内存中具备特定的组织结构。然而,堆溢出攻击也已经成为缓冲区溢出攻击的主要方式之一,利用堆溢出可以有效绕过基于栈溢出的缓冲区溢出防范措施。
堆是内存空间中用于存放动态数据的区域。与栈不同的是,程序员自己完成堆中变量的分配与释放。对于堆内存分配,操作系统有一个堆管理结构,用来管理空闲内存地址的链表。
3.不安全的加密存储
★考核知识点:不安全的加密存储的概念
参见讲稿章节:9-9
附9.4:(考核知识点解释)
2012年,CSDN网站600万账户密码泄露事件等一系列类似事件,导致网络安全及用户个人隐私成为大众关心的焦点。CSDN事件之所以严重的主要原因,是因为CSDN网站采用明文方式来存储用户名和密码,使得用户的隐私被轻易的泄露。
所谓不安全的加密存储指的是Web应用系统没有对敏感性资料进行加密,或者采用的加密算法复杂度不高可以被轻易破解,或者加密所使用的密钥非常容易检测出来。归根到底就是所存储的内容能够轻易被攻击者解析从而产生安全威胁。
为了防止不安全的加密存储,对于所有的敏感性数据必须进行加密,且无法被轻易破解。保证加密密钥被妥善保管,攻击者不能轻易窃取,并准备密钥的定期更换。对于敏感存储内容必须进行严格的访问控制,只允许授权用户进行操作。
(二)、简答
1.缓冲区溢出攻击是什么?
★考核知识点:缓冲区溢出攻击的概念
参见讲稿章节:4-1
附4.1.1:(考核知识点解释)
缓冲区是一块连续的内存区域,用于存放程序运行时加载到内存的运行代码和数据。
缓冲区溢出是指程序运行时,向固定大小的缓冲区写入超过其容量的数据,多余的数据会越过缓冲区的边界覆盖相邻内存空间,从而造成溢出。
缓冲区的大小是由用户输入的数据决定的,如果程序不对用户输入的超长数据作长度检查,同时用户又对程序进行了非法操作或者错误输入,就会造成缓冲区溢出。
缓冲区溢出攻击是指发生缓冲区溢出时,溢出的数据会覆盖相邻内存空间的返回地址、函数指针、堆管理结构等合法数据,从而使程序运行失败、或者发生转向去执行其它程序代码、或者执行预先注入到内存缓冲区中的代码。缓冲区溢出后执行的代码,会以原有程序的身份权限运行。如果原有程序是以系统管理员身份运行,那么攻击者利用缓冲区溢出攻击后所执行的恶意程序,就能够获得系统控制权,进而执行其它非法操作。
造成缓冲区溢出的根本原因,是缺乏类型安全功能的程序设计语言(C、C++等)出于效率的考虑,部分函数不对数组边界条件和函数指针引用等进行边界检查。例如,C 标准库中和字符串操作有关的函数,像strcpy,strcat,sprintf,gets等函数中,数组和指针都没有自动边界检查。程序员开发时必须自己进行边界检查,防范数据溢出,否则所开发的程序就存在缓冲区溢出的安全隐患,而实际上这一行为往往被程序员忽略或者检查不充分。
2.什么是智能模糊测试?
★考核知识点:智能模糊测试的概念
参见讲稿章节:6-3
附6.2.2:(考核知识点解释)
模糊测试方法是应用最普遍的动态安全检测方法,但由于模糊测试数据的生成具有随机性,缺乏对程序的理解,测试的性能不高,并且难以保证一定的覆盖率。为了解决这个问题,引入了基于符号执行等可进行程序理解的方法,在实现程序理解的基础上,有针对性的设计测试数据的生成,从而实现了比传统的随机模糊测试更高的效率,这种结合了程序理解和模糊测试的方法,称为智能模糊测试(smart Fuzzing)技术。
智能模糊测试具体的实现步骤如下。
(1)反汇编
智能模糊测试的前提,是对可执行代码进行输入数据、控制流、执行路径之间相关关系的分析。为此,首先对可执行代码进行反汇编得到汇编代码,在汇编代码的基础上才能进行上述分析。
(2)中间语言转换
从汇编代码中直接获取程序运行的内部信息,工作量较大,为此,需要将汇编代码转换成中间语言,由于中间语言易于理解,所以为可执行代码的分析提供了一种有效的手段。
(3)采用智能技术分析输入数据和执行路径的关系
这一步是智能模糊测试的关键,它通过符号执行和约束求解技术、污点传播分析、执行路径遍历等技术手段,检测出可能产生漏洞的程序执行路径集合和输入数据集合。例如,利用符号执行技术在符号执行过程中记录下输入数据的传播过程和传播后的表达形式,并通过约束求解得到在漏洞触发时执行的路径与原始输入数据之间的联系,从而得到触发执行路径异常的输入数据。
(4)利用分析获得的输入数据集合,对执行路径集合进行测试
采用上述智能技术获得的输入数据集合进行安全检测,使后续的安全测试检测出安全缺陷和漏洞的机率大大增加。与传统的随机模糊测试技术相比,这些智能模糊测试技术的应用,由于了解了输入数据和执行路径之间的关系,因而生成的输入数据更有针对性,减少了大量无关测试数据的生成,提高了测试的效率。此外,在触发漏洞的同时,智能模糊测试技术包含了对漏洞成因的分析,极大减少了分析人员的工作量。
3.Cookie与Session的区别与联系?
★考核知识点:Cookie与Session的概念
参见讲稿章节:9-1
附9.1.4:(考核知识点解释)
Cookie与session是与HTTP会话相关的两个内容,其中Cookie存在在浏览器,session存储在服务器中。
Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器。网络服务器用HTTP头向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求缚上这些cookies。
具体来说,cookie机制采用的是在客户端保持状态的方案。它是在用户端的会话状态的存贮机制,他需要用户打开客户端的cookie支持。cookie的作用就是为了解决HTTP协议无状态的缺陷所作的努力。
正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。然而纯粹的客户端脚本如JavaScript也可以生成cookie。而cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的HTTP请求头上发送给服务器。
cookie的内容主要包括:名字,值,过期时间,路径和域。路径与域一起构成cookie的作用范围。若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式。
Session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识(称为session id),如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。
保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发挥给服务器。一般这个cookie的名字都是类似于SEEESIONID。
所以,一种常见的HTTP会话管理就是,服务器端通过session来维护客户端的会话状态,而在客户端通过cookie来存储当前会话的session id。
但cookie可以被人为的禁止,则必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面。还有一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。
|
|