逻辑漏洞的原理及分析

前言

之前的文章都是写的SQL注入,命令执行,文件上传等一步到位的高危漏洞原理及防御,接下来说一说逻辑漏洞,因为现在工具的大量使用,之前的那些主流漏洞,很难被轻易利用了,逻辑漏洞不一样,工具不会思考,所以应用程序有逻辑缺陷,工具很难发现,需要人为去挖掘,接下来就简单说一说,如何来进行逻辑漏洞的挖掘。

逻辑漏洞本质

web应用程序中的逻辑漏洞各不相同,有的很明显,有的很微妙。与SQL注入和跨站不同,逻辑漏洞没有共有的“签名”,定义特性是指应用程序执行的逻辑存在某种缺陷。大部分逻辑缺陷表现为开发者在思考过程中做出的特殊假设存在明显或隐含的错误,通俗点来说,有的开发者会这样认为,如果发生A,就会出现B,因此我执行C。没有考虑如果发生X会怎么样,这种错误的假设会造成许多安全漏洞。逻辑漏洞是多样性的,挖掘它们需要从不同的角度思考问题,设法了解设计者和开发者做出的各种假设,然后考虑如何攻击。

常见的逻辑漏洞

一般哪些地方容易报出逻辑漏洞呢,比如,密码找回、交易支付、密码修改、突破限制等。

密码找回中的逻辑问题

关于密码找回的逻辑问题,我画了一个思维导图,把可能出现逻辑缺陷都写出来了。如下图

 

 比如第四条,如果验证码没有销毁,或者是验证码没有刷新,我们是不是可以尝试进行暴力破解。再比如第六条,如果没有进行非空判断,那验证也是可以绕过。

密码修改中的逻辑问题

密码修改过程中,可能存在的逻辑问题,我也以画思维导图为例,如下图

 

 交易支付中的逻辑问题

现在电商这么发达,如果你不想去淘宝开店,自己搭建一个,那就要分析可能存在的逻辑问题了。下面我就以电商购买商品的过程为例,分析可能存在的逻辑问题,这次以流程图的方式。

 

  1.  加入购物车时,抓包尝试修改购买数量为负数,试一试商品价格能否修改。
  2. 确认购物车消息时,尝试修改金额,如果购买多件打折,尝试能不能突破这个逻辑,比如先加入购物车,再把多余的移除,看有没有效果。
  3. 物流这里尝试能否修改运费,或改为负数,虽然现在大部分都包邮,万一有漏网之鱼了。
  4. 确认订单跳转支付接口时,看能不能修改金额,尝试能不能跳过支付,直接跳到支付成功的页面。

 还有一些其他的就不依次分析了。

修复建议

  1. 确保将应用程序各方面的设计信息都详细的记录在文档中,方便其他人了解设计者做出的每个假设。
  2. 要求源代码提供清楚的注释,包括每个代码的组件的用途和预计用法以及每个组件对它无法直接控制的内容做出的假设。
  3. 根据会话确定用户的身份和权限,不要根据请求的其他特性对用户的权限做出假设。

小结

发掘逻辑漏洞时,要对程序进行系统性的探查,也要从不同的角度思考问题。除了这些,挖掘逻辑漏洞的最大挑战是如何深入的了解开发者的思维方式,需要了解到他们想要达到什么目的,可能做出什么假设,可能采用哪些捷径,将会犯什么错误。想象一下,如果程序完工的最后,还在担心功能,而不是安全,要加入新功能,这样的情况下,开发者可能犯什么错误等等。

 

posted @ 2020-05-09 19:04  小艾搞安全  阅读(3094)  评论(0编辑  收藏  举报