逻辑漏洞

本文内容来自蚁景网安课程。

业务逻辑漏洞概述

简介

不同功能需要不同代码,实现这些核心功能的代码就叫业务逻辑。

业务逻辑漏洞

指由于程序逻辑不严谨或逻辑太复杂,导致一些逻辑分支不能正常处理或处理错误。该种漏洞提交的数据包与SQL注入、XSS等漏洞相比没有危害性,不会引起防护设备(waf)注意。

发生点

用户身份

注册

登录

密码找回

业务一致性

支付逻辑

购买逻辑

业务流程顺序

用户信息

用户信息泄露

其他

参照逻辑漏洞 / 业务漏洞

如何测试

确定业务流程->寻找流程中可以被操控的环节->分析可被操控环节中可能产生的逻辑问题->尝试修改参数触发逻辑问题。

URL跳转漏洞

简介

URL跳转也叫重定向,301和302状态码都表示重定向,浏览器得到服务器返回的状态码后会自动跳转到一个新的URL地址,这个地址可以从响应的Location首部中获取。

产生原因

服务端未对传入的URL变量进行检查和控制,可能导致构造任意一个恶意地址,诱导用户跳转到恶意网站。

常见场景

sso登录

登录跳转

充值接口跳转

URL中一些参数

redirect

redirect_to

redirect_url

url

jump

jump_to

target

to

link

linkto

domain

绕过方法

利用问号绕过限制

1
url=https://www.baidu.com?www.xxxx.me

利用@绕过限制

1
url=https://www.xxx.com@www.baidu.com

利用斜杠反斜杠绕过限制

1
url=http://www.baidu.com/www.xxx.me

利用子域名绕过

1
https://www.baidu.com.xxx.com

防御方法

最有效的方法之一就是校验传入的跳转url参数值,判断是否为预期域名。

逻辑漏洞实验

打开web安全之logic漏洞理解,同时使用Burp Suite截获选择“点击”时的请求数据包,通过修改url参数来实现跳转。

第一题

image-20220115114349066

根据这段PHP代码,可以分析出能利用link参数进行跳转,据此构造下图url。

image-20220115114444180

第二题

image-20220115114544590

根据题目讲解得知不能使用斜杠或@,所以可以用?实现。

image-20220115114715565

第三题

image-20220115114748417

这里不允许使用?@,所以使用斜杠或反斜杠来实现。

image-20220115114843303

第四题

image-20220115114917518

这里不允许用?/,故使用@

image-20220115115005607

重定向后getflag。

第五题

image-20220115115110329

由于substr()函数截取字符串长度,并且判断target是否等于”https://www.hetianlab.com”,利用问号或斜杠都会返回error,利用@则会被截取前25个字符,回到合天网安实验室页面。

短信/邮箱轰炸漏洞

概念

网站对信息发送的次数,时间没有做限制,或者只在前端做了限制,导致可以无限制发送信息,简单来说就是发送短信或邮件的包可以无限制地重复发送。

产生位置

会员账号注册功能,忘记密码找回功能上,会员绑定手机邮箱功能,设置取款密码使用手机验证,或者是某项重要的操作,提现,充值等功能上需要手机短信验证码,以及网站活动领取奖品功能上。

测试方法

抓到发送短信、邮件、私信、站内信的报文,不断重放。

如果有图形验证码就把验证码删掉。

任意用户密码修改漏洞

简介

网站对密码修改的时候,未对修改密码的凭证做严格的限制,导致可以被绕过,可能被任意修改。

漏洞原理

输入要重置的用户名/账号

向该用户绑定的手机号、邮箱等发送验证码

操作者输入验证码,证明自己是用户本人

获得修改密码权限

表现

验证码不失效

验证凭证回传

验证凭证未绑定

本地验证绕过

跳过验证步骤

凭证可预测

同时向多个账户发送凭证

cookie混淆

验证码不失效

在重置密码的过程中,需要填写验证码以证明操作者是用户本人。无论是验证码是短信验证还是邮件验证码(本质是一样的),存在以下条件的,可以尝试爆破。

验证码结构简单、位数少、无大小写字母、无特殊字符、验证码有效时间长、验证码录入没有次数限制

验证凭证回传

短信验证码显示在获取验证码请求的回显中,攻击者知道被攻击用户的手机号码,获取短信验证码,抓包就可以在回显中看到用户收到的重置用的短信验证码。

验证凭证未绑定

造成原因:输入手机号和验证码进行重置密码的时候,仅对验证码是否正确进行了判断,未对该验证码是否与手机号匹配做验证。

测试方法:在提交手机号和验证码的时候,替换手机号为他人手机号进行测试,成功通过验证并重置他人密码。

本地验证绕过

原因:客户端在本地判断验证码是否正确,而判断结果也可以在本地修改,最终导致欺骗客户端,误以为我们已经输入了正确的验证码。

跳过验证步骤

原因:对修改密码的步骤,没有做校验,导致可以直接输入最终修改密码的网址,直接跳转到该页面,然后输入新密码达到重置密码的目的。

测试方法:首先使用自己的账号走一次流程,获取每个步骤的页面链接,然后记录页面3对应的输入新密码的链接,重置他人用户时,获取验证码后,直接输入页面3链接到新密码的界面,输入密码重置成功。

验证凭证可预测

使用邮件接受重置密码的链接时,一般都会带有一个token(字符串)用于判断链接是否被修改过。如果token可以预测,那么攻击中可以通过构造链接来重置任意的用户密码。

表现:

基于时间戳生成的token

基于递增序号生成的token

基于关键字段生成的token

token有规律

同时向多个账号发送凭证

同时向多个账户发送凭证:将发送验证码的包截获,修改字段添加多个账户,再发包。发现所写的有效字段均发送了凭证。

Cookie混淆

登录时根据cookie中的某字段判断登录角色,可以修改cookie中的字段,如userid。

实验:Dedecms任意密码重置

Dedecms任意密码重置

根据任务描述,将源码下载至网站根目录并进行网站配置。

配置完成后用admin账号登录网站后台,在系统-系统基本参数-会员中选择开启会员功能并注册账号test和test1。

返回管理员页面,在注册会员列表中可以看到

image-20220119111622952

其中test的id为2,test1的id为3。

接下来将利用test1的账号实现重置test的密码。

开启Burp Suite抓包(设置代理时,记得将“不使用代理”中的localhost删除),在HackBar中构造url为

1
http://127.0.0.1/dedecms/member/resetpassword.php?dopost=safequestion&safequestion=0.0&safeanswer=&id=2

抓包后送进Repeater,go之后在Response中可以看到key。

image-20220119112419210

构造新url为

1
http://dedecms/member/resetpassord.php?dopost=getpasswd&id=2&key=gFvnjDSj

成功。

image-20220119112907107

任意用户登录漏洞

可能存在点

手机登录验证码回显

修改返回包可以登录

同时向多个账号发送凭证

验证码不生效

Cookie混淆

SQL注入万能密码

越权漏洞

简介

顾名思义,越权漏洞是由于设计上的缺陷对应用程序的权限做得不好。通俗点来说,就是用户A可以通过某种方式查看到用户B的个人信息,或者可以查看管理员C的一些相关信息。

漏洞成因

主要因为开发人员在对数据进行增删改查时对客户端请求的数据过分相信而遗漏了权限的判定。

分类

水平越权:权限不变,身份改变。

垂直越权:身份不变,权限改变。

水平越权

水平越权漏洞是可以操作同一个层次的账号权限之间进行操作,以及访问到一些账号敏感信息,比如可以修改任意账号的资料,包括查看会员的手机号,姓名,重置记录,撤单记录,提现记录,注单记录等等。

垂直越权

垂直越权漏洞可以使用低权限的账号来执行高权限账号的操作,比如可以操作管理员的账号功能。

漏洞修复

  1. 基础安全架构,完善用户权限体系。要知道哪些数据对于哪些用户,哪些数据不应该由哪些用户操作。
  2. 鉴权,服务端对请求的数据和当前用户身份做校验。
  3. 不要直接使用对象的实名或关键字。
  4. 对于可控参数进行严格的检查与过滤。

支付逻辑漏洞

产生原因

开发人员往往为了方便,直接在支付的关键步骤数据包中直接传递需要支付的金额。而这种金额后端没有做校验,传递过程中也没有做签名,导致可以随意篡改金额提交。

如何测试

  1. 在购买产品过程中修改产品数量、价格。
  2. 在支付时修改总价格或优惠价格。
  3. 订单生成后,编辑订单把A商品的价格改成B商品的价格,实现低价支付。

测试技巧

修改购买数量

修改支付价格

修改支付对于的商品

修改支付的状态

修改附属优惠、领取优惠

修改购买数量

支付订单时,可以通过修改物品数量以单价购买多件,或者修改为负数进行增加资金。

修改支付价格

支付当中,购买商品一般分为:订购、确认信息、付款,在这三个步骤中都可能存在漏洞,金额可尝试修改小额或者为负。

修改支付对应商品

通过修改商品对应id,可以用低价购买高价商品。

修改支付状态

没有对支付状态的值跟实际订单支付状态进行校验,导致点击支付时抓包修改决定支付或未支付的参数为支付状态的值从而达到支付成功。

修改附属优惠/状态

比如一些商品有优惠价,优惠多少多少,那么在支付时抓包,修改这个优惠价可造成支付问题的产生。

支付逻辑漏洞实验

大米cms

利用Burp Suite抓包,可以看出qty代表商品数量,在提交订单界面选择站内扣款,将qty设为-1,交易成功。

image-20220119134255662

之后查看余额,发现余额为4000。

img

在购买价格为5400的手机时,修改id为66,以4000价格购入。

img

以及并不能直接修改商品价格,该网站似乎会检查价格是否与id保持一致。