转载声明:文章来源:https://blog.csdn.net/qq_51577576/article/details/128124416
1、什么是逻辑漏洞?
1、所有Web应用程序各种功能都是通过代码逻辑实现。任何Web应用程序,都可能存在大量逻辑操作,这些逻辑就是一个复杂的攻击面。
2、由于逻辑漏洞攻击特征不明显,许多自动化的扫描工具或者代码审计工具,都只能扫出类似SQL注入、XSS等常规的漏洞,难以发现逻辑漏洞。
3、如果开发人员只考虑了常规的操作流程(如在A情况下,就会出现B,此时执行C),而没有考虑当用户执行了意料之外的X时会发生什么。这种对于异常情况的欠考虑,最终导致了逻辑漏洞的产生。
2、逻辑漏洞主要产生的位置有哪些?
1.登录处
2.业务办理处
3.验证码处
4.支付处
5.密码找回处
3、登录处存在的逻辑漏洞有哪些?
1.可以暴力破解用户名或密码
没有验证码机制,没有根据用户名限制失败次数,没有根据ip限制失败次数等等。
1.通常思路:
直接拿密码字典爆破某一个用户名。
拿固定的弱口令密码,去跑topxxx的用户名。
如果只是用户名限制失败次数,可以使用思路2的方法。
在存在返回提示用户名错误或者密码错误的情况下,可以分别爆用户名和密码。
2.常见限制:
有时候会发现用户名或者密码是密文加密,这时可能是通过前端或者其他方式加密,对于简单的来说base64编码和md5的签名是很好识破的,在爆破的时候可以选择encode和hash。
2.session没有清空
登出后服务器端的session内容没有清除,因此客户端重新带回登出前的session,也能够达到重新登录。
通常思路:
在登录退出后,拿退出前的session,重新访问需要登录的界面。
4、业务办理处存在的逻辑漏洞有哪些?
1、水平越权
通常说的越权一般是修改get或者post参数,导致的查看到他人的业务信息,一般看订单处,个人信息处等位置的参数。
通常思路:
拿2个账号,修改账号1的get或post参数给账号2。
2、篡改手机号
在需要手机号的短信验证处,抓包修改手机号,可能做到非本账号手机号获取能够编辑本账号的验证码。
通常思路:
抓包,查看get或者post参数存在手机号的地方,进行修改。
5、验证码处存在的逻辑漏洞有哪些?
1.登录验证码未刷新
没有清空session中的验证码信息。
通常思路:
1.抓包多次重放,看结果是否会返回验证码错误,如没有返回验证码错误则存在未刷新
2.观察检验的处理业务,如果验证码和用户名密码是分2次http请求校验,则也可以爆破用户名和验证码。
2.手机或邮箱验证码可爆破
没有对应的手机号或邮箱,但如果验证码纯数字4,5位左右,没有次数校验,可以爆破
通常思路:
拿自己的手机号或邮箱先获取验证码查看验证码格式,之后多次提交错误的看是否有次数现在,没有就爆破。
3.手机或邮箱验证码回显到客户端
在发送给手机或者邮箱验证码时,会在response包中有验证码,因此不需要手机和邮箱就可以获取验证码。
通常思路:
发送验证码时抓包,看返回包。
4.修改response包绕过判定
在输入错误的验证码时会返回false之类的字段,如果修改response中的false为true,会识别为验证通过。
通常思路:
抓包,选择do intercept-> response to this request ,放包,抓到下一个包就是response的包,可以修改,重放。
5.验证码轰炸
在请求发送验证码的数据包中有字段控制验证码的发送,如请求包某字段true就是发送验证码,我们直接进行重放攻击。
通常思路:
抓取发送验证码的请求包,查找控制验证码发送的字段,放入重放攻击模块进行重放攻击。
防御措施:
有的只在前端验证,比如60s后才能重新发送短信验证码,但是后端没有验证,可以让他一直重发,耗尽他短信池的流量,一般用来做DDoS。
6、支付处存在的逻辑漏洞有哪些?
1.修改商品编号
如果业务是通过商品编号来判断价格的话,可能存在只修改A商品编号为B商品编号,做到以A商品的价格购买B商品
通常思路:
先准备2个商品的编号,将其中一个改为另一个
条件竞争
通过条件竞争使余额达到负数,从而买多个商品
通常思路:
支付处,多线程请求付款确认,结果如果余额为负数,则存在该漏洞
2.金额修改
金额直接写在了post或者get请求中,对其进行修改达到修改了商品金额的效果
通常思路:
抓包修改金额的字段
3.商品数量修改
在购买时,如果一个商品为负数,那么它的价格则会是负数,如果购买多种商品,将其中一个设为负数,降低整体的价格
通常思路:
购物车里选取多个商品,修改其中一个商品的数量,在购买后查看最终的价格
4.通过前端限制限购商品
有些商品限购1个,但是判定是通过前端,因此可以抓包后修改数量
通常思路:
抓取限购数量内的包,抓取后修改个数,重放
5.充值中放弃订单未失效
在充值中选取大额充值订单,放弃订单,获得订单号,之后充值小额订单,拿到充值成功的界面,将订单号修改为放弃的大额订单,观察是否成功
通常思路:
看看充值的时候是否有订单号字段,如果有在成功界面修改为未支付的订单号,观察充值是否成功
7、密码找回处的逻辑漏洞有哪些?
1.验证码处的逻辑漏洞
1.登录验证码未刷新
2.手机或邮箱验证码可爆破
3.手机或邮箱验证码回显到客户端
4.修改response包绕过判定
2.修改发送的验证的目标为攻击者的邮箱或手机
在找回密码处,如果字段带上用户名,校验的邮箱或者手机号,将邮箱或者手机号改为自己的,如果自己的能够收到验证码并重置密码,则该漏洞存在
通常思路:
抓包,注意找回密码流程中的邮箱号或者手机号字段,修改其为自己即可
3.session覆盖
已知A的手机号,不知B的手机号,找回A的密码,输入验证码后到了设置新密码设置界面。这时在同一浏览器下重开窗口找回B的密码,获取验证码,刷新A设置新密码的页面,如果此时修改的是B账号的密码,则存在漏洞
通常思路:
准备2个账号,测试步骤如上所述
在邮箱收到找回密码连接时,依然可以使用该思路
4.弱token爆破
有些时候通过找回密码的时候填邮箱,邮箱此时会收到一个带有token的链接,点击链接就能跳转到重置密码的页面,如果token是base64,时间戳,位数较低的随机数则可以爆破
通常思路:
正常找回流程获取重置密码的url,了解token的规则后,爆破其他邮箱的重置密码url
5.密码找回流程绕过
在找回密码处,一般会有三个步骤页面,页面1找回用户的填写,页面2找回时的手机号短信验证码填写,页面3填写新密码,如果填好页面1,直接访问页面3能够重设密码的话,则会存在该漏洞
通常思路:
在设置好找回用户后,直接访问重设密码的url页面
8、如何避免逻辑漏洞的产生?
在系统生命周期里引入威胁建模避免逻辑漏洞的产生。引入威胁建模的好处如下:
1.进行安全设计。
2.更充分的对资源进行调研;更合理的对于安全、开发以及其他任务排定优先级。
3.将安全和开发结合到一起,更好的互相理解以及构建系统
4.确定威胁和兼容性的需求,并且评估它们的风险。
5.定义和构建需求控制。
6.平衡风险、控制和易用性。
7.基于可接受的风险,确定哪块的控制是不需要的。
8.文档化威胁和缓解措施。
9.确保业务需求(或目标)在面对恶意参与者、事故或其他影响因素时得到充分保护。
10.定义安全测试用例来验证安全方面的需求。
9、如何修复逻辑漏洞?
1.代码层面进行修复,完善逻辑,消除逻辑漏洞。
2.做过滤器,执行操作时对权限进行全局校验(每次调用某个接口时,可先对权限进行校验)。
10、什么是越权漏洞?
1、越权漏洞实际上是一种很常见的逻辑漏洞。
2、是由于服务器端对客户提出的数据操作请求过分信任,忽略了对该用户操作权限的判定,导致修改相关参数就可以拥有了其他账户的增、删、查、改功能,从而导致越权漏洞。简单来说就是权限校验的逻辑不够严谨。
3、每个应用系统其权限是根据其业务功能划分的,而每个企业的业务又都是不一样的
因此越权漏洞很难通过扫描工具发现出来(特征不明显),往往需要通过手动进行测试
11、越权漏洞可以分为几类?
1.根据数据库分类
根据对数据库的操作进行分类,可以分为以下几类:
越权查询、越权删除、越权修改、越权添加。
2.根据维度进行分类
根据维度进行分类,可分为:平行越权、垂直越权、交叉越权。
平行越权:
权限类型不变,权限ID改变。
例如ab属于同一级别的用户,但是彼此不能操作对方的个人信息,A越权操作b的个人信息的情况就称之为水平越权。
垂直越权:
权限ID不变,权限类型改变。
例如低权限a和高权限b两个用户,A越权成为和b同级别的用户,称之为垂直越权。
交叉越权:
权限类型改变,权限ID也改变。
例如低权限a和高权限b两个用户,A越权操作成为b的情况就称之为交叉越权。
3.特例
未授权访问:
本来没有账号(即没有某个功能权限),但是通过越权操作,获取了某个功能权限;
最简单直接的测试方法是:不登录用户账号,直接访问要测试的功能模块(正常情况是需要登录才能访问),如果能正常访问,则说明存在漏洞。
12、常见的未授权访问漏洞有哪些?
1.Active MQ 未授权访问
2.Atlassian Crowd 未授权访问
3.CouchDB 未授权访问
4.Docker 未授权访问
5.Dubbo 未授权访问
6.Druid 未授权访问
7.Elasticsearch 未授权访问
8.FTP 未授权访问
9.Hadoop 未授权访问
10. JBoss 未授权访问
11.Jenkins 未授权访问
12.Jupyter Notebook 未授权访问
13.Kibana 未授权访问
14.Kubernetes Api Server 未授权访问
15.LDAP 未授权访问
16.MongoDB 未授权访问
17.Memcached 未授权访问
18.NFS 未授权访问
19.Rsync 未授权访问
20.Redis 未授权访问
21.RabbitMQ 未授权访问
22.Solr 未授权访问
23.Spring Boot Actuator 未授权访问
24.Spark 未授权访问
25.VNC 未授权访问
26.Weblogic 未授权访问
27.ZooKeeper 未授权访问
28.Zabbix 未授权访问
13、如何检测水平越权漏洞?
1、登陆自己的账号;
2、执行敏感操作,比如说修改手机号;
3、抓取刚刚的数据包,修改数据包中的id信息,进行重放攻击;
4、如果重放攻击攻击的id手机号被修改了;那么就存在水平越权漏洞。
14、如何检测垂直越权漏洞?
1、首先我们登录一个超级管理用的账号;
2、执行一个特殊权限,比如说只有超级管理员可以新建账号,那我们就新建一个账号;
3、执行时,我们把新增账号这个数据包抓下来;
4、抓下来之后我们退出超级管理员,登录普通用户;
5、把刚刚抓取到的数据包用普通管理管的身份去进行一次重放;
6、如果新建用户成功,也就是说用普通管理员的权限去进行了一次只有超级管理员才能进行的操作如果说这个操作成功就意味着后台存在垂直越权漏洞。