【学习笔记】常见漏洞:逻辑漏洞

2019-10-09 14:18:01 admin


逻辑漏洞



01 什么是逻辑漏洞



所有应用程序都是通过逻辑实现各种丰富多彩的功能的,要实现这些功能,必须掌握大量的技巧并进行周密的安排。但是,有很多情况这些功能逻辑存在缺陷,比如程序员的安全意识,比如考虑问题不周全等。


逻辑缺陷的本质就是设计者或开发者在思考问题过程中做出的特殊假设存在明显的或隐晦的错误,简单来说,就是程序员可能这么认为:如果发生A,就一定会出现B,因此执行C。但是他们却忘记了另外一个问题:如果发生X会怎么样?


举个例子:通常在购物网站中,购买商品时通常可以选择商品数量来决定买多少件商品,这个数量通常是从1开始,如果把数量改成负数,进行结算,是不是不会扣钱,反而给账户加钱。



       


02 常见的逻辑漏洞形式


2.1 越权


越权包括水平越权和垂直越权。


     

以某APP为例,在点击账户信息按钮时会返回当前账户的基本信息,如下是请求的数据:可以看到请求数据中,body部分有一个唯一标识符,是一个id。


     

对应了当前用户的身份不做任何修改的时候可以返回当前用户的信息

     

把这个id的数据修改成别人的id,返回了别人的用户信息。


     

这个信息从产品逻辑上讲不是你这个用户有权限看到的,这里就是没有任何的身份认证,仅根据Id返回相应的数据,导致可以水平越权,查看他人的账户信息。


       

以某APP为例,APP有两种登录模式,用户(指定人员)登录和游客登录。对于游客来说很多功能不能访问。APP只是做了前端的界面相关限制,当以游客权限在发送数据包中,添加一个代表用户权限的字段,即可使用相关的功能,比如以游客的登录身份访问指定用户才可使用的查询功能。


     

2.2 无限制的重试


无限制的重试也很简单,只需要在一些操作比如登陆,验证码发送这种场景,修改数据包中密码或者手机号字段,重新发送,如果后端没有做限制,可以造成密码爆破或者是短信验证码轰炸的漏洞。


2.3 后端信任前端数据


这种漏洞出现在步骤比较多的功能上,比如商品购买到支付环节,修改商品数量/单价或者是订单总价就会触发漏洞。比如下图这个功能:


     

套餐原价为319,在购买时发现数据包中包含了金额的数据,修改金额为1元然后进行支付,就可以购买这个商品。


     

2.4 竞态条件考虑不周


竞态条件考虑不周是程序没有考虑在高并发的情况下处理,一个操作本应该只产生一次结果,但是利用多线程发数据包请求,可能产生多条结果,比如抢优惠券可能抢到多张,提现1次可能导致提现多次。





服务热线

17884544032

公司地址

安徽省合肥市蜀山区鑫鹏大厦

作息时间

周一至周五 9:00-18:00