好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

07逻辑漏洞.ppt

78页
  • 卖家[上传人]:小**
  • 文档编号:86354018
  • 上传时间:2019-03-19
  • 文档格式:PPT
  • 文档大小:1.21MB
  • / 78 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 逻辑漏洞,王朋涛,深信服北京安全团队,,逻辑漏洞概述 逻辑漏洞攻击流程 逻辑漏洞攻击之应用程序解析 逻辑漏洞攻击之逻辑漏洞示例 逻辑漏洞攻击之挖掘教程 商业逻辑漏洞攻击 逻辑漏洞攻击防御 逻辑漏洞探测工具 总结,培训提纲,,逻辑漏洞概述,,逻辑漏洞概述,逻辑漏洞的出现 所有的应用程序都通过相关的逻辑实现各种功能而编程实际上就是将这些功能分解成独立、简单的逻辑单元,并用代码实现 大量的逻辑操作加上不同背景的开发人员,增加了逻辑缺陷出现的概率 逻辑漏洞的本质 主要源于设计者或者开发者在思考过程中做出的特殊假设存在明显或隐含的错误逻辑漏洞概述,逻辑漏洞的特点 普遍存在性:由于功能的实现需要大量的逻辑操作,同时受制于程序员的背景,这类缺陷普遍存在于各类应用程序中 不固定性:或者称作“十分有针对性”,因为每一种逻辑缺陷似乎都是唯一的,它是基于逻辑操作,不同的功能逻辑不同,因此无法用一般的工具发现他们 隐蔽性:大多数的逻辑漏洞都十分隐蔽,它存在于操作关系当中,甚至是属于应用程序正常的功能逻辑漏洞攻击流程,,逻辑漏洞攻击流程,,,逻辑漏洞攻击之应用程序解析,,逻辑漏洞攻击之应用程序解析,攻击一个应用程序,首先要分析这个应用程序,了解清楚其本身的功能、行为以及使用的技术,有针对性的攻击,那么成功的机会就变大了。

      下面就是针对逻辑攻击来说应该考虑的3个方面: 了解应用程序功能 寻找数据的输入点 确定业务操作流程应用程序解析之了解应用程序功能,大多数情况下,应用程序的功能我们可以通过web浏览的方式获得,其基本方法就是从主页面开始,查看网站标题或者首页导航菜单,以及多级页面的浏览遍历,就能大致知道这个网站的基本功能,如下图所示,就可以看出这个网站是一个票务类的网站 通过网站自带的网站地图就能快速的了解其一些基本的功能应用程序解析之寻找数据的输入点,寻找数据输入点,就是寻找各种输入框(可编辑的、不可编辑的、隐藏的、显示的、脚本生成的)或者可点击的按钮等简单点的办法就是使用爬虫工具进行web站点扫描,所有url地址本身、url的各个参数信息以及HTTP头部信息都属于输入点但是这种情况,效率较低,若只是简单的测试某个流程是否有逻辑漏洞,就不推荐使用这种方法,若是要完整的检测安全性,则这种扫描是很有必要的应用程序解析之确定业务操作流程,通常情况下,注册个测试账号(若需要),一般按照应用程序正常的流程完全的走一遍,在操作的同时,把所有操作步骤的数据包拦截下来,以便后续分析流程步骤涉及到的所有数据操作以及数据传输。

      若应用提供了操作步骤提示信息,则也可大致了解到每个业务的操作流程,了解到操作流程后,也就可猜测出可能存在哪个方面的逻辑漏洞,达到快速渗透的目的,如下图:,,逻辑漏洞攻击之逻辑漏洞示例,(演示示例均引用自乌云),,应用程序解析之逻辑漏洞示例,1、不校验原始数据引发的逻辑漏洞比如乌云上的114票务网的示例(http://www.wooyun.org/bugs/wooyun-2014-051779)114票务网对修改密码的时候不进行原密码验证就可直接修改任意用户密码,如下图:,,应用程序解析之逻辑漏洞示例,2、由于对验证码验证次数的不限制,可导致穷举出验证码,亦可修改任意用户密码比如乌云上的易宝支付任意修改密码漏洞的示例(http://www.wooyun.org/bugs/wooyun-2010-060501),易宝支付对认证码的验证次数不限制的原因,4位数字验证码可以在10分钟穷举出用户密码,原文如下图:,,应用程序解析之逻辑漏洞示例,3、操作数据在页面间跳转传输过程未进行有效性校验,导致可任意修改敏感数据比如乌云上的中国联通某省套餐购买逻辑漏洞+订单泄露的示例(http://www.wooyun.org/bugs/wooyun-2010-084515),套餐购买提交订单时,不对商品订单的金额进行校验,用户可随意修改订单的价格(甚至为负数),如下图(跨片):,,应用程序解析之逻辑漏洞示例,,应用程序解析之逻辑漏洞示例,,逻辑漏洞攻击之挖掘方法,,逻辑漏洞挖掘之确定应用所使用的技术,实际分析中可参考以下基本步骤: 确定客户端技术,如表单校验形式(客户端或服务端校验)、脚本类型、cookie规则、Java applet、ActiveX控件与Flash对象。

      确定服务器端技术,如脚本语言(PHP、JSP、ASP等)、应用程序平台、数据库类型及电子邮件等交互系统 检查应用程序响应中的 HTTP 消息头,如Server、Referer等 运行扫描工具对服务器做“指纹识别” 分析所有获得信息,包括文件扩展名、目录列表或URL规律检查所有会话令牌和其他cookie名称等 获取分析第三方代码组件的脚本、参数及行为等,发现应用程序隐藏的内容和功能逻辑漏洞挖掘之测试项,测试客户端输入验证 测试客户端数据传输 测试客户端组件逻辑 测试多阶段过程逻辑 测试不完整输入处理 测试信任边界 测试业务逻辑,,逻辑漏洞挖掘之测试客户端输入验证,,逻辑漏洞挖掘之测试客户端输入验证,在客户端输入上,常采用的手段是HTML表单、客户端脚本(Javascript、VBScript等)以及一些隐藏或禁用元素等 开发人员使用这些方法的假设为:用户的输入经过了客户端的限制,从而可以保证数据的合法性逻辑漏洞挖掘之测试客户端输入验证,举例: 功能:页面输入字段为防止各类攻击(eg:SQL注入),采用了单引号转义,将两个单引号构成一个原义单引号,同时限制了输入长度为128字符 假设:对于攻击的防御采用转义,则攻击者无法实现单引号的输入攻击。

      攻击:考虑以下情况,如果经过应用程序单引号转义后的字符串,提交给了截断模块,那么是否可以绕过限制逻辑漏洞挖掘之测试客户端输入验证,如果我们考虑用户名修改为:adminnnnnnn [127个字符]’ 由于先做转义再截断,则输入数据依然是 adminnnnnnn [127个字符]’ 配合password字段输入 or 1=1-- -,则查询语句变成: SELECT * FROM users WHERE name=’adminnnnnnn[127个字符]’’ and password=’ or 1=1-- -’ 由于在数据库中连续两个单引号作为转义,所以会被当做数据而非结构,则数据库实际查询的用户名为:adminnnnnnn [127个字符]’ and password= 因此我们可以构造 or 1=1 -- -部分,实现注入查询逻辑漏洞挖掘之测试客户端输入验证,总结,在实际分析中可参考以下基本步骤: 在用户输入提交给服务器之前,确定使用长度限制和JavaScript脚本等进行的数据输入检查条件 通过提交客户端限制的输入,轮流测试每一个受影响的字段,确定服务器是否使用相同的输入确认 检查确认HTML表单禁用元素,修改其数据,与其他表单一起提交,以确定该元素是否会对应用程序的逻辑产生影响。

      删除、修改或禁用客户端脚本,确定服务器是否只依赖客户端的检查 利用客户端本身的功能,如转义、长度限制等进行避开输入以改变程序执行逻辑逻辑漏洞挖掘之测试客户端数据传输,,逻辑漏洞挖掘之测试客户端数据传输,应用程序通常以终端用户无法查看或修改的方式向服务器传送数据 通常开发者认为所采用的传输机制将保证传输过程中数据不被修改 一般通过客户端传送数据的方式有隐藏表单字段、HTTP cookie、URL 参数、Referer消息头、模糊数据、ASP.NET ViewState 等逻辑漏洞挖掘之测试客户端数据传输,举例: 功能:当前有一个用户登录系统,登录成功后会显示用户欢迎用户名等信息以POST方式提交: 假设:开发者假设用户数据传输过程中是安全的逻辑漏洞挖掘之测试客户端数据传输,攻击:如果我们使用Burp Suite Proxy拦截传输过程中请求:,,逻辑漏洞挖掘之测试客户端数据传输,修改用户名和密码后forward,查看结果:,,逻辑漏洞挖掘之测试客户端数据传输,总结,实际分析中可参考以下基本步骤: 在应用程序中,确认隐藏表单字段、cookie和URL参数明显用于客户端传送可控数据的所有情况。

      根据以上数据出现的位置极其名称与值,尝试确定其在应用程序逻辑中发挥的作用 修改在应用程序相关功能中的值,确定应用程序是否处理字段中提交的任意值,并确定这样做是否可以干扰其正常逻辑 如果应用程序通过客户端传输模糊数据,我们依然可以使用各种方式攻击它如:如果模糊处理,则可以尝试破解算法,提交任意数据如果采用安全加密,则可使用其他加密块替换提交以攻击程序逻辑逻辑漏洞挖掘之测试客户端组件逻辑,,逻辑漏洞挖掘之测试客户端组件逻辑,客户端组件及控件也是一种收集、确认并提交用户数据的主要方法 由于速度和用户体验方面的原因,之前在服务器端处理的任务将在客户端执行,这将有意无意的增加客户端的风险 开发者假设操作的用户都是可信任的或者浏览器扩展会自行防御恶意企图 由于相对HTML表单和JavaScript确认机制,控件方式更加不透明,这也使得开发者认为控件的确认更加安全逻辑漏洞挖掘之测试客户端组件逻辑,举例: 功能:购物网站一般都有购物车功能,这些功能大多是由控件实现,同时控件中会加载一些购物策略,eg:购物满多少可以打几折等,通过分析我们也许可以直接获得低折扣的商品价格同时在结算页面确认时还可以选择商品数量及退订商品。

      假设:当购物车的商品满1000元的时候,可以享受8折优惠,当满2000元的时候可以享受7折优惠,同时在提交结算页面时计算最终折扣逻辑漏洞挖掘之测试客户端组件逻辑,攻击:以上假设没有考虑到购物者放入商品后结算确认时再修改商品的情况,因此购物者可以将大量商品放入购物车以获得最优折扣,在结算确认页面再将部分商品退掉或修改商品数量,这样就可以获得最优的折扣 以上的例子举的比较浅显,实际的控件功能逻辑更加复杂,同时数据可能会采取模糊或者加密处理,因此实际的分析中应当更加严谨逻辑漏洞挖掘之测试客户端组件逻辑,总结,实际分析中可参考以下基本步骤: 使用代理工具对客户端和服务器端的流量进行监视如果发现数据被序列化,则可以使用某种反序列化工具或插件 浏览控件在客户端的所有功能,并使用代理修改关键请求或者服务器响应,以确认任何可以改变数据逻辑的功能 反编译客户端控件,分析相关代码,确认其中的输入限制及其他逻辑方式逻辑漏洞挖掘之测试客户端组件逻辑,附加调试器,查找监视关于安全及业务逻辑的功能和值,并设置断点,修改参数或返回值,尝试逻辑攻击 借助客户端组件或控件的调用代码,执行有目的的数据调用及输入或者进行模糊输入测试,并监控处理结果。

      尝试发现各种隐藏的功能、参数或资源,通过开启功能或调用资源等获得服务器资源 尝试通过组件功能获得其他相关信息(eg:对手信息、预发布信息等)逻辑漏洞挖掘之测试多阶段过程逻辑,,逻辑漏洞挖掘之测试多阶段过程逻辑,应用程序的最终提交需要经过多个阶段的信息获取及确认(eg:找回密码、订单提交) 针对这类功能,开发人员默认前一阶段提交过来的数据是可信的,这种假设也就造成了大量的多阶过程逻辑漏洞 举例: 功能:一般的网上购物流程如下: 浏览商品并添加到购物车 确认订单 输入支付信息 输入交货信息,,逻辑漏洞挖掘之测试多阶段过程逻辑,假设:开发者会认为用户总会按照预定的顺序执行每一个步骤,因为这是应用程序通过显示在浏览器中的导航链接和表单向用户提供的处理顺序因此,开发者认为任何完成订购过程的用户一定已经提交了正确的支付信息 攻击:这里开发者的假设存在明显的缺陷,用户控制着他们向应用程提出的每一个请求,因此能够以任何顺序访问订购过程的每一个阶段如果直接从步骤 2进入步骤 4,攻击者就可以生成一个最终确定交货但实际并未支付的订单 以上的攻击方法叫做强制浏览,包括突破浏览器导航对应用程序。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.