未知攻焉知防
逻辑漏洞
如果不知道原理,如何攻破它呢?引用美国高校黑客教程就是-》猜测它,尝试它,然后观察它
目前攻击者更倾向于业务逻辑漏洞(裹羊毛),薄弱点太多。这个地方厂家也在积极的防御,但是没有很好的解决方案与落地措施。
一旦得到大量裹羊毛,破坏经济与数据,可以给一个公司弄破产。
白帽子积极的关注这个层面,有可观的经济回报,有的甚至在漏洞点上面钓鱼(360,支付宝都干过这种事),等着你发现然后叫你去入职。
处理裹羊毛问题面临局势如下:
企业面临局势如下
有的不懂的人会说有防火墙,不是说防火墙不好,只是防火墙的防御性没有针对裹羊毛而已。在逻辑漏洞面前,防火墙没有任何防御措施。(属于代码层面的攻防)
8个常见的逻辑漏洞 加密算法不要在前端加密 【目前主流】 在登陆的时候没有加密,就存在暴力破解。 支付漏洞,问题最多,也比较好挖。越权问题也很好挖。
短信验证码
验证码过短可以暴力破解,找回他人账号密码(验证码一定要6位或者以上)
验证码一定要有一个有效期,一直生效的话,还存在暴力破解问题。 6位的验证码,大概30分钟破解出来。生效时间推荐5分钟。
明文传输:登陆时没加密,存在暴力破解问题。(使用https协议)
不限制错误次数:输入错误,但是验证码还是原来的验证码。存在暴力破解问题。(大部分限制5次)
本地验证:返回包里面返回了验证码;如果我们验证码输入错误了,把返回包的假改成真,直接就登陆了。
万能验证码:开发过程中,留下来的方便测试,会出这么一个上帝视角。这个验证码在整个程序里是通用的,连手机短信验证都不需要发。
防御措施
1.加大暴力破解的难度,没有从根源解决这个问题。
推荐第三种方法,限制5次,从根源上解决。方法二,增加用户的操作量
高并发 签到例子 高并发就是同时发送一百个用户签到包,同时查询(那么返回的结果都是一样的,签到100次)
高并发防御措施
悲观锁:100个人发起签到,只能签到一个包过去处理(排队机制)
乐观锁:在更新一个数据以后,给数据打上一个标识。这个标识就是它的数据版本号。
密码找回
验证码未绑定用户:验证码是通用的,用自己手机的验证码登别人的账号
前段验证,跳过验证步骤:找到这个站是用哪个CMS源码建的,把它下载下来。登陆后台之后看一下它的路径。把这个路径复制下来,有可能跳过验证,直接进入后台。
邮箱/手机号劫持:找回密码时会向手机号发送一个验证码,这个验证码有一个时效性。一般是60秒,60以后可以点一下重新发送。如果在重新发送那里进行抓包,把重新发送的手机号改成我们自己的,它就会把验证码发送到我们的手机里。
密码重置权限未校验:用户批量重置密码。 进入一个网站的后台,里面有个人中心,修改密码等等,修改密码那里,没有验证当前密码的话,可以在这里抓包,包里如果有ID或者其他的值,把它修改一下说不定就把其他用户的密码修改了。
支付漏洞
加入购物车:商品数量改成负数,可能给自己的账户加钱。
微信,支付宝有个机制: 金额不能为负数,无法付款负的金额。金额改成0.01比较好绕过,不要贪(使用负数)
加入购物车这里有个库存,库存数量减1:数量为0了的话,其他人都无法购买了。
以上都是烂大街的方式,漏洞不易出现。关注他们忽略的地方,就有漏洞出现:比如运费,优惠券。
查看订单:就是越权。购买一个商品,在查看订单的时候进行抓包。包里面出现类似于user=5,id=5的值的话,修改了试一试。查看别人的订单。
修改付款状态:付款的时候,故意把支付宝的支付密码输错,进行抓包(包里的值肯定有一个假的条件,把它改成真的条件)。绕过支付。
转账,高并发:账户上只有1元钱,给别人转账。这个地方同时发送100个转账包给别人(高并发),转账试一试能不能改成-1.。。
积分付款:同理,值都改一下。
支付接口:付款的时候选择要微信还是支付宝。
两个方式绕过:1.不存在的接口。付款的时候选择支付宝,进行抓包。把包的目标网站改成百度。返回HTTP协议肯定是200 OK状态值。什么都没做,改一下目标网站就支付成功了。
2.把支付时的二维码接口,换成自己的
例子
6位的很长,还是存在暴力破解问题。一个好的服务器可能30分钟不到就破解了。
图型验证是静态的。
短信验证码输错,点提交会提示验证码错误。它的验证码变了一下。而数据包里面只有(手机号,密码和短信验证码)。像第一个验证码根本就没有值传到服务器去做真伪判断。浏览器直接F10,审查元素等都可以直接把这个验证码输入框删掉来登陆和注册。
2.越权
自己的个人信息里有一些编辑的功能。点编辑进行抓包。 ID的值修改以后返回他人的个人信息出来。
支付的时候进行抓包
短信轰炸
随便找十个商城网站,大概就一个存在短信轰炸问题。
一个正常的网站,在短信验证码这里会出现一个验证码,输入验证码之后,才能发送短信验证码。 上图没有任何的图形验证码,一眼可以确定存在短信轰炸。
发送的多了被拉入黑名单,对服务器影响也很大。手机号码也会变成恶意用户。
登陆的时候抓包是密文。 返回包的值是明文。 两个包之中,存在同样的值。这算不上是漏洞,算得上一个逻辑缺陷(即,如果不是密码的值,那这里的值为什么要一致。它没有任何具体应用价值) 单单这么一个漏洞提交以后,也可以换来几百块钱的奖励。 挖大厂商,是接收这些逻辑缺陷的。
返回包的时候,直接把验证码发了回来,相对于本地验证。
一个网站,哪里最可能发生问题。
用户遍历:如果提示用户名不存在 或者输入存在的用户名提示登录失败