发新话题
打印

Web 安全中的业务安全战争(转)

Web 安全中的业务安全战争(转)

随着 Web2.0 的发展,在现在众多商业活动中,信息的互联带来的必定是大量隐私和高价值的信息数据资产,在现在,已经成为了黑客的攻击目标。比如说银行、保险、金融、理财、电商、社交、招聘等平台上,含有大量的个人信息以及涉及到金额的数据资产,往往这些地方就是黑客最容易获利的目标。
相比 SQL 注入漏洞、XSS 漏洞此类的,是可以被扫描器给扫出来的,攻击者较为倾向获利而不是炫技,以窃取敏感信息为主要的攻击目的,另一方面来说,现有的常规安全漏洞扫描发现技术也比较完善,发现注入此类的问题基本很少,增加了一些攻击成本。
为什么要单独把业务安全列为一个课程呢,因为目前常规的渗透测试技术主要是基于 Owasp10 的,一般不会涉及到业务逻辑方面的风险,然而业务逻辑里有些特别重大的威胁比如登录验证绕过、越权访问等威胁都会造成很严重的后果,恰巧的是,常规的渗透测试技术会忽视掉业务逻辑层面的风险。所以要把业务安全单独拉出拉说一下。
业务安全测试关键点 图片来源:《Web 攻防之业务安全实践指南》
此图已经列出了每个不同的场景业务环之间可能存在的逻辑漏洞,读者可根据此图进行自排查。
不同业务场景的审视角度不同业务场景之间的审视角度是需要不同的,用一位攻击者的视角来审视这个业务环节,比如说现在是给一家 P2P 做风险评估。
在这里简要有三种角色:普通用户、系统、管理员:
  • 普通用户:我能注册、充值、购买、交易、查询,以及对自我账号的应有权限;
  • 管理员:我能看到业务人员,能在后台进行应有权限的操作,比如查询流水等;
  • 系统:你们都看不见我,但我在运作,我是支持系统我支持了整个业务流程。
在测试的时候,面对不同的业务场景要进行不同的角色来进行测试,结合业务需要从不同的视角来进行安全测试,比如说我在前台,我在使用整个业务,测试的点就要在注册登录与身份验证等环节(密码是否能被任意找回,是否存在暴力破解可能,是否过滤了危险字符)。
那么支持系统则要考虑到,用户的密码进库的时候是否进行了加密,业务之间的数据传输是否是明文,系统的参数过滤机制是否完善,有 SQL 注入或者代码执行等威胁吗?
在测试前最好是已经了解了整个系统的运行逻辑,我测试的时候常会用不同的权限账号在前后台的不同场景都走一遍,了解并熟悉每个业务逻辑点再进行有根据的测试。
登录认证安全测试登录认证这个相信也比较好理解,只要输入了账号密码就能和业务进行交互逻辑,对比数据一致性给出错误或者成功,这个业务环相关的逻辑漏洞应该关注暴力破解和 Cookie 覆盖。
暴力破解测试方法:暴力破解即穷举验证,用账号密码进行穷举,直到找出正确的账户或者密码,与字典有关。
一般分为三种情况:
  • 我已知账号的情况下,用密码字典进行暴力破解(Admin+密码);
  • 我未知账号,用账号字典进行暴力破解(账号+123456);
  • 我账号密码都未知,用账号密码和密码字典进行碰撞暴力破解(账号+密码)。
测试过程:

简单的画了个草图,来解释一下测试过程,首先我们先使用工具对登录页面进行循环提交字典数据进行碰撞,服务器收到请求后会判断是否正确,错误就回到首页,正确就跳转到登录内页。
使用乌云上的案例来讲:
某系统用户密码可爆破导致公司敏感信息泄漏(223897)

可以看到登录页面是只有一个用户名和密码框的,没有做任何的验证,这个时候我们使用 Burp Suite 进行暴力破解即可,具体的步骤不再详叙,可以查看我之前写的 Burp suite 工具使用指南。

最后通过返回的结果来判断是否破解成功,尝试登陆即可。
Session 安全测试还是拿乌云的例子来讲:Yxcms 管理员 SESSION 伪造漏洞(47827)。 Yxcms 是一款内容管理系统。借助后台一个 CSRF 起飞,伪造 session 可直接登录后台。
漏洞细节
我也是第一次见到这样有趣的漏洞,Yxcms 允许我们自定义 session,而且这个过程通过 get 方式来完成。我觉得这样的问题属于 CSRF,不经意之间就能获取大效果。
其问题代码如下:

当 $_GET[‘phpsessid’] 非空时,就令 session_id 为我们传入的值。于是我想到一个猥琐的方法,我们构造一个链接让管理员点击,管理员点击后会重新设置他的 session,而且这个 session 就是我们构造的。因为 session 重置了所以管理员也需要重新登录,而重新登录后其 session_id 就是我们构造的。我们只要利用这个 session_id 就能登录管理后台了。
比如我来构造:http://xxxx/index.php?r=admin/index/index&phpsessid=f4cking123。管理员点击后会跳转到登录页面,但此时他的 phpsession 已经是我们构造的 f4cking123 了:

这是管理员如果重新登录,那个这个 session 就有后台权限了。我们也利用这个链接:http://xxxx/index.php?r=admin/index/index&phpsessid=f4cking123,将自己的 session 设置成 f4cking123,或者随意怎么修改,只要把 phpsessid 修改成 f4cking123 就能拥有后台权限了:

这个漏洞的测试方法也很简单,登陆一个账号后对当前授权的 Session 进行记录,然后退出后再次登陆,如果第二次的值与第一次的值相同,则存在固定的会话风险,攻击者一旦获取到你的值便可以进行授权认证。
Seesion 会话过期性测试与上面那个可以连在一起讲,这个过期性就是在用户注销或者退出系统时,系统应该对身份进行清空,让本次的会话令牌无效,令攻击者无法获取。
Seesion 会话超时测试这个业务关键点,要根据具体的情形来进行设置,因为比如说是转账的时候,身份令牌我推荐做到几分钟内最好,几分钟内未和服务器进行任何交互就可以清空认证信息,要求重新登录进行认证。
测试方法:登录的时候对 Session 进行记载,发送到 Burp 的 Repeater 模块,然后在重要的交互页面上停留个二十分钟后继续发送此包,查看是否返回关键信息。
Seesion 仿冒测试还是乌云那个案例,修改了 Seesion 认证来改变了不同用户的身份,测试方法如案例所示,先用普通用户 lihua 的账号进行登录,记住 ID 后便可修改其他人的 ID 来尝试篡改登录用户。

登录模块的业务风险点重点就是在这几个方面,建议对每个生成的 Session 令牌进行安全配置周期。
办理业务安全测试办理业务安全的场景一般以电商交易居多,比如有遍历订单 ID 获取其他人的交易详情。
订单 ID(用户 ID)篡改越权测试驴妈妈某处越权导致订单信息泄露(涉及 700 多万订单信息)
漏洞细节
驴妈妈旅游网-中国新型的 B2C 旅游电子商务网站,为旅游者提供景区门票、自由行、度假酒店、国内游、出境游等一站式旅游服务。
漏洞存在 http://fx.lvmama.com/ 分销平台。
看见有注册的地方,本来想注册的,然后:

然后发现要审核。欲哭无泪啊。等吗?肯定不行,等 7 天啊。谁受得了啊。
于是乎,咋们就想着能不能破解出来一个呢?

然后 yangfan yangfan123 登录,进去点个查看订单。悲剧就发生了。首先看下他自己的订单:

然后看看别人的订单: http://fx.lvmama.com/mOrder/ticketDetail.do?orderId=27880000

然后继续看别人的: http://fx.lvmama.com/mOrder/ticketDetail.do?orderId=27887310

再来一个: http://fx.lvmama.com/mOrder/ticketDetail.do?orderId=27261000

http://fx.lvmama.com/mOrder/ticketDetail.do?orderId=20900000

20900000-27261000 一共 700W 订单数赶紧修复啊。听说泄露客户信息,现在法律都要管啦。
我们可以回首看看,该漏洞先是使用了暴力破解破解到了一个账号,然后登陆进去查看订单,并把订单号进行了列举,只列了几条,可以看到一件返回了不同人的订单,这里实际就是(平行越权+暴力破解)了,当然使用 Burp 进行数字列举相信会更多。
用户 ID 也是一个概念,都是对 ID 进行列举,这里就合并在一起讲了。
修复建议:判断用户的身份,做好平行权限控制,防止绕过。
总结:越权分为垂直和水平越权,水平越权指两个权限一致的同学能互相查看对方的敏感内容,垂直越权指用户 A 同学去访问了管理员B同学的数据,低权限越了高权限。
测试方法:更改账户 ID 身份来进行测试。
接口未授权访问测试百度某运维平台未授权访问
漏洞细节
Hadoop 管理平台 http://123.125.112.41/dfshealth.html#tab-overview
data node 信息

百度 bae 应用

配置文件

修复建议:在后端对登录状态进行验证,未登录不返回信息。
商品订单编号修改测试在支付类场景中,最常见的就是修改商品金额,造成低价购买商品,比如说 1 元钱购买了 100 元的东西,其中也有通过修改商品的编号来达到以低价购买高价商品的可能。
漏洞简介:供销大集网站通过修改数量为负,使得支付金额为负数,同时购物车一起支付正数商品时可以成功付款!
漏洞细节 :
供销大集网站:http://www.ccoop.com.cn/index.html。登录后选择购买商品,支持快递配送和物流自提。我先选择民生家乐,民生百货的购物卡很实用哦,这里就选择一张 500 面值的购物卡:

这张 500 面值卡是正常加入购物车购买的,所以是正数,这里在添加一张 300 面值的卡 我们修改数量为 -1:

然后在添加 2 张 100 的卡到购物车,结算为 0:

提交付款即可。
上面的漏洞案例使用了在交易中没有效验负金额这个概念,在运算中出错,服务端应该考虑到这个情况来进行及时的阻断。
修复建议:后端做好效验,金额、信息、折扣等数据只接受从服务端发来的。
密码找回安全测试密码找回业务的安全隐患情节有点多,比如说验证码回显,还有验证码爆破等情况。
中民保险网某处重置任意用户密码、任意登录
漏洞细节:
应用宝下载 APP,走找回密码流程。18888888888 点击获取验证码,验证码直接返回:

之后设置密码皆可,登录验证:

任意手机号登录,验证码登录时。同样返回验证码:

此个案例就是验证码回显在本地,可使用 Burp suite 进行抓包测试,回在了响应包里,可以被本地截获到。
修复建议:避免验证码回显本地,一定要放在服务端。
中华英才网重置任意用户密码
漏洞细节
先进入官网http://www.chinahr.com,点右上角“求职者登录”,再点“忘记密码”,其实可以直接进入 http://passport.chinahr.com/pc/findPwd,输入土豪账号 13888888888:

直接点找回密码(此时验证码已发到手机上),然后在重置页面填上任意验证码,用 burpsuite 抓包,把 msgCode 设为变量:

然后进行 4 位数爆破:

看到验证码 4470 的长度与其他不同,就马上停止了,然后把验证码带入包中放行:


Bingo!

以上案例举例了一个验证码存在暴力破解的可能性,推荐验证码为 6 位安全性较高,同时建议对验证码采取次数限制。
出现的相关案例:
  • 密码找回凭证暴露在修改 URL 中;
  • 验证码回显;
  • 返回失败通过修改状态为 TRUE 修改成功;
  • Token 安全隐患(弱 Token)。
修复建议:
  • 对验证次数,比如验证码类进行次数验证,防止暴力破解;
  • 使用健康的 Token;
  • 严格确认找回者和凭证一致,防止使用张三的凭证找回了李四的密码;
  • 越权绑定其他人信息。
接口安全测试山东移动某接口可任意调用导致手机号码泄露办理各种业务
漏洞细节 : 山东移动在使用 3/4G 的时候,会在网页中插入一段 js,然后在网页右下角显示一个流量球,显示你当前剩余流量,点击流量球还可以办理业务。

但是在 js 进行 Ajax 请求查询的时候没有进行有效的安全校验,导致用户在使用 3/4G 的时候该接口可以被任意网页 js 调用,可以获取用户手机号码,当前已经办理的业务,当前的套餐情况,办理各种套餐等。

获取手机号的 poc:
var angular = {"callbacks": {"_y": function(data){console.log(data);alert(data.respparam.phoneNumber);}}};$.ajax({        url: "http://**.**.**.**:8080/html/servicereq/queryMessageList?callback=angular.callbacks._y&csession=-1648015146&reqparam=%7B%22flag%22:%22-1%22,%22startNum%22:%221%22,%22number%22:%2210%22%7D&templateId=fullscreenbar",        method: "get",        dataType: "jsonp",        jsonp: "angular.callbacks._y",})办理业务和获取套餐信息同理:


测试流程是修改接口的参数账号,然后返回到不同的用户信息。接口调用的方面也比较多,比如说验证码和邮件验证码,两种都可以作为炸弹使用,同时还有案例中的接口账号修改,诸如修改了订单 ID 来获取信息也是一种接口遍历的方式。
修复建议:
  • 查看身份的一致性;
  • 加密资源的 ID,可以是用户 ID 也可以是商品 ID,防止暴力枚举;
  • 权限控制,每个用户能做什么需要控制好。
结语业务安全体系的建设是个庞大的工程,需要结合实际的情况去不断的完善,内容也实在太多,时间仓促这里只挑了几个有建设性意义的案例来进行说明,有疑问的读者可添加我的微信或者在读者圈下进行留言问题,我会尽快回复。

推荐书籍:《Web 攻防之业务安全实战指南》此书的内容十分完善,其中的观点很赞,强烈推荐每位业务安全建设者阅读。
原文:http://gitchat.ysk521.cn/?url=https://gitbook.cn/gitchat/activity/5c1af5328216bb1e23185cbb

TOP

TOP

发新话题