058 业务逻辑漏洞

一:概述

近年来,随着信息化技术的迅速发展和全球一体化进程的不断加快,计算机和网络已经成为与所有人都息息相关的工具和媒介,个人的工作、生活和娱乐、企业的管理、乃至国家的发展和改革。信息和互联网带来的不仅仅是便利和高效,大量隐私,敏感和高价值的信息数据和资产,成为恶意攻击者攻击和威胁的主要目标,从早期以极客为核心的黑客黄金时代,到现在利益链驱动的庞大黑色产业,网络安全已经成为任何个人、企业、组织和国家所必须面临的重要问题。“网络安全和信息化是事关国家安全和国家发展、事关广大人民群众工作生活的重大战略问题,没有网络安全就没有国家安全,没有信息化就没有现代化。

随着互联网+的发展,经济形态不断的发生演变,众多传统行业逐步的融入互联网并利用信息通信技术以及互联网平台进行着频繁的商务活动,这些平台(如银行、保险、证券、电商、P2P、020、游戏、社交、招聘、航空等)由于涉及大量的金钱、个人信息、交易等重要隐私数据,成为了黑客攻击的首要目标,而因为开发人员安全意识浅薄(只注重实现功能而忽略了在用户使用过程中个人的行为对web应用程序的业务逻辑功能的安全性影响)、开发代码频繁迭代导致这些平台业务逻辑层面的安全风险层出不穷(业务逻辑漏洞主要是开发人员业务流程设计的缺陷,不仅限于网络层、系统层、代码层等。比如登录验证的绕过、交易中的数据篡改、接口的恶意调用等,都属于业务逻辑漏洞。)

 
 

二:黑客攻击的目标

一方面:
随着社会和科技的发展,购物、社交、游戏等业务纷纷具备了在线支付功能。如电商支付系统保存了用户手机号、姓名、家庭住址,包括支付的银行卡信息、支付密码信息等,这些都是黑客感兴趣的敏感信息。攻击者可以利用程序员的设计缺陷进行交易数据篡改、敏感信息盗取、资产的窃取等操作。现在的黑客不在以炫耀技能为主要攻击目的,而主要以经济利益为目的,攻击的目的逐渐转变为趋利化。

另一方面:
如今的业务系统对于传统安全漏洞防护的技术和设备越来越成熟,基于传统漏洞入侵也变得越来越困难,增加了黑客攻击的成本。而业务逻辑漏洞可以逃逸各种安全防护,迄今为止没有很好的解决办法。也是为什么黑客偏好使用业务逻辑攻击的一个原因。

 

三:业务安全测试流程

3.1:测试准备

准备阶段主要包括对业务系统的前期熟悉工作。针对白盒性质的测试,可以结合相关开发文档去熟悉相关系统业务;针对黑盒测试,可通过实际操作还原业务流程的方式理解业务。
 

3.2:业务调研

业务调研阶段主要针对业务系统相关负责人进行访谈调研,了解业务系统的整体情况,包括部署情况、功能模块、业务流程、数据流、业务逻辑以及现有的安全措施等内容。根据以往测试实施经验,在业务调研前可先设计访谈问卷,访谈后可能会随着对客户业务系统具体情况了解的深入而不断调整、更新问卷(黑盒测试此步骤可忽略)。
 

3.3:业务建模

针对不同行业,不同平台的业务系统,如电商、银行、金融、证券、保险、游戏、社交、招聘等业务系统,识别出其中的高风险业务场景进行建模。
 

3.4:业务流程梳理

建模完成后需要对重要业务场景的各个业务模块逐一进行业务流程梳理,从前台和后台、业务和支撑系统等4个不同维度进行分析,识别各业务模块的业务逻辑、业务数据流和功能字段等。

遵循的原则:
区分业务主流程和分支流程,业务梳理工作是围绕主流程进行分析的,而主流程一定是核心业务流程,业务流程重点梳理的对象首先应放在核心主流程上,务必梳理出业务关键环节;

概括归纳业务分支流程,业务分支流程往往存在通用点,可将具有业务相似性的分支流程归纳成某一类型的业务流程,无需单独对其进行测试;

识别业务流程数据信息流,特别是业务数据流在交互双方之间传输的先后顺序、路径等;

识别业务数据流功能字段,识别数据流中包含的重要程度不等的信息,理解这些字段的含义有助于下阶段风险点分析。

通过业务流程的各个阶段梳理出业务流程各个关键环节点。
在这里插入图片描述
请添加图片描述

 

3.5:业务风险点识别

在完成前期不同维度的业务流程梳理工作后,针对前台业务应着重关注用户界面操作每一步可能的逻辑风险和技术风险;针对后台业务应着重关注数据安全、数据流转以及处理的日志和审计。

业务风险点识别应主要关注以下安全风险内容:

  1. 业务环节存在的安全风险
    业务环节存在的安全风险指的是业务使用者可见的业务存在的安全风险,如注册、登录和密码找回等身份认证环节,是否存在完善的验证码机制、数据一致性校验机制、session和cookie校验机制等,是否能规避验证码绕过、暴力破解和sql注入等漏洞。

  2. 支持系统存在的安全风险
    支持系统存在的安全风险,如用户访问控制机制是否完善,是否存在水平越权或垂直越权漏洞。系统内加密存储机制是否完善,业务数据是否明文传输。系统使用的业务接口是否可以未授权访问/调用,是否可以调用重放、遍历,接口调用参数是否可篡改等。

  3. 业务环节间存在的安全风险
    业务环节存在的安全风险,如系统业务流程是否存在乱序,导致某个业务环节可绕过、回退或某个业务请求可以无限重放。业务环节间传输的数据是否有一致性校验机制,是否存在业务数据可篡改的风险

  4. 支持系统间存在的安全风险
    支持系统间存在的安全风险,如系统间数据传输是否加密、系统间传输的参数是否可篡改。系统间输入参数的过滤机制是否完善,是否可能导致sql注入、xss跨站脚本攻击和代码执行漏洞。

  5. 业务环节与支持系统间存在的安全风险
    业务环节与支持系统间存在的风险,如数据传输是否加密,加密方式是否完善,是否采用前端加密,简单md5编码等不安全的加密方式。系统处理多线程并发请求的机制是否完善,服务端逻辑与数据库读写是否存在时序问题,导致竞争条件漏洞(经典案例:QQ刷钻,利用脚本实现,充值的时候秒退款申请,导致时序问题出现)。系统间输入参数的过滤机制是否完善。

3.6:开展测试

对前期业务流程梳理和识别出的风险点,进行有针对性的测试。
 

3.7:撰写报告

针对业务安全测试过程中发现的风险结果进行评价和建议,综合评价利用场景的风险程度和造成影响的严重程度,最终完成测试报告的编写。

 

四:万能密码

分析下图中的代码,只需要让sql语句为真即可。
请添加图片描述

$userName = xxx' or 1=1 #/密码可以为任意值			单引号闭合sql语句,1=1判断为真,#注释后面内容
$userName = xxx' or '1'='1/密码可以为任意值	

ppp/123' or 1=1#
admin/123' or '1'='1

 

五:业务数据安全

5.1:商品支付金额篡改

电商类网站在业务流程整个环节,需要对业务数据的完整性和一致性进行保护,特别是确保在用户客户端与服务、业务系统接口之间的数据传输的一致性,通常在订购类交易过程中,容易出现服务器端未对用户提交的业务数据进行强制校验,过度信赖客户端提交的业务数据而导致的商品金额篡改漏洞。商品金额篡改测试,通过抓包修改业务流程中的交易金额等字段,例如在支付页面抓取请求中商品的金额字段,修改成任意数额的金额并提交,查看能否以修改后的金额数据完成业务流程。

该项测试主要针对订单生成的过程中存在商品支付金额校验不完整而产生业务安全风险点,通常导致攻击者用实际支付远低于订单支付的金额订购商品的业务逻辑漏洞。
 

5.2:前端JS限制绕过验证

很多商品在限制用户购买数量时,服务器仅在页面通过JS脚本限制,未在服务器端校验用户提交的数量,通过抓取客户端发送的请求包修改JS端生成处理的交易数据,如将请求中的商品数量改为大于最大数限制的值,查看能否以非正常业务交易数据完成业务流程。

该项测试主要针对电商平台由于交易限制机制不严谨、不完善而导致的一些业务逻辑问题。例如,在促销活动中限制商品购买数量,却未对数量进行前后端严格校验,往往被攻击者所利用,购买多个促销商品,造成商家的损失。

 

5.3:请求重放测试

请求重放漏洞是电商平台业务逻辑漏洞中一种常见的由设计缺陷所引发的漏洞,通常情况下所引发的安全问题表现在商品首次购买成功后,参照订购商品的正常流程请求,进行完全模拟正常订购业务流程的重放操作,可以实现“一次购买多次收货”等违背正常业务逻辑的结果。

该项测试主要针对电商平台订购兑换业务流程中对每笔交易请求的唯一性判断缺乏有效机制的业务逻辑问题,通过该项测试可以验证交易流程中随机数、时间戳等生成机制是否正常。
 

5.4:业务上线测试

业务上线测试主要是针对一些电商类应用程序在进行业务办理流程中,服务端没有对用户提交的查询范围、订单数量、金额等数据进行严格校验而引发的一些业务逻辑漏洞。

通常情况下,在业务流程中通过向服务端提交高于或低于预期的数据以检验服务端是否对所提交的数据做预期强校验。存在此类脆弱性的应用程序,通常表现为查询到超出预期的信息、订购或兑换超出预期范围的商品等。

该项测试主要判断应用程序是否对业务预期范围外的业务请求做出正确回应。

 

5.5:商品订购数量篡改

商品数量篡改测试是通过在业务流程中抓包修改订购商品数量等字段,如将请求中的商品熟练修改成任意非预期数额、负数等进行提交,查看业务系统能否以修改后的数量完成业务流程。

该项测试主要针对商品订购的过程中对异常交易数据处理缺乏风控机制而导致相关业务逻辑漏洞,例如针对订购中的数量、价格等缺乏判断而产生意外的结果,往往被攻击者利用。

 

六:dami支付漏洞,让你一夜暴富

测试过程以damiCMSV5.4网上商城为例,在提交订单的时候进行抓包,修改购买数量为负数,然后提现金额就会增加:负数的绝对值乘以单价

需要用到的环境,环境的部署和软件的使用,这里就不赘述了。可以看我前面章节的内容。
phpstudy
burp suite
火狐浏览器 和 foxyProxy插件

步骤:
先给出下载地址:点我 (访问密码:EM5ZZb)
下载之后解压,把文件夹放到www目录下。(前提是部署好了phpstudy环境)
在这里插入图片描述
网页进入,无脑下一步就行了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
安装成功,进入首页
在这里插入图片描述
点击公司产品任意一个
在这里插入图片描述
就会进入到购买界面
在这里插入图片描述
当我们点击 立即购买 的时候,会跳转到让我们登录账号,这时候我们先注册一个账号,然后再登录
在这里插入图片描述
在这里插入图片描述
登录之后就会进入个人中心页面,
在这里插入图片描述
可以先点击会员中心,进行查看余额,发现是个穷光蛋,余额零元。
在这里插入图片描述

点击网页首页,重新进入购买页面
在这里插入图片描述
点击立即购买,进入订单填写界面
在这里插入图片描述

此时
我们打开bp进行抓包,点击提交订单之后,查看抓包
在这里插入图片描述
然后把1改为-1,然后点击放包(多点几次,有多个包需要释放)
然后网页跳转,购买成功
在这里插入图片描述
然后再bp里面取消抓包,再点击查看我的订单

发现购买成功,再查看余额,发现钱也多了5400
在这里插入图片描述
所以呢,只要我们继续重复刚才的动作,就能无限制的收钱。。。收到手软。。
一夜暴富不是梦,,这方法 ~~我看“刑”!!!

 

七:密码找回安全

7.1:验证码客户端回显测试

找回密码测试中要注意验证码是否会回显在响应中,有些网站程序会选择将验证码回显在响应中,来判断用户输入的验证码是否和响应中的验证码一致,若一致则通过校验。

 

7.2:验证码暴力破解

找回密码功能模块中通常会将用户凭证(一般为验证码)发送到用户自己才可以看到的手机号或者邮箱中,只要用户不泄露自己的验证码就不会被攻击者利用,但是有些应用程序在验证码发送功能模块中验证码位数及复杂性较弱,也没有对验证码做次数限制而导致验证码可被暴力枚举并修改任意用户密码。

在测试验证码是否可以被暴力枚举时,可以先将验证码多次发送给自己的账号,观察验证码是否有规律,如每次接收到的验证码为纯数字并且是4位数。

 

7.3:Response状态值修改测试

修改请求的响应结果来达到密码重置的目的,存在这种漏洞的网站或者手机App往往因为校验不严格而导致了非常危险的重置密码操作。这种漏洞的利用方式通常是在服务端发送某个密码重置的凭证请求后,出现特定的响应值,比如true、1、ok、success等,网站看到回显内容为特定值后即修改密码,通常这种漏洞的回显值校验是在客户端进行的,所以只需要修改回显即可。

 

7.4:Session覆盖

找回密码逻辑漏洞测试中也会遇到参数不可控的情况,比如要修改的用户名或者绑定的手机号无法在提交参数时修改,服务端通过读取当前session会话来判断要修改密码的账号,这种情况下能否对session中的内容做修改以达到任意密码重置的目的呢?

对网站中session覆盖的测试如下:
1、需要准备自己的账号接收凭证(短信验证码)
2、获得凭证校验成功后进入密码重置页面。
3、在浏览器新标签重新打开找回密码页面,输入目标手机号。
4、此时当前session账户已经被覆盖,重新回到第二步中打开的重置密码页面即可重置目标手机号。

 

7.5:弱Token设计缺陷测试

在找回密码功能中,很多网站会向用户邮箱发送找回密码页面链接。用户只需要进入邮箱,打开找回密码邮件中的链接,就可以进入密码重置页面了。找回密码的链接通常会加入校验参数来确定链接的有效性,通过校验参数的值与数据库生成的值是不一致来判断当前找回密码的链接是否有效。

类似于:http://www.xxx.com/findpwd?uid=xx-uu-xx-sxx&token=1497515314 那么这个token值是不是也可以爆破。。。。

 

7.6:密码找回流程绕过测试

很多网站的密码找回功能一般有以下几个步骤:
1、用户输入找回密码的账号;

2、校验凭证:向用户发送短信验证码或者找回密码链接,用户回填验证码或单击链接进入密码重置页面,以此方式证明当前操作用户时账号主人。

3、校验成功进入重置密码页面。

在找回密码逻辑中,第二部校验凭证最为重要。不是账号主人是无法收到校验凭证的,试想有没有办法可以绕过第二步凭证校验,直接进入第三步重置密码呢?

用户修改密码需要向服务器发送修改密码请求,服务器通过后再修改数据库中的相应的密码,所以在测试中我们首先要收集三个步骤的请求接口,重点是收集到最后一步重置密码的接口,这样我们可以直接跳过凭证校验的接口去尝试直接重置密码。

 

7.7:接口参数账号修改

找回密码功能逻辑中常常会在用户修改密码接口提交参数中存在传递用户账号的参数,而用户账号参数作为一个可控变量是可以被篡改的,从而导致修改账号密码的凭证或修改的目标账号出现偏差,最终造成任意账号密码修改的漏洞。

通常在找回密码逻辑中,服务端会要求用户提供要修改的账号,然后给这个账号发送只有账号主人才能看到的凭证。比如给这个账号主人绑定的邮箱或者手机号发送验证码,或者找回密码链接,这样可以保证只有账号主人才可以看到这些凭证。但是如果服务器对帐号的控制逻辑不当,就会导致原有账号被篡改为其他账号,服务器端把凭证发送给篡改后的账号的邮箱或手机,最终造成可利用凭证重置任意账号密码的漏洞。

接口参数账号修改流程测试为拦截前端请求,通过修改请求内的账号ID、名称或者邮箱、手机号等参数,将修改后的数据发送给服务器进行欺骗达到密码重置的目的。

以下,我们以metinfov4.0例子,来说明这个问题。
点我下载:点我 (访问密码:CUTAAu)

直接进入管理员界面
在这里插入图片描述
登录进去。
然后再用另一个浏览器,从主页进入会员中心
在这里插入图片描述
注册一个用户,用户名为xxx,密码为123456
点击注册按钮之后,会自动跳转到登录界面,然后直接登录
在这里插入图片描述
点击左侧的 修改基本信息,把密码改为111111
在这里插入图片描述
此时,我们先用Burp suite进行抓包,然后再点击 提交信息。
在这里插入图片描述
这里显示我们要修改的新密码是多少。
那么我们把这里的数据进行修改下,变成222222
在这里插入图片描述
然后点击放包
回到浏览器上:显示操作成功
在这里插入图片描述
重新登录,密码变成了抓包的时候修改的密码。
在这里插入图片描述
那既然如此,我们能不能修改admin的密码呢?admin现在正在另一个浏览器上登录着。这也是为什么要一开始就不在同一个浏览器登录的原因。
我们先以xxx/222222用户登录进去,进入修改信息页面,同样进行抓包
在这里插入图片描述
在这里插入图片描述
修改包里面的用户名和密码
在这里插入图片描述
然后进行放包。
回到管理员登录的那个浏览器。刷新页面,发现管理员退出登录,需要重新登录,新密码为444444

完成了普通用户修改管理员密码的操作。

 

八:补充,表单爆破

前面章节有讲过。
这里粗略说下

有$符号的会进行爆破
在这里插入图片描述
加入爆破字典:
在这里插入图片描述

关于验证码爆破:
通过提交页面进行抓包,然后发包的方式,看验证码是否同步刷新,以此来推断验证码能否重用。

没有同步刷新,则验证码能够重用。能重用则不需要进行验证码爆破

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值