之前的文章都是写的SQL注入,命令执行,文件上传等一步到位的高危漏洞原理及防御,接下来说一说逻辑漏洞,因为现在工具的大量使用,之前的那些主流漏洞,很难被轻易利用了,逻辑漏洞不一样,工具不会思考,所以应用程序有逻辑缺陷,工具很难发现,需要人为去挖掘,接下来就简单说一说,如何来进行逻辑漏洞的挖掘。
web应用程序中的逻辑漏洞各不相同,有的很明显,有的很微妙。与SQL注入和跨站不同,逻辑漏洞没有共有的“签名”,定义特性是指应用程序执行的逻辑存在某种缺陷。大部分逻辑缺陷表现为开发者在思考过程中做出的特殊假设存在明显或隐含的错误,通俗点来说,有的开发者会这样认为,如果发生A,就会出现B,因此我执行C。没有考虑如果发生X会怎么样,这种错误的假设会造成许多安全漏洞。逻辑漏洞是多样性的,挖掘它们需要从不同的角度思考问题,设法了解设计者和开发者做出的各种假设,然后考虑如何攻击。
一般哪些地方容易报出逻辑漏洞呢,比如,密码找回、交易支付、密码修改、突破限制等。
关于密码找回的逻辑问题,我画了一个思维导图,把可能出现逻辑缺陷都写出来了。如下图
比如第四条,如果验证码没有销毁,或者是验证码没有刷新,我们是不是可以尝试进行暴力破解。再比如第六条,如果没有进行非空判断,那验证也是可以绕过。
密码修改过程中,可能存在的逻辑问题,我也以画思维导图为例,如下图
现在电商这么发达,如果你不想去淘宝开店,自己搭建一个,那就要分析可能存在的逻辑问题了。下面我就以电商购买商品的过程为例,分析可能存在的逻辑问题,这次以流程图的方式。
还有一些其他的就不依次分析了。
发掘逻辑漏洞时,要对程序进行系统性的探查,也要从不同的角度思考问题。除了这些,挖掘逻辑漏洞的最大挑战是如何深入的了解开发者的思维方式,需要了解到他们想要达到什么目的,可能做出什么假设,可能采用哪些捷径,将会犯什么错误。想象一下,如果程序完工的最后,还在担心功能,而不是安全,要加入新功能,这样的情况下,开发者可能犯什么错误等等。