@1kbfree
2018-03-17T18:37:18.000000Z
字数 1291
阅读 1350
渗透
什么是逻辑漏洞
逻辑漏洞是由于程序逻辑不严或逻辑太复杂,导致被攻击者利用,从而通过篡改相关数据来达到自己的目的,如绕过登录校验等
逻辑漏洞最多被攻击的当属业务系统了,一些不涉及到业务的逻辑漏洞,那这个漏洞最多算个小彩蛋,就像一些游戏当中,打某个关卡时,必须卡 bug 才能通过。
说一个前些日子刚刚发生的事,支付宝密码找回逻辑漏洞,相信你肯定听说过,只要是熟人就能改你的密码,或者知道你的个人一些信息的也可以改,这个是不是就很危险了?
我又为什么说这个逻辑漏洞很常见的?因为程序本身都是程序员自己设计的,所以人吗,总会出现一些小错误的,尤其是业务系统特别长的时候,肯定会出现一些小的逻辑漏洞,如果一些别有用心的人,利用了,那后果还是很危害很大的
如果你要是有该服务系统的源代码,你还能从代码审计的角度去发现可能存在的逻辑漏洞下面贴一个逻辑漏洞
预防思路①
我们可以看到这里的①②步就是最总要的,但黑客修改金额的时候,服务器会根据当前的金额再次生成哈希值来与第一次数据包内金额的哈希值做比较,这一步就是预防逻辑漏洞重点啦~,补充一下:其实第一步发起100元订单请求,数据包不带有金额数据也很重要,不然黑客将第一步这个金额数据修改了,①就可以与第一次生产的哈希值做比较了
还有一个保障就是在大于某金额的时候,转成人工服务,这样可以一定的保障了意外的发送
语法思路②
验证码回传漏洞主要是发生在前端验证处,并且经常发生的位置在于
验证码主要发送途径
基本上运行机制如下:
所以我们只需要抓取Response数据包便知道验证码是多少,这样是非常不安全的
我们可以将验证方式主要采取到后端验证,不要将验证码放前端展示
如果想在前端认证也可以,但是有一定的缺陷,可以看如下图:
如何的是比较安全的
注册中最常见的有两个,一个是恶意注册,另一个是账户遍历。一个好的注册界面应该是这样:
或者:
而不是这样的:
要么使用短信或邮箱进行验证,要么存在难以识别的验证码,使得注册的请求无法批量提交。那么账户遍历是什么意思呢?在注册的时候Web程序往往会有用户名或手机号(或其他什么)检测之类的步骤,以避免相同账号注册两次,比如一般会提示“*用户名已存在!”。我们就可以利用这个步骤去批量尝试一些用户名,如果提示已存在就说明存在这个用户,然后就可以用这个用户名进行下一步操作,比如登录爆破(直接爆破的话可能会提示“用户名或密码错误”,用已知用户名爆破就只需要关心密码问题了)和密码找回
逻辑漏洞之通过修改忘记
首先,我们要拿2个用户来测试这个漏洞是否存在
这是我们的攻击号
现在我们想来通过修改密码来修改其他手机号的密码,我们先输入正常的手机号码和验证码,然后通过修改传递的数据包来修改他人的手机号密码
我们正常输入手机号码并且输入对应的验证码后来到这个页面:
我们输入重置密码后提交的时候抓包看看:
尝试登陆
其实我们可以看到,这就是因为这个网站将手机号码放到了数据包里,并且没有二次验证,从而导致了这次攻击的发送。
作者free(如果写的不好,各位大佬请别喷我)
2018-03-17