月神SRC:学习笔记 3
本文最后更新于72 天前,其中的信息可能已经过时,如有错误请发送评论

前言:

这是一篇关于月神SRC逻辑漏洞课程的学习笔记,因为我现在没有小钱钱所以买的是某宝的19期盗版课,如果后续赚钱了肯定是要支持一手正版的,但是现在嘛,先学吧,当然b站也有相关课程只不过需要包月充电

int类型:

范围:

-2147483648 到 4294967295

无符号int:

无符号 int 类型表示非负整数。对于 32 位系统,无符号 int 的取值范围为 0 到 2^32 – 1,即 0 到 4294967295

有符号int:

有符号 int 类型可以表示正数和负数。对于 32 位系统,有符号 int 的取值范围为 -2^31 到 2^31 – 1,即 -2147483648 到 2147483647

最大值溢出漏洞:

漏洞原理:

在涉及到需要支付的场景时,例如微信、支付宝

范围就是0 ~ 2147483647,当超过这个最大值的时候,会重新从零开始计算,比如2147483648就是0,2147483649就是1,如果在支付场景中后台校验的是是否支付成功,而不是支付了多少,那么这就是一个逻辑漏洞,月神讲的这个漏洞我就觉得非常有意思,这里理一下思路

购物场景:

用户购买一瓶矿泉水(2元),提交参数(一瓶,矿泉水id,用户id等),服务器发起支付订单的id,前端拉起支付请求,用户通过微信支付2元,服务器校验微信返回的信息,判断支付成功就代表购买成功,支付失败就代表购买失败

微信存在这个最大值溢出,那么我通过构造数量实现总价格超过int最大值(2147483647),当总价格超过这个时,微信会重新从0开始计算,比如我购买1073741825瓶矿泉水,总价格是2147483650,超过了微信这个最大值,从零开始计算的话就是2元,如果这个时候服务器校验的只是用户的支付状态,那么就可能存在这个漏洞

因为服务器只校验了微信传递的参数是支付成功还是支付失败,并没有对用户的支付价格做校验,这样就会导致用户只花了两元就购买了1073741825瓶矿泉水,所以这就是一个利用微信最大值溢出产生的业务逻辑漏洞,正确流程应该是校验是否支付成功,支付金额是否正确

当然这只是一个思路,同样可以用在其他商城或者充值的地方,要学会举一反三

科学计数法绕过限制:

漏洞原理:

一般出现在服务器对用户输入的值进行了最大值或最小值校验,但是校验不严谨,从而产生漏洞

科学计数法的解释:

科学计数法是一种表示非常大或非常小的数字的方法,它将数字表示为一个介于1到10之间的数与10的幂的乘积,电脑计算器输入1e+2会得到100的结果,这就是科学计数法的一种表达

出现场景:

如果服务器仍然是使用判断支付是否成功来确认用户充值或购买,仅仅只是在这个基础上添加了一个不允许用户输入的值超过多少位,那么就可能会用到这种方法来绕过服务器的过滤,比如2e+10=20000000000,这样就同样绕过了服务器做的限制

同样的,如果服务器对小数进行过滤,不允许用户输入带小数的值,我们就可以使用科学计数法来绕过,比如1e-2=0.01

四舍五入漏洞:

四舍五入的解释:

四舍五入是一种数学中的取整方法,用于将一个数简化为更易于处理的形式,同时尽可能地保持其原始值的接近度

四舍:如果要保留位数的下一位数字是 0、1、2、3、4,则保留位数不变,后面的数字全部舍去

五入:如果要保留位数的下一位数字是 5、6、7、8、9,则保留位数加1,后面的数字全部舍去

漏洞原理:

正常情况下微信/支付宝在支付时会省略小数点第二位后面的,所以如果正常业务中没有对参数进行四舍五入,而是直接使用用户输入的参数,那么就有可能产生这个漏洞

出现场景:

比如这个场景,允许用户自定义充值金额(包含小时)和提现,但是对充值的金额设置了最大值和最小值的限制,那么可能就存在这个漏洞

正常情况充值和提现都没有问题,但是我如果输入的充值金额是0.016呢,按照正常情况,服务器会使用微信的接口生成订单id发给客户端从而拉起支付,但是微信只能读到0.01(不信的可以看看你的微信钱包,0.01后面的数字就读不到了),如果服务器没有对用户输入的值做四舍五入或对充值金额做校验,仅仅只是判断充值是否成功

那么用户输入0.016,微信付款的时候实际付款金额是0.01,支付后服务器判断支付成功给用户的金额添加0.016(可能默认情况也不会显示),但是如果我们再充值一次0.016,用户的金额变成了0.03,那就说明存在漏洞,如果是0.02,那就不存在漏洞

有人可能觉得这个漏洞影响也才几分钱危害不大,我一开始也是这么认为的,但是通过月神的解释才发现这个漏洞很刑诶:

月神:我写了一个批量脚本去跑,半小时跑了几千块钱,如果是工作室用多台设备,那可能金额就非常大了

所以我们也不要因为金额小就觉得这个漏洞危害不大,还是要看实际情况的

常见参数:

Price:

金额是比较常见的参数,购买物品/充值金额时经常会遇到,我们可以将金额修改成-1,0.01,0.019这样的值,当然也有很多时候遇不到这个参数,就比如购物,商品价格其实并不是需要我们告诉服务器的,可以直接存储到数据库,所以参数就变成了商品id

num:

数量,这也是我们遇到的比较多的一个参数,我们可以用前面讲的最大值溢出或者其他,都是可能存在漏洞的

id:

种类:

id也是我们经常遇到的一个参数,只不过存在很多种类,比如:product id、user id、 address id

修改目的:
product id:

商品id

user id:

用户id,出现这个参数可以修改看看,可能出现能够操作别人账号的情况(水平越权/垂直越权)

address id:

地址id,如果修改这个参数显示了别人的地址信息,那就算是信息泄露了

觉得有帮助可以投喂支持下博主哦~感谢!
(bilibili充电:https://space.bilibili.com/1805782637)
作者:法王
转载请表明出处!
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇