目录
-
业务安全概述
-
漏洞成因
由于只注重实现功能而忽略用户个人行为对web应用程序的业务逻辑功能的安全性影响。开发代码不断迭代导致这些平台业务逻辑层面的安全风险层出不穷。业务逻辑漏洞主要开发人员业务流程设计缺陷,不仅限于网络层、系统层、代码层等,如登录验证绕过、数据篡改、接口恶意调用等。
-
漏洞检测模型
业务安全top10漏洞挖掘关键点
0x01身份认证安全
0x02业务一致性安全
0x03业务数据篡改
0x04用户输入合规性
0x05密码找回漏洞
0x06验证码突破
0x07业务授权安全
0x08业务流程乱序
0x09业务接口调用
0x10时效绕过测试
-
业务流程乱序
-
原理&测试流程
部分网站逻辑可能是先A过程后B过程然后C过程最后D过程。
用户控制着他们给应用程序发送的每一个请求,因此能够按照任何顺序进行访问。
用户就从B直接进入了D过程,就绕过了C。如果C是支付过程,那么用户就绕过了支付过程而买到了一件商品。
如果C是验证过程,就会绕过验证直接进入网站程序了。
-
流程乱序测试
第一步:输入充值信息,提交金额。
第二步:生成订单信息。
第三步:抓包,将之前充值成功数据包里的订单号修改为刚生成的订单号。
第四步:防爆后如果充值成功,那么则存在流程乱序问题。
-
流程乱序修复建议
对敏感信息进行加密处理,例如身份id、账号密码、订单号、金额等。
在服务器端对信息进行二次校验,避免修改乱序等情况。
-
业务接口调用
如果未能做一些处理,那么就会容易发生一些业务接口调用上的安全漏洞,常见的业务接口调用漏洞如下:
- 重放攻击
- 用户遍历
- 参数篡改
- 接口未授权访问
- callback(回调函数)自定义
重放攻击
在短信、电话、邮件调用业务生成业务或生成业务数据环节(短信验证码,电话验证码,邮件验证码,订单生成,评论提交等),对其业务环节进行调用(重放)测试。如果业务环节进行(重放)测试。如果业务经过调用(重放)后被多次生成有效地业务或数据结果 。
危害
- 短信轰炸
- 电话轰炸
- 邮箱轰炸
- 恶意用户注册
- 恶意上传
- 恶意评论等等
-
短信/邮箱/电话修复方式
设置发送间隔时间
正则校验手机号/邮箱/电话,防止被绕过
使用安全的加密参数及参数值
限制发送数量
-
接口调用遍历
测试方法:例如有一个功能,是浏览商品的历史记录。把其用户的浏览历史记录URL发送到intruder,遍历其用户的id,看返回reponse信息中是否有正常返回的,且是其他用户的,则证明存在接口遍历问题。
修复方法:在session中存储当前用户的凭证或者id,只有传入凭证或者id参数值与session中的一致再返回数据内容。
-
参数篡改
测试方法:例如在一些短信验证码、邮件验证码等功能业务中,比如修改其他用户密码,发送后,再次点击重新发送,拦截其请求,修改为自己的账号,如果自己收到了验证码,则存在此问题。
修复方法:会话session中存储重要的凭证,在忘记密码、重新发送验证码等业务中,从session获取用户凭证而不是从客户请求的参数中获取。从客户端获取手机号、邮箱等账号信息,要与session中的凭证进行对比,验证通过后才允许进行业务操作。
-
未授权访问
测试方法:只要是登录后才可以返回相关信息的接口,在未登录状态下也可以返回的,就是未授权访问。在一般的网站测试中,可以http history中选择网站的根目录地址,然后右键spider from here进行爬去相关的URL,然后在target栏下的site map中利用mime type进行筛选,主要关注一下json、script、xml等这些类型,然后把URL贴到浏览器中看是否能访问来验证。
经验之谈:或者在测试的时候,相关数据包发送到repeater后,删除cookie进行go,如果成功返回信息,则是存在此问题的。
修复方法:利用token校验的方式,在URL中添加一个token参数,只有token验证通过才返回接口数据token使用一次后失效。在接口被调用时,后端对会话状态进行验证,如果已经登录,便返回接口数据,如果未登录,则返回自定义的错误信息。
-
callback自定义
测试方法:因为同源策略,很多网站都会使用JSONP,而JSONP一般会使用callback回调函数,如果这个函数没有做相关的措施,可以随意传入js代码并执行则存在此问题。
可以使用burp的爬虫功能,先爬去目标网站,然后筛选一下包含有callback关键词的URL,看response返回的mime类型,如果是text/html的,则可以输入js代码确认下是否存在这个问题。
修复方法:首先可以定义下content-type为json格式,content=application/json。其次建立callback函数白名单,如果传入的函数不是白名单内的,则组织并转到异常页。最后可以对callback参数进行html实体编码来过滤掉一些特殊字符。
-
业务数据篡改
最大数限制突破
很多商品限制用户购买数量时,服务器仅在页面通过js脚本限制,未在服务器端校验用户提交的数量,通过抓包修改商品最大数限制,将请求中的商品数量改为大于最大数限制的值,查看能否以修改后的数量完成业务流程。
本地js参数修改
部分应用程序通过Javascript处理用户提交的请求,通过修改Javascript脚本,测试修改后的数据是否影响到用户。