加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 站长资讯 > 评论 > 正文

企业安全体系建设之路之Web安全篇

发布时间:2019-01-21 05:49:50 所属栏目:评论 来源:mosin
导读:副标题#e# 目前的网络攻击主要还是以WEB攻击为主流,毕竟这是与外界沟通获取知识和了解世界的主要桥梁。 目前随着各大企业对安全的重视,Web的攻击成本逐渐高于了防御成本,导致业务中Web安全漏洞的逐渐减少,甚至常规漏洞的消亡。当然,一个漏洞的消亡必会

通常出现交互逻辑漏洞的点为登录处、支付处、用户信息交互处和与数据库交互处。因为网站程序的某些交互接口或者数据交互接口信息验证逻辑问题,对提交的数据参数审计不严格,造成交互逻辑漏洞,下面列出比较常见的交互逻辑漏洞。

登录交互逻辑

在登陆处,一般的测试会测试站点是否严格控制登录交互,

攻击者通过抓包查看提交参数,查看是否有可以利用的交互逻辑漏洞,有些站点在登录参数,也就是帐号密码传过来后,会验证帐号密码是否正确,然后返回true或者返回false,即使使用错误的帐号密码,当返回false时,那么我们就可以改返回数据包为true,那么就直接登录了,更有胜者当用户名正确后,无论密码是否正确,都直接返回正确的帐号密码。有人可能会想,即使你改掉包,不是还有cookie或者token吗?话虽没错,但是某些站点的cookie是直接在前端生成,或者在我们改掉包后,服务器端会把正确的cookie给你返回回来。

还有在找回密码处,通过找回密码这个交互逻辑漏洞,攻击者可以重置任意账户密码,从而达到自己的目的,这对于金融行业和电商行业等用户量大的站点,造成用户信息泄漏或者资金被盗甚至对用户造成诈骗等后果,这对企业的声誉和发展都会造成影响和损失。

在找回密码处,攻击者一般通过验证邮箱或者手机号找回密码,如果帐号匹配,服务器一般会发送短信验证码或者邮箱验证码到用户手里,那么这个过程如果服务器端验证不严格就有可能会造成交互逻辑漏洞的发生。

重置密码的攻击逻辑常见的有如下几点

  • 攻击者通过修改返回包,绕过验证步骤,直接到达修改密码处
  • 攻击者通过修改返回包,把当前重置帐号(如手机号,邮箱地址),修改为自己的帐号(如手机号,邮箱地址),那么在服务器没有对帐号进行严格验证的情况下,服务器端会直接把重置验证凭证发送到攻击者的手里
  • 攻击者通过抓取返回包,由于服务器端的自身逻辑问题,可能会把帐号密码等等与当前重置帐号的相关信息给返回过来,不用重置,就知道了用户密码
  • 站点找回密码设计问题,当重置密码后,服务器会发送新的密码到用户手中,而这个密码是几位的纯数字,攻击者是可以通过暴力穷举的方式知道重置的密码,更有趣的是,某些站点直接是重置密码为固定的密码字符串
  • 网页验证不严格,可通过url直接到达修改密码处
  • 某些通过邮件找回的,其重置密码的链接是可以猜测和预知的

还有就是验证码逻辑问题,某些验证码虽然在前端进行了验证,但是在后端却没有进行很严格的检查,攻击者可以通过删除验证码或者验证码是不变的,可有可无的,那么攻击者就可以实施撞库或这暴力破解用户帐号密码了。在用手机或邮箱或其他接收攻击接收登录或重置密码时,可能出现验证码交互逻辑漏洞。我们知道,一般情况下,站点发送的验证码是有时间限制的,通常为几分钟,如果验证码在后端发送逻辑有问题的话,就会出现问题。如,当攻击者在爆破时,验证码过期时间为5分钟,时间快到了时,攻击者再发送一次请求,因为后端没有做失效控制策略,就又会收到一次一模一样的验证码,而且时间又是5分钟,那么想要爆破某一个帐号的密码就不再是什么难事了。当然还有站点直接返回验证码的,或者验证码是在前端生成通过后端直接发送到用户手中的。

想要防护登录交互逻辑此类的漏洞也很简单,就是要对相关的参数做个严格的验证,如

  • 登录的逻辑不返回前端,由后端管控,前端进行调用
  • 验证码失效时间进行严格控制,验证码不能多次使用,为一次性验证码,获取验证码的时间也要有时间限制,由后端管控,预防被用于短信轰炸
  • 所有的账户重置信息都不返回给前端
  • 生成的重置密码连接是不可预知的,随机的

当然,防护手端多种多样,最主要的只有一点,那就是严格检查参数,对参数进行严格的校检,预防此类漏洞就只能是提高验证逻辑。

支付逻辑

支付漏洞可以说是比较严重的逻辑漏洞了,毕竟是涉及到钱这个问题。一个支付漏洞有可能会对企业造成巨大的损失。

支付漏洞的产生符合逻辑漏洞特点,都是其修改自身逻辑达到欺骗的效果。

支付的一般流程为:确认信息=>提交订单=>支付=>支付成功

主要的漏洞点如下

1.修改参数属性值

参数的属性值有

  • 支付金额
  • 代金卷
  • 积分
  • 其他

这几个属性值也是最为基础和常见的支付逻辑漏洞发生点,攻击者一般的攻击手法为修改支付金额的多少来进行测试,出现漏洞的支付步骤一般在提交订单时或提交订单之后,通过把支付的金额修改成低价格或者修改为负数,如果后端判断逻辑有问题,那么就会出现支付逻辑漏洞了。

所以,在后端进行判断时,要对相关参数进行绑定,即使在前端修改了,后端也是可以初始化参数的。

2.修改数量值

这个和修改参数属性值差不多,也是把商品数量修改为负数达到支付金额成负数的效果,当然还有一种就是商品差价修改,用一种低价格商品的数量总金额去支付高价格商品的数量总金额,如果后端逻辑有问题,那么就可以低价格购买高价格商品了。

3.越权支付

越权一般发生在支付环节,攻击者可以通过修改自身ID为其他用户的ID值,如果没有严格的支付密码或验证码的话,就可以达到用他人账户为自己的商品买单的效果,当然还有其他的越权支付手段,如越权支付他人账单,越权提现他人现金等。

4.条件竞争

条件竞争这个词我们在Web漏洞或是其他系统漏洞中都是可以看到的,条件竞争利用其高并发线程,利用时钟延迟(后台处理延迟)达到多出或或高于现有正常结果。如LFI漏洞,通过不断写入tmp文件,达到getshell的目的。同样,如提现功能来说,如果我们把要提现的金额分成多份,通过高并发线程,如果后端处理能力或者逻辑判断能力存在缺陷的话,那么我们就可以提现高于提现次数的金额。

5.支付状态

通常在我们支付成功后,服务器会返回一个支付成功或支付失败的结果,如果在后端没有对支付状态和订单号进行绑定的话,那么攻击者只需要修改返回状态为True就会成功购买商品,而无论支付是否成功。

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读