[红日安全]Web安全Day6 - 业务逻辑漏洞实战攻防
本文由红日安全成员: Orion 编写,如有不当,还望斧正。
大家好,我们是红日安全-Web安全攻防小组。此项目是关于Web安全的系列文章分享,还包含一个HTB靶场供大家练习,我们给这个项目起了一个名字叫 Web安全实战 ,希望对想要学习Web安全的朋友们有所帮助。每一篇文章都是于基于漏洞简介-漏洞原理-漏洞危害-测试方法(手工测试,工具测试)-靶场测试(分为PHP靶场、JAVA靶场、Python靶场基本上三种靶场全部涵盖)-实战演练(主要选择相应CMS或者是Vulnhub进行实战演练),如果对大家有帮助请Star鼓励我们创作更好文章。如果你愿意加入我们,一起完善这个项目,欢迎通过邮件形式(sec-redclub@qq.com)联系我们。
业务逻辑实战攻防
1.1 逻辑漏洞概述
逻辑漏洞,之所以称为逻辑漏洞,是由于代码逻辑是通过人的逻辑去判断,每个人都有自己的思维,自己的思维容易产生不同想法,导致编写完程序后随着人的思维逻辑产生的不足,大多数逻辑漏洞无法通过防火墙,waf等设备进行有效的安全防护,在我们所测试过的平台中基本都有发现,包括任意查询用户信息、任意删除等行为;最严重的漏洞出现在账号安全,包括验证码暴力破解、任意用户密码重置、交易支付、越权访问等等。
1.2 常见的逻辑漏洞
交易支付、密码修改、密码找回、越权修改、越权查询、突破限制等各类逻辑漏洞。下图是简单的逻辑漏洞总结,当然肯定不只这些,逻辑漏洞很多时候需要脑洞大开:
1.3 如何挖掘逻辑漏洞
确定业务流程--->寻找流程中可以被操控的环节--->分析可被操控环节中可能产生的逻辑问题--->尝试修改参数触发逻辑问题
1.4 实例
以下实例不针对任何cms,只做演示用,有些代码进行修改后演示
首先我们看二个实例,我们知道很多网站都存在个人注册功能,设置个人权限,访问个人的功能页面,下面我们看下由于注册功能导致的逻辑漏洞
1.4.1 批量注册
我们把注册功能填写相关信息,然后抓包
将数据包发送到repeater,每次修改username值,发现,只需要修改username值就可以注册成功用户,图形验证码无效,并且未对电话,邮箱等信息校验,可批量注册
1.4.2 注册功能,批量猜解用户
同样是注册功能,在输入用户名时,发现会提示用户名是否存在,猜测该位置可以猜测哪些用户注册过该网站
抓取该位置数据包发现,会对用户名id进行判断,是否存在,是否符合规则
批量探测用户,发现可以批量探测已注册过的用户
建议在提交用户注册信息时判断用户是否存在,避免批量猜解注册用户
既然有注册功能,肯定不可或缺的就是忘记密码功能,忘记密码不可或缺的就是手机验证码或邮箱验证码进行找回,但在找回中会存在验证码回显、验证码不失效、验证码太短可爆破、验证码js校验等等多种漏洞情况,下面为其中一种情况。
1.4.3 任意密码重置
在忘记密码功能,我们输入用户名正确后会进行短信验证码,通过手机验证码或者邮箱验证码
在验证码功能中输入验证码进行验证,发现返回包中存在验证码是否成功情况“yes”或者“no”
我们将“no”修改为“yes”
点击下一步,发现,跳转到了设置新密码功能,输入新的密码,并登录,发现登录成功
越权漏洞,越权又可分为平行越权(相同用户)、垂直越权(低权限用户和高权限用户)、未授权访问(无需用户直接操作),我们看两个实例,平行越权和垂直越权。
1.4.4 平行越权
登录普通用户test2,查看用户敏感的页面
发送到repteater数据包中,看到cookie中存在username参数,修改为已存在的用户名,发现返回包中可查看其他用户敏感信息
1.4.5 垂直越权
在管理员中可创建普通权限用户,发现test用户为编辑用户
使用test用户登录,发现和admin用户有很大差别
抓取admin管理员修改test用户数据包,将该数据包在test用户浏览器进行访问
在test用户下访问,可访问,并且可修改,但所属组只允许修改为edit、publicer、member
在test用户下修改当前用户权限,level共分5个级别,1为管理员权限
将level值改为1
成功修改test用户权限
使用test登录,发现可操作功能已改变,说明普通用户可越权操作
修补建议
利用IP次数访问限制,如果一个IP频繁访问一个页面,如找回密码等功能,可以IP进行访问限制。
验证码识别防护,增加一些语音验证码,特殊字体验证码,拼图下拉验证码,需要人手动操作的验证码,短信验证码一分钟只能获取一次验证码。验证码的生效时间安全限制,无论验证码是否正确都要一分钟后就过期,不能再用。所有的用户登录以及注册,都要与后端服务器进行交互,包括数据库服务器。