Web安全测试中常见逻辑漏洞解析(实战篇)

前言:

越权漏洞是比较常见的漏洞类型,越权漏洞可以理解为,一个正常的用户A通常只能够对自己的一些信息进行增删改查,但是由于程序员的一时疏忽,对信息进行增删改查的时候没有进行一个判断,判断所需要操作的信息是否属于对应的用户,导致用户A可以操作其他人的信息。​

逻辑漏洞挖掘一直是安全测试中“经久不衰”的话题。相比SQL注入、XSS漏洞等传统安全漏洞,现在的攻击者更倾向于利用业务逻辑层的应用安全问题,这类问题往往危害巨大,可能造成了企业的资产损失和名誉受损,并且传统的安全防御设备和措施收效甚微。Web安全测试中逻辑漏洞的挖掘经验:

一:订单金额任意修改

解析

很多中小型的购物网站都存在【订单金额任意修改】漏洞。在提交订单的时候抓取数据包或者直接修改前端代码,然后对订单的金额任意修改。

如下图所示:

经常见到的参数大多为:

rmb 、value 、amount 、cash 、fee 、money 等

关于支付的逻辑漏洞这一块还有很多种思路,比如相同价格增加订单数量,相同订单数量减少产品价格,订单价格设定为负数等等。

预防思路

1.订单需要多重较验,如下图所演示:

2. 订单数值较大时需要人工审核订单信息,如下图所演示。

二:验证码回传

解析

这个漏洞主要是发生在前端验证处,并且经常发生的位置在于

账号密码找回 、账号注册 、支付订单等

验证码主要发送途径

邮箱邮件 、手机短信

其运行机制如下图所示:

黑客只需要抓取Response数据包便知道验证码是多少。

预防思路

1.response数据内不包含验证码,验证方式主要采取后端验证,但是缺点是服务器的运算压力也会随之增加。

2.如果要进行前端验证的话也可以,但是需要进行加密。当然,这个流程图还有一些安全缺陷,需要根据公司业务的不同而进行更改。

三.未进行登陆凭证验证

解析

有些业务的接口,因为缺少了对用户的登陆凭证的较验或者是验证存在缺陷,导致黑客可以未经授权访问这些敏感信息甚至是越权操作。

常见案例:

1. 某电商后台主页面,直接在管理员web路径后面输入main.php之类的即可进入。

2. 某航空公司订单ID枚举

3. 某电子认证中心敏感文件下载

4.某站越权操作及缺陷,其主要原因是没对ID参数做cookie验证导致。

5. 实际上还有很多案例,他们都存在一个共同的特性,就是没有对用户的登陆凭证进行效验,如下图为例。

预防思路

对敏感数据存在的接口和页面做cookie,ssid,token或者其它验证,如下图所示。

四:接口无限制枚举

解析

有些关键性的接口因为没有做验证或者其它预防机制,容易遭到枚举攻击。

常见案例:

1. 某电商登陆接口无验证导致撞库

2. 某招聘网验证码无限制枚举

3. 某快递公司优惠券枚举

 

4. 某电商会员卡卡号枚举

5. 某超市注册用户信息获取

预防思路

1. 在输入接口设置验证,如token,验证码等。

如果设定验证码,最好不要单纯的采取一个前端验证,最好选择后端验证。

如果设定token,请确保每个token只能采用一次,并且对token设定时间参数。

2. 注册界面的接口不要返回太多敏感信息,以防遭到黑客制作枚举字典。

3. 验证码请不要以短数字来验证,最好是以字母加数字进行组合,并且验证码需要设定时间期限。

4. 优惠券,VIP卡号请尽量不要存在规律性和简短性,并且优惠券最好是以数字加字母进行组合。

等。

五:cookie设计存在缺陷

解析

这里需要对其详细的说一下。我们先一个一个来吧。

Cookie的效验值过于简单。有些web对于cookie的生成过于单一或者简单,导致黑客可以对cookie的效验值进行一个枚举,如下图所示

根据上图,我们可以分析出,这家网站对于cookie的较验只单纯的采用了一组数字,并且数值为常量,不会改变,这样非常容易遭到黑客的枚举。甚至有一些网站做的更简单,直接以用户名,邮箱号或者用户ID等来作为cookie的判断标准。

2. cookie设置存在被盗风险

有很多时候,如果一个用户的cookie被盗取,就算用户怎么修改账号和密码,那段cookie一样有效。

其原理如下:

国内大部分厂商都不会把这个地方当作安全漏洞来处理,他们认为这个漏洞的利用条件是黑客必须要大批量获取到用户的cookie。虽然事实如此,但是这个也是一个安全隐患。

3.用户的cookie数据加密应严格使用标准加密算法,并注意密钥管理。

有一些厂商为了图方便,没有对用户的cookie做太多的加密工作,仅仅是单纯的做一个静态加密就完事了。案例描述:

 

cookie中有个access token参数,看到value后面是两个等号,习惯性的给丢去base64解码里面,发现解出来后是我的用户名。因此只要知道一个人的用户名就可以伪造对方的cookie,登陆他人账户。

4.还有多个案例不再做重复说明,大家可以深入研究一下cookie中的逻辑漏洞。但是cookie中的漏洞大多都是属于一个越权漏洞越权漏洞又分为平行越权,垂直越权和交叉越权

平行越权:权限类型不变,权限ID改变

垂直越权:权限ID不变,权限类型改变

交叉越权:即改变ID,也改变权限

如下图所示:

预防思路

1.cookie中设定多个验证,比如自如APP的cookie中,需要sign和ssid两个参数配对,才能返回数据。

2.用户的cookie数据加密应严格使用标准加密算法,并注意密钥管理。

3.用户的cookie的生成过程中最好带入用户的密码,一旦密码改变,cookie的值也会改变。

4.cookie中设定session参数,以防cookie可以长时间生效。

六:找回密码存在设计缺陷

解析

1.auth设计缺陷

经常研究逻辑漏洞的人可能会对以下URL很熟悉

www.xxx.com/resetpassword.php?id=MD5

用户修改密码时,邮箱中会收到一个含有auth的链接,在有效期内用户点击链接,即可进入重置密码环节。而大部分网站对于auth的生成都是采用rand()函数,那么这里就存在一个问题了,Windows环境下rand()最大值为32768所以这个auth的值是可以被枚举的

如下面这个代码可以对auth的值做一个字典。

然后重置某个账号,并且对重置链接内的auth进行枚举

整个漏洞的运作的流程图如下:

2.对response做验证

这个漏洞经常出现在APP中,其主要原因是对于重置密码的的验证是看response数据包,由于之前的案例没有截图,只能画个流程图给大家演示一下。

预防思路

1.严格使用标准加密算法,并注意密钥管理。

2.在重置密码的链接上请带入多个安全的验证参数。

七:单纯读取内存值数据来当作用户凭证

解析

实际上这个应该算作一个软件的漏洞,但是因为和web服务器相关,所以也当作WEB的逻辑漏洞来处理了。最能当作例子是《腾讯QQ存在高危漏洞可读取并下载任意用户离线文件(泄漏敏感信息)》这个漏洞,但是我相信这种奇葩的漏洞不一定只有腾讯才有,只是还没人去检测罢了。

产生这个漏洞的主要原因是程序在确定一个用户的登陆凭证的时候主要是依靠内存值中的某个value来进行确认,而不是cookie。但是内存值是可以更改和查看的。其流程图如下:

预防思路

1. 走服务器端的数据最好做cookie验证。

2. 我不反对直接在进程中确定用户的登陆凭证,但是请对进程进行保护,或者对进程中的value做加密处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/31560.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

leetcode188. 买卖股票的最佳时机 IV.动态规划-java

买卖股票的最佳时机 IV leetcode188. 买卖股票的最佳时机 IV题目描述 动态规划代码演示 动态规划专题 leetcode188. 买卖股票的最佳时机 IV 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-st…

从零构建后端项目-创建SpringBoot项目配置MyBatis

目录 主体介绍 创建SpringBoot项目主要步骤 配置MyBatis 整合高级功能 创建SpringBoot项目 配置Tomcat 配置MySQL数据源 配置Redis数据源 配置MongoDB数据源 运行项目,检测配置 配置MyBatis 创建IDEA数据库连接 生成MyBatis各种文件 配置MyBatis 配…

自然语言处理从入门到应用——静态词向量预训练模型:神经网络语言模型(Neural Network Language Model)

分类目录:《自然语言处理从入门到应用》总目录 《自然语言处理从入门到应用——自然语言处理的语言模型(Language Model,LM)》中介绍了语言模型的基本概念,以及经典的基于离散符号表示的N元语言模型(N-gram…

【Redis基础】

Redis基础 Redis基础Note Redis基础1.初识Redis1.1.认识NoSQL1.1.1.结构化与非结构化1.1.2.关联和非关联1.1.3.查询方式1.1.4.事务1.1.5.总结 1.2.认识Redis1.3.安装Redis1.3.1.依赖库1.3.2.上传安装包并解压1.3.3.启动1.3.4.默认启动1.3.5.指定配置启动1.3.6.开机自启1.3.7.wi…

Win7系统提示Windows Defender无法扫描选定的文件解决方法

Win7 64位系统提示“Windows Defender无法扫描选定的文件”怎么办呢?使用Windows Defender扫描文件,结果弹出如下图窗口,该怎么解决呢,参考下文,一起来解决Win7系统提示“Windows Defender无法扫描选定的文件”的解决方法。 原因分析: 这是因为开启Defender扫描压…

rabbitmq第三课-RabbitMQ高级功能详解以及常用插件实战

一、选择合适的队列. 实际上是可以选择三种队列类型的,classic经典队列,Quorum仲裁队列,Stream流式队列。 后面这两种队列也是RabbitMQ在最近的几个大的版本中推出的新的队列类型。3.8.x推出了Quorum仲裁队列,3.9.x推出了Stream流…

计算机网络基础知识(九)—— 什么是TelnetS?Telnet Over TLS

文章目录 01 | TelnetS02 | OpenSSL03 | 实现思路服务器处理流程客户端处理流程 04 | 代码实现服务端代码客户端代码编译过程 & 执行结果 前面学习了什么是HTTPS协议,了解了HTTPS的工作原理以及具体的工作流程,了解了HTTP协议和HTTPS协议之间的区别。…

Elasticsearch 安装(Linux)

ElasticSearch 概念安装安装es 后台启动 & 停止启动nohup 记录pid 停止 其他启动错误max number of threads内存不足 Cannot allocate memoryfailed to obtain node locks 概念 ES是一款分布式全文搜索引擎,基于Lucene,进行了二次封装,更…

ElasticSearch-安装Head可视化插件

安装Head可视化插件 首先需要依赖node.js和npm环境 1 安装node.js 官方下载地址:http://nodejs.cn/download/ 下载LTS版本(长期稳定版本) 安装可以更改安装路径,其余的都是选择 下一步傻瓜是安装 安装成功后如下 命令测试 node -v 查看node的版本 n…

Redis 2023面试5题(二)

一、Redis key没设置过期时间却被redis主动删除了 如果一个 Redis 键没有设置过期时间,那么 Redis 无法判断该键是否应该自动删除。因此,如果一个没有设置过期时间的键被 Redis 主动删除了,可能是以下原因之一: 内存不足&#x…

【论文笔记】BEIT:BERT PRE-TRAINING OF IMAGE TRANSFORMERS

GitHub 1.介绍 1.1 挑战 视觉转换器的输入单元,即图像补丁,没有预先存在的词汇。预测遮罩面片的原始像素往往会在预训练短程依赖性和高频细节上浪费建模能力 1.2 回顾一下Bert的基本架构和流程 输入编码:通过tokenizer将输入的文本中的每…

OceanBase—01(入门篇——使用docker安装OceanBase以及介绍连接OB的几种方式)

OceanBase—01(入门篇——使用docker安装OceanBase以及介绍连接OB的几种方式) 1. 前言1.1 安装部署参考1.1.1 安装前提1.1.2 参考 1.1 修改数据库用户名密码1.2 总结常见连接命令 2. 安装部署OceanBase2.1 启动 OceanBase 数据库实例2.1.1 拉取镜像并启动…

eclipse (C/C++) 常用设置记录

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台;现公司用其作为开发单片机的IDE;因此记录一下常用的配置方法; 文章目录 零、常用默认快捷键一、高亮相同变量二、修改高亮变量颜色三、在整个工程内搜索某个函数四、切换主题五、改变字…

编译原理笔记16:自下而上语法分析(3)构造 DFA、DFA 对下一步分析的指导(有效项目)

目录 由 NFA 用子集法构造 DFA由 LR(0) 项目直接构造识别活前缀的 DFA构造 DFA求拓广文法 GCLOSURE & GO例: 构造 DFA DFA 指导下一步分析有效项目 看了前面的内容,我们已经了解到:分析表和驱动器算法,是 LR 分析器的核心。 …

基于Java+Swing+Mysql实现图书管理系统V2.0

基于JavaSwingMysql实现图书管理系统V2.0 一、系统介绍二、功能展示1.项目内容2.项目骨架3.数据库表4.主界面5.添加6、修改7、查询8、删除 四、其它1.其他系统实现五.获取源码 一、系统介绍 本系统主要有对图书信息的增删改查操作功能。 项目类型:Java SE项目&…

linux 下查看 USB 设备

文章目录 前言目录内容详解usb11-0:1.01-1.1:1.0 结构图设备信息bDeviceClassversionbusnum & devnumdevbMaxPoweridVendor & idProductproductmanufacturerbcdDevicespeedueventbmAttributesdrivers_autoprobe 前言 在 sysfs 文件系统下,查看 USB 设备&am…

Android 9-SystemUI:(1)启动流程

具体分析(以下代码示例,讲解,都是通过,Android9代码来举例) SystemUI,其实是可以看作是一个系统级的服务,也就是SystemUIService, SystemUI的服务启动,要从SystemServer.run()方法入手 main 方法里启动了…

企业级微服务架构实战项目--xx优选3-mq+nacos+es实现上下架

一 nacosmqes实现上下架 1.1 架构图 1.2 工程结构 1.3 核心代码流程 1.3.1 请求product模块 2.修改数据库,推送rabbitmq中 1.3.2 rabbitmq的工具类 1.3.3 search模块中rabbit客户端订阅信息 1.监听器监听信息 2.调用相应的上下架方法 2.1 调用product模块&…

Flink 学习三 Flink 流 process function API

Flink 学习三 Flink 流&process function API 1.Flink 多流操作 1.1.split 分流 (deprecated) 把一个数据流根据数据分成多个数据流 1.2 版本后移除 1.2.分流操作 (使用侧流输出) public class _02_SplitStream {public static void main(String[] args) throws Excep…

uniapp设置滚动条滚动到指定位置

场景:左侧菜单栏,每次切换时,需要右侧商品展示区保持滚动条及页面在最顶部 1.利用scroll-view 中scroll-top属性实现 1.1设置scrollToTop属性为0 data() {return {// 保证每次切换,滚动条位置都在最顶部scrollToTop: 0,}; } 1.…