20260314_113806_Web安全-业务逻辑漏洞常用技巧与实战案例汇总_挖洞技巧
跳过验证步骤、找回方式、直接到设置新密码页面(1)正常流程下,密码找回,查看最后设置新密码页面的 URL,记录下来。继续返回密码找回处,输入其他用户名,提交找回申请,直接访问上面记录下的修改密码页面,成功修改密码(2)正常流程下,修改密码页面抓包,修改其中的USERNAME_COOKIE为其他用户(有可能会经过编码,比如 base64),提交即可修改其他用户密码,如果抓包其中有 step 参数,可
Web安全-业务逻辑漏洞常用技巧与实战案例汇总|挖洞技巧
0x01 前言
逻辑漏洞是指在软件或系统的设计和实现中,由于逻辑错误或缺陷导致的安全问题。这些漏洞不是由于代码编写的错误引起的,而是由于系统设计时的逻辑思路有问题,导致系统在某些情况下无法正常处理,进而被攻击者利用。本文从身份认证、越权访问、数据篡改、密码重置、接口安全、JWT逻辑漏洞等多个维度,结合实战案例展示了攻击手法与修复策略。
0x02 漏洞详情
身份认证安全
(1)漏洞产生原因:有些网站对身份认证模块没有做好安全防护,因此导致漏洞产生
(2)绕过身份认证有以下几种方法:
暴力破解、撞库(以信息收集找到的凭证作为字典)
(3)暴力破解测试方法:在没有验证码限制或者一次验证码可以多次使用的地方,可以分为以下几种情况
爆破用户名。当输入的用户名不存在时,会显示请输入正确用户名,或者用户名不存在
基于这一块内容的练习,可以看靶场中有相关练习

(4)Cookie&Session类
Cookie:指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密),我们俗称为浏览器缓存

Cookie伪造: 通过修改 Cookie 中的某个参数来实现登录其他用户
(5)加密测试
概念:有些网站在前端加密,然后传到后台直接和数据库里的值做对比,这时抓包就知道加密方式,然后做暴力破解。

未授权访问/信息泄露
授权的概念:就是对特定资源的读写权限。简单的说,就是你的权限能让你做什么事情,而验证则表示是否真的可以对这些资源进行读写
未授权访问的概念:就是指用户在没有通过认证授权的情况下,能够直接访问需要通过认证才能访问到的页面或者文本信息
越权漏洞的产生:主要是用于开发人员在对数据进行操作时对客户端请求的数据过分相信而遗漏了权限的判断
越权漏洞常发生的位置:修改、重置、找回账户密码、查看、修改其他账户未公开的信息例如个人资料、文件、数据、程序等等,还有与账户关联的一些权限操作
案例:信息泄露

说明:点击预约记录并抓包,发现可以看到自己的预约信息及其他信息。这里的id推测为自己的用户id,将userAddrld和userld修改为被害者Id发送,发现修改成功
越权漏洞的分类:
水平越权:指相同权限的不同用户可以互相访问
举例:两个不同的班级的学生A和B,通过修改请求,A可以任意修改B的个人信息
垂直越权:指使用权限低的用户可以访问权限较高的用户
举例:同一个班级不同权限的老师和学生,通过修改请求,学生可以修改和查看老师的账号信息

同级别(权限)的用户或者同一角色的不同用户之间,可以越权访问、修改或者删除的非法操作,如果出现此漏洞,那么将可能会造成大批量数据泄露,严重的甚至会造成用户信息被恶意篡改。
案例:某系统任意用户密码修改漏洞

说明:通过修改密码处功能点进行抓包,修改其id值然后放包即可修改他人密码
案例:平平无奇越权漏洞
登录系统后点击查看自己的信息,获取到接口xxx/getDataSelf.do,查询出两条数据:

仔细分析接口后面的这个getDataSelf.do,其中self是自己的意思,那我把它删除会发生什么呢?

神奇地发现回显了716条数据,成功越权查看系统所有用户的数据。但查看这点数据顶多算个中低危漏洞,如果能删除修改就完美了。遂对getData.do中的getData进行fuzz:

发现remove.do接口提示缺少参数,猜测其就是删除数据的接口,再将我们在前面获取到的所有用户数据响应包中的id进行替换即可进行越权删除:

数据篡改
数据纂改分为两方面:业务一致性安全、业务数据安全

案例:商品编号纂改
步骤:提交订单时,抓包修改商品标号,导致商品与价格不符却交易成功
举例:例如100个积分只能换商品编号为001, 1000个积分只能换商品编号005, 在100积分换商品的时候抓包把换商品的编号修改为005, 用低积分换取高积分商品。
修复:金额不在客户端传入,防止被篡改,如必要,则务必检查交易金额与商品价格或对支付金额做签名校验
相关案例: 某积分商城支付漏洞
说明:通过抓包可以修改积分

案例:金额数据纂改
步骤: 在提交订单时进行抓包,修改支付的金额或折扣等相关数据。
修复: 商品信息如金额、折扣等原始数据校验应来自于服务器端,不应接受客户端传来的值。
相关案例: 某订单支付时的总价未验证漏洞
在支付流程中,可以修改支付价格的步骤有很多,包括订购、确认信息、付款等。在涉及到价格的步骤中都可以尝试修改,如果网站在某一环节存在逻辑上的漏洞,就可以利用该漏洞对支付价格进行修改。可以直接修改提交订单中的价格字段,一般可尝试0.01,1.00,1等

更改订单信息
服务端只检查支付是否完成,并没有确认订单金额与银行支付金额是否相同,过分信任客户端提交的数据。此时可以通过替换支付订单号、更换商品id的方式,来完成花少钱买更贵的东西。同时生成两个订单号,一个贵的一个便宜,首先支付便宜的,银行往回返回的时候,替换订单号,然后就可以完成两个订单的同时支付。
常见位置在生成订单、生成支付链接等。
修改商品编号直接在生成的订单中替换商品编号。

修改订单号将金额不同的订单进行替换,可以支付一个金额较少的订单,然后将订单号修改为金额较大的订单,少付实际金额。

越权使用他人优惠券、越权使用他人积分等
更改数量实现优惠支付
支付金额是由购买数量乘以商品单价决定的,这时我们在数据包中修改购买数量,将其修改为负数或者小数,如果站点后台对此没有进行过滤,就有可能存在支付漏洞。
将正常的数量值修改至最小值0.01,可以实现低价购买。比如:原价300修改修量为0.01后实付金额变为3。

未对负数做检验的还可以将数量改为负数。(这里需要注意,因为后端大部分会校验不允许实付金额小于0或者0.01等,所以有的时候要想实现订单成功生成需要结合实际修改价格)生成订单时有参数表示商品数量,修改为-1

修改数量为-1后会发现,此时金额为负数。

在提交订单支付的时候,为保证支付成功需要修改金额。

其他技巧:利用小数点精度四舍五入
0.019=0.02(比如充值0.019元,第三方支付截取到分也就是0.01元,但是系统四舍五入为0.02)。
案例:本地JS参数纂改
步骤: 部分应用程序通过Javascript处理用户提交的请求, 通过修改Javascript脚本,测试修改后的数据是否影响到用户。
修复:服务器校验;跨平台支付调用接口,要做好数据的完整性校验,确保一致性
案例:最大数限制突破
步骤:很多商品限制用户购买数量时,服务器仅在页面通过js脚本限制,没有在服务器端校验用户提交的数量,通过抓包修改商品最大数限制,将请求中的商品数量改为大于最大数限制的值,查看能否以修改后的数量完成业务流程。
修复: 每次提交都对其对应的各项信息做强校验
任意密码重置漏洞
概念:任意密码重置漏洞是系统设计缺陷,允许攻击者在未经授权的情况下更改其他用户的密码。
漏洞分析与常见场景:缺乏身份验证、不安全的重置链接、安全问题或验证码的缺陷以及会话固定攻击是任意密码重置漏洞的常见场景。
案例:管理系统任意密码修改漏洞

按提示输入收集到的信息继续往下走,这里的话,我们需要输入正确的邮箱地址先,不然后台的数据库中没有对应的邮箱地址,是不会发送验证码这一步的

可以看到返回包显示验证码不正确(废话,这是必然的),但是,我们又观察返回包似乎没有啥鉴权参数啥的
大胆尝试更改一下返回包的数据,修改数据包如下:
{“Succeed”:true,”Message”:””,”Data”:null}
只需要把后面数据简单修改成上面的样子,即可跳过验证码验证的环节,直接可以来到修改密码的步骤了

输入密码123456,提示不够复杂

但是这里也存在一个缺陷,就是只是前端校验了复杂性,后端并没有,比如我先输入一个符合规则的密码,然后点击抓包,直接修改数据包的密码为123都是可以的,应该不算漏洞,感觉没啥危害,提一嘴罢了这里

然后直接就可以登录系统成功啦

案例:验证码泄露
验证码返回凭证的三种形式:url返回凭证、抓包返回凭证、凭证在页面中
说明:进入重置密码页面,输入手机号,验证码,下一步,抓包,查看返回值。得到验证码信息

案例:验证码爆破
进入找回密码界面,输入需要找回的手机号进行验证,如果存在该手机号,则会向改手机号发送短信验证码进行验证
这里我们随便输入一个验证码然后抓包,然后对该验证码进行爆破,即可爆破出正确验证码

案例:邮箱弱token
获取邮箱弱token的方法:Unix时间戳 + md5
例如:
(1)通过邮箱找回密码,正常流程去邮箱查看重置密码链接,发现链接处有一串 md5 加密字符串。字符串解密,类似 1491293277(10位),可以判断为Unix时间戳。 重置他人密码只需利用他人邮箱发送重置密码邮件,在短时间内对Unix时间戳进行暴力破解,即可获得重置密码的链接。
(2)用户名,例如:重置密码链接直接使用用户名进行区别,改变用户名即可更改他人密码
(3)服务器时间,例如:利用两个帐号同时点击找回密码,去邮箱查看找回密码的链接,发现两者的随机 token 只差1-2,而且可以猜测出为服务器时间。所以可以用一个未知帐号和一个已知帐号同时点击找回密码,稍微遍历随机 token,就可以构造出未知帐号的密码找回链接

案例:跳过验证的方法介绍
跳过验证步骤、找回方式、直接到设置新密码页面
(1)正常流程下,密码找回,查看最后设置新密码页面的 URL,记录下来。继续返回密码找回处,输入其他用户名,提交找回申请,直接访问上面记录下的修改密码页面,成功修改密码
(2)正常流程下,修改密码页面抓包,修改其中的USERNAME_COOKIE为其他用户(有可能会经过编码,比如 base64),提交即可修改其他用户密码,如果抓包其中有 step 参数,可以修改这个参数为最后一步(比如:5),提交便可略过之前的步骤
说明:输入用户名,抓包,数据包中有step参数,将这个参数改为最后一步,step改为4即可,提交后便掠过之前所有的验证步骤,修改密码成功


接口调用安全
概念:接口也叫做API(Application Programming Interface—)翻译为“应用程序编程接口”,是一些预先定义的函数 目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节
接口调用安全的几种分类:
(1)重放攻击:在短信、邮件调用业务或生成业务数据环节中(类:短信验证码,邮件验证码,订单生成,评论提交等),对其业务环节进行调用(重放)测试 常见类型:短信轰炸、恶意注册
修复:
1.对评论提交等操作采用验证码机制,防止生成数据业务被恶意调用;
(2)内容编辑:
例如:点击获取短信验证码,抓包,可以修改短信内容,实施下一步攻击
修复:从客户端处获取手机号、邮箱等账号信息,要与Session中的凭证进行核验,验证通过后才允许进行业务操作。
(3)接口调用遍历漏洞:Web接口一般将常见的一些功能需求进行封装,通过传入不同的参数来获取对应的数据或者执行相应的功能,其中最常见的场景就是通过接口传入id参数,返回对应id的信息。此类接口如请求合法性校验不严,很容易出现非授权访问或者越权访问的问题。
修复:
1.在session中存储当前用户的凭证或者id,只有传入凭证或者id参数值与session中的一致才返回结果。
(4)接口未授权访问/调用漏洞:在正常的业务中,敏感功能的接口需要对访问者的身份进行验证,验证通过后才允许调用接口进行操作。接口未做身份验证或身份校验不严,可能导致非授权访问或越权调用
修复:
1.采用Token校验的方式,在url中添加一个Token参数,只有Token验证通过才返回接口数据且Token使用一次后失效;
接口测试思路
接口分类:目前接口(API)主要分为WEB接口、TCP接口、其他特定接口。2023年,OWASP 组织根据近几年安全攻击趋势,发布了OWASP top 10(2023),其中【A10-未受到充分保护的API】为新增的最新十大安全威胁之一。以下是常见的接口测试分类:(安全测试的角度来划分)

测试方式
Web API 测试主要参考常规web测试,使用burpsuite、fiddler、Firefox-hackbar插件等集成安全测试工具对API接口进行分析、测试。
Socket API测试使用SocketTool等socket数据包测试工具,以及开发接口的公司使用的专用测试工具或者自己编写的测试脚本进行分析、测试。
使用wireshark进行数据包流量分析。 其他接口测试(接近研究性质),主要使用wireshark、SocketTool、自主编写的测试(FUZZ)脚本等进行测试。
测试流程

JWT逻辑漏洞
置空鉴权字段不仅仅在登录口,在查询处,鉴权处都是很经典的思路如jwt置空加密字段,个人信息置空回显站点全部信息,最简单的思路往往能造成最致命的问题。
实战赏金案例:SRC高危JWT逻辑漏洞挖掘

进入站点简单熟悉一下业务,发现存在注册功能,未注册的账户会自动注册,登录注册均是同一接口(划重点)

正常bp抓包进行注册,接口
/xjky-server/xjky-biz-server/app/open/sms/registerAndLogin
记录了注册手机号及短信验证码以及一串不知道的tenantId,正确的验证码会返回Token,后续请求带上Token对用户进行身份信息认证
{

将此接口发送到重发器测试,置空验证码,同样成功请求并返回token,为了确认新生成的token是否为新号码,在此站点也测试了有一会,熟悉了业务,有一个接口可以通过token回显个人信息
替换后响应包返回loginId 对应的正是我尝试任意注册的号,那么此账号已经成功被注册

记录好187 号码所生成的token响应包,来到登录功能点,验证码随意输入,拦截响应包

替换响应内容为任意生成生成的token 而后一直放包

会登录到187账户,图片未截取完,不过已经是进入了187个人信息页面

当我测试完成任意注册后,发觉登录口和注册均是一套接口,只是未登录过的账号会自动注册
/xjky-server/xjky-biz-server/app/open/sms/registerAndLogin
任意用户注册攻击置空验证会产生token,那么如果是我拿到已登录的账户,在此登录口同样进行置空验证码操作,是否也会返回对应号码token呢
我正常注册了一位138账户进行模拟,省略过程,直接来到登录口进行测试,模拟攻击者不知道验证码的情况,随意输入然后拦截响应包

纯粹的置空让其不做校验然后放包

同我想的一样,只要置空验证就可以绕过登录验证,直接根据号码生成token,直接任意用户登录接管账户,又可以吃N顿馒头了

0x03 总结
逻辑漏洞目前来说还是非常多的,由于系统设计中安全思维缺失的缺失。攻击者常通过流程绕过、权限控制不严、接口滥用等方式达到攻击目的。“所见皆可篡改”总会出洞的,从前端JS到后端API,任何客户端传来的数据都是不可信的,大胆假设,小心验证,往往能发现致命漏洞。🔥喜欢这类文章或挖掘SRC技巧文章师傅可以点赞转发支持一下谢谢!
学习资源
如果你是也准备转行学习网络安全(黑客)或者正在学习,这里开源一份360智榜样学习中心独家出品《网络攻防知识库》,希望能够帮助到你
知识库由360智榜样学习中心独家打造出品,旨在帮助网络安全从业者或兴趣爱好者零基础快速入门提升实战能力,熟练掌握基础攻防到深度对抗。
读者福利 | CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享 (安全链接,放心点击)

一、知识库价值
深度: 本知识库超越常规工具手册,深入剖析攻击技术的底层原理与高级防御策略,并对业内挑战巨大的APT攻击链分析、隐蔽信道建立等,提供了独到的技术视角和实战验证过的对抗方案。
广度: 面向企业安全建设的核心场景(渗透测试、红蓝对抗、威胁狩猎、应急响应、安全运营),本知识库覆盖了从攻击发起、路径突破、权限维持、横向移动到防御检测、响应处置、溯源反制的全生命周期关键节点,是应对复杂攻防挑战的实用指南。
实战性: 知识库内容源于真实攻防对抗和大型演练实践,通过详尽的攻击复现案例、防御配置实例、自动化脚本代码来传递核心思路与落地方法。
二、 部分核心内容展示
360智榜样学习中心独家《网络攻防知识库》采用由浅入深、攻防结合的讲述方式,既夯实基础技能,更深入高阶对抗技术。

360智榜样学习中心独家《网络攻防知识库》采用由浅入深、攻防结合的讲述方式,既夯实基础技能,更深入高阶对抗技术。
内容组织紧密结合攻防场景,辅以大量真实环境复现案例、自动化工具脚本及配置解析。通过策略讲解、原理剖析、实战演示相结合,是你学习过程中好帮手。
1、网络安全意识

2、Linux操作系统

3、WEB架构基础与HTTP协议

4、Web渗透测试

5、渗透测试案例分享

6、渗透测试实战技巧

7、攻防对战实战

8、CTF之MISC实战讲解

三、适合学习的人群
基础适配人群
- 零基础转型者:适合计算机零基础但愿意系统学习的人群,资料覆盖从网络协议、操作系统到渗透测试的完整知识链;
- 开发/运维人员:具备编程或运维基础者可通过资料快速掌握安全防护与漏洞修复技能,实现职业方向拓展或者转行就业;
- 应届毕业生:计算机相关专业学生可通过资料构建完整的网络安全知识体系,缩短企业用人适应期;
能力提升适配
1、技术爱好者:适合对攻防技术有强烈兴趣,希望掌握漏洞挖掘、渗透测试等实战技能的学习者;
2、安全从业者:帮助初级安全工程师系统化提升Web安全、逆向工程等专项能力;
3、合规需求者:包含等保规范、安全策略制定等内容,适合需要应对合规审计的企业人员;
因篇幅有限,仅展示部分资料,完整版的网络安全学习资料已经上传CSDN,朋友们如果需要可以在下方CSDN官方认证二维码免费领取【保证100%免费】
;
因篇幅有限,仅展示部分资料,完整版的网络安全学习资料已经上传CSDN,朋友们如果需要可以在下方CSDN官方认证二维码免费领取【保证100%免费】

更多推荐


所有评论(0)