鉴源实验室 | 系统逻辑漏洞挖掘实践

2023-09-20 17:07:08

作者 | 林海文 上海控安可信软件创新研究院汽车网络安全组

来源 | 鉴源实验室

社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区”

01

前 言

当谈及安全测试时,逻辑漏洞挖掘一直是一个备受关注的话题,它与传统的安全漏洞(如SQL注入、XSS、CSRF)不同,无法通过WAF、杀软等安全系统的简单扫描来检测和解决。这类漏洞往往涉及到权限控制和校验方面的设计问题,通常在系统开发阶段未充分考虑相关功能的安全性。

举例来说,攻击者可以利用这些逻辑漏洞,通过利用程序员在设计中的疏忽,实施交易数据篡改、敏感信息盗取以及资产窃取等操作。这种类型的漏洞潜在危害极大,可能导致企业遭受资产损失和声誉受损的风险,而传统的安全防御设备和措施往往无法有效应对这些问题,显得力不从心。

02

挖掘思路总结(部分)

当提到逻辑漏洞时,有各种各样的漏洞类型。其中,账户、验证码、越权这三个模块是最常见且相对较容易被攻击的部分。下面,我们可以看一下这三个模块中常见的挖洞姿势。

9201.jpg

03

一些挖掘实例

3.1 验证码

3.1.1 修改返回包绕过

这种方法基于返回的状态码来验证用户凭证的正确性,通常情况下,正确的验证码返回状态码为1,错误则为0。因此,攻击者可以通过抓取响应包,并将错误的状态码修改为1,从而成功绕过验证。

找到系统登录界面修改账户密码的地方,采用邮箱修改密码;选择发送验证码后,随机输入一串验证码,发送数据,然后抓包。请求包如下:

9202.png

9203.png

再拦截一下响应包。如下图,可以直接看到“data:false”进行了一个判断。修改false为true后放包:

9204.png

成功绕过,直接跳转到修改密码处:

9205.png

填入新的密码,点击确认,修改成功。

9206.png

3.1.2 验证码传递特殊参数绕过

验证码安全控制的失效问题。通常,常见的系统安全措施包括设置6位数验证码,有效期为30分钟或更短,验证失败6次后验证码会直接失效。然而,有些系统采用标志位来控制验证码的状态和生命周期。当标志位为1时,系统将验证码标记为失效,用户无法再使用该验证码来修改密码;而当标志位为0时,系统将验证码标记为有效,用户可以继续完成密码修改流程。

同样的,在个人中心处发现存在修改密码的功能点,仍旧是通过邮箱重置密码。点击“获取验证码”:

9207.png

等待6分钟后输入正确的验证码并抓包(此处6分钟为验证码过期时间),响应报文提示验证码已经失效。请求及响应包如下:

9208.png

将此处sourceFlag标注为u从1修改为0,发送报文,看到右侧响应,成功绕过时效性以及错误次数的限制:

9209.png

3.2 账户

3.2.1 遍历猜解已有账号

这种漏洞可能存在于用户注册、密码重置或验证码验证流程中。在注册过程中,如果系统内部已存在相同账户,通常无法成功注册。对于密码重置策略不够安全的网站,比如允许用户通过相对简单的信息(如用户名、电子邮件地址或手机号码)来重置密码,攻击者可以通过遍历或猜测这些信息来找到有效的用户账号。此外,如果网站在验证码验证过程中没有足够的限制或防护机制,攻击者可以尝试多次提交验证码,通过遍历可能的验证码值来找到有效的组合。

同样的,在个人中心处发现存在修改密码的功能点,仍旧是通过邮箱重置密码。点击“获取验证码”:

91013.png

等待6分钟后输入正确的验证码并抓包(此处6分钟为验证码过期时间),响应报文提示验证码已经失效。请求及响应包如下:

92011.png

修改email为不存在的用户邮箱,发送报文得到response,提示当前用户不存在。那么可以采用常见用户遍历的方式进行猜解:

92012.png

3.3 越权

3.3.1 越权修改账户密码

网站未能有效验证和控制用户在修改邮箱地址时的权限。攻击者可以绕过身份验证,访问其他用户的邮箱地址修改页面,并进行未经授权的邮箱地址修改。这表明在系统设计阶段可能没有进行全面的用户身份验证,或者存在身份验证方面的漏洞,因此可能导致任意账户密码的重置。

在个人中心修改账户密码的地方,采用邮箱修改密码;选择发送验证码后,输入正确的验证码,点击下一步,成功验证进到修改新密码这一步。

92013.png

92014.png

输入新密码,发送数据,然后抓包。请求包如下:

92015.png

修改email地址为admin@*.com(admin用户的id),将拦截到的报文给发送出去:

92016.png

成功修改admin账户的密码:

92020.png

使用admin用户的新密码登录成功:

92021.png

3.3.2 越权修改其他用户密码

在正常情况下,当用户试图修改他们自己的密码时,系统应该首先验证用户的身份,以确保他们有权访问和修改他们自己的帐户信息。身份验证通常包括要求用户提供当前密码或其他身份验证凭证。然而,在某些情况下,系统未充分执行身份验证检查,例如将 "id" 参数设置为目标用户的帐户标识。这使得攻击者可以通过篡改请求中的 "id" 参数来伪装成其他用户的帐户,而无需提供正确的身份验证凭证。

利用已知账户登录进系统,选择更改登录口令功能,修改新口令点击确定,抓包如下:

92022.png

burp拦截报文,可发现它的Id字段可控:

92023.png

修改id为2,根据服务器回应的报文,成功篡改id为2的用户的密码:

92024.png

3.3.3 越权登陆

通常情况下,登录过程应依赖于用户提供的凭据,例如用户名和密码。然而,在某些系统中,存在由客户端提供的参数,如certSn,用于标识用户会话。攻击者可以修改certSn参数以绕过授权检查,导致服务器未能正确验证会话是否属于请求的用户。这种漏洞使得攻击者能够手动修改certSn的数值,从而进行账户猜解攻击。

插入一张key(非RA管理员),点击登录,抓包如下:

92025.png

观察到其存在Certsn参数:

92026.png

可增加或者减小当前数值来修改该参数,成功登录RA管理员账号:

92027.png

92028.png

更多推荐

区域气象-大气化学在线耦合模式(WRF/Chem)在大气环境领域实践技术应用

随着我国经济快速发展,我国面临着日益严重的大气污染问题。近年来,严重的大气污染问题已经明显影响国计民生,引起政府、学界和人们越来越多的关注。大气污染是工农业生产、生活、交通、城市化等方面人为活动的综合结果,同时气象因素是控制大气污染的关键自然因素。大气污染问题既是局部、当地的,也是区域的,甚至是全球的。本地的污染物排放

icmp报文及用go实现

目录一、概述二、ICMP报文格式详解2.1什么是ICMP2.2ICMP报文格式2.3ICMP报文类型2.4实际报文举例三、使用go实现icmp请求以及接收响应内容一、概述本文主要旨在学习icmp报文格式,以及通过go语言来实现ICMP发包。二、ICMP报文格式详解2.1什么是ICMP因特网控制报文协议ICMP(Inte

Vue入门

目录Vue简介Vue是什么有什么用Vue的特点Vue的入门案列下载地址:放代码BootCDN案例一,入门使用vue的语法写一个显示到浏览器案例二:实现点击显示案例三:实现输入显示案例四:实现弹窗效果Vue生命周期​编辑Vue的生命周期及用途@Vue简介Vue是什么JavaVue是一种将Java和Vue.js框架结合在一

数据结构--二叉树-堆(1)

文章目录树概念相关的基本概念树的表示二叉树概念特殊二叉树性质堆二叉树的顺序结构堆的概念堆的实现初始化数组初始化为堆向上调整向下调整插入删除打印、摧毁、判空、获取堆顶数据验证堆的应用堆排序TopK问题树概念树是一种常见的非线性的数据结构,,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来

公众号自定义mac命令行代码风格样式

一直看别人的公众号发的文章的代码排版是这样的风格:mac命令行风格样式看着很有逼格的样子,今天也尝试学习写了一下没想到成功了记录一下首先感谢一个网站:http://md.aclickall.com/一个专门让程序员写技术文章排版用的我这个样式就是基于大佬们的模版改了一些自己想要的样式网站打开是这样的:我这里用的是dar

LeetCode 847. Shortest Path Visiting All Nodes【状态压缩,BFS;动态规划,最短路】2200

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章中,我不仅会讲解多种解题思路及其优化,还会用多种编程语言实现题解,涉及

【Python】使用 pyecharts 模块绘制动态时间线柱状图 ① ( 列表排序 | 使用 sorted 函数对容器进行排序 | 使用 list.sort 函数对列表进行排序 | 设置排序函数 )

文章目录一、列表排序1、使用sorted函数对容器进行排序2、使用list.sort函数对列表进行排序3、使用list.sort函数对列表进行排序-设置排序函数4、使用list.sort函数对列表进行排序-设置lambda匿名排序函数pyecharts画廊网站:https://gallery.pyecharts.org

健康云HIS系统源码,满足基层医疗机构业务需求,提供挂号支持、病患问诊、电子病历、开药发药、会员管理、统计查询、医生站和护士站等功能

云his系统源码二级医院HIS系统全套源代码自主研发,自主版权一款满足基层医疗机构各类业务需要的健康云HIS系统。该系统能帮助基层医疗机构完成日常各类业务,提供病患挂号支持、病患问诊、电子病历、开药发药、会员管理、统计查询、医生站和护士站等一系列常规功能,能与公卫、PACS等各类外部系统融合,实现多层机构之间的融合管理

怎样定制开发小程序微商城_流程_报价_OctShop

互联网和5G的快速发展,变化速度1天比1天快了,小程序微商城的开发也这在浪潮中得到了蓬勃发展,小程序微商城在我们的生活当中已经非常普通了,很多人通过扫描小程序微商城二维码,进入小程序微商城进行购物。随着互联网与5G的发展,很多企业或商家通过微信生态,如:微信群,朋友圈等来发展自己企业的业务。如果我们想通过朋友圈或微信群

Redis代码实践总结

一、背景:redis从安装到实践,做一些具体的记录。1.1Redis和RedisStack和RedisEnterpriseredis简介Redis是一种开源(BSD许可)内存中数据结构存储,用作数据库、缓存、消息代理和流引擎。Redis提供数据结构,例如字符串、散列、列表、集合、带范围查询的排序集、位图、超级日志、地理

别再盯着40系,这些才是目前性价比最高的显卡

有人说,当前畸形的显卡市场成了咱们升级电脑配置的最大阻碍。在小忆看来这话说得还真没啥毛病!CPU、主板、内存、硬盘、电源,哪个不是一台电脑中的重要核心硬件;它们飘了吗?没有,各个品牌在竞争中相互制约,价格呢也都维持在一个相对合理的状态。唯独显卡领域,NVIDIA独领风骚,彻底掌控定价权。RTX40系列疯狂挤牙膏价格不降

热文推荐