记一次某网站支付逻辑漏洞的“薅羊毛”

渗透技巧 2年前 (2022) admin
855 0 0

文章首发于:

火线Zone社区(https://zone.huoxian.cn/)


前言


事情是这样的,毕业季学弟学妹儿们都在递简历,积分不够用还得充值,正好碰见支付逻辑的漏洞,为什么不薅羊毛呢?

这里只做技术交流,恶意利用该漏洞所造成的损害跟本人无关。


内容


只是给了一个目标名称,直接找官网就ok了,发现这个页面能注册,并且还是php开发的,那么直接注册搞一波。


记一次某网站支付逻辑漏洞的“薅羊毛”


看到网站后台的功能虽然比较复杂,但是感觉可操作的地方太少了,能够测试的地方有三个。

  • 上传

  • 越权测试

  • 支付逻辑测试

事实上,上传的位置有三个,但都是头像的位置,后端的代码都一致。


记一次某网站支付逻辑漏洞的“薅羊毛”


经过walawa一波测试,发现并不可利用,心里一波mn!

越权测试的话感觉没有shell的渗透是没有灵魂的,两个普通用户去测试越权真的没啥意思!

然后还是放弃了,但是发现了一点这个网站的用户身份认证比较有意思。


记一次某网站支付逻辑漏洞的“薅羊毛”


用户的cookie认证有多个字段,但是某些字段的认证并没有什么用,这里为接下来的工作奠定了一小部分。

心里开始嘀咕了,这渗透一个站连个shell都没,什么东西也没有,还要不要干渗透了,回去摆“小摊儿”撩学妹儿吧!!!


记一次某网站支付逻辑漏洞的“薅羊毛”


看到功能模块儿了,不行!!!

干他一票,搞不好来一波“意外收获”


记一次某网站支付逻辑漏洞的“薅羊毛”


上来就是干钱钱钱!!!

开始支付……


记一次某网站支付逻辑漏洞的“薅羊毛”


主要字段就是这么些了,起码可以断定,支付的金额就是price字段,那么就操作这个数字能不能行?


记一次某网站支付逻辑漏洞的“薅羊毛”


不出意外的返回200了?这网站搞笑呢,此时我觉得开发小朋友是不是逗我?


记一次某网站支付逻辑漏洞的“薅羊毛”


确实在逗我!!

price字段竟然没有用,能够确定的是什么,可以确定这几个参数所指定的值的内容。

首先第一个字段必定指定积分,第二个字段暂时看不懂含义,第三个字段就是付款金额,修改第三个字段并没有任何意义。

此时联想到我们曾经遇到过的支付逻辑漏洞,上来一把梭,毕竟没有源码,成不成看运气。

可以确定了修改首个字段没有用,那么第二个字段又是啥意思?修改一下。


记一次某网站支付逻辑漏洞的“薅羊毛”


记一次某网站支付逻辑漏洞的“薅羊毛”


确实是少了,少了一毛钱,修改字段为22少了一毛,但是price字段的值也还是没有生效,那么猜测一下,自然就是因为在后台计算金额的时候,只是利用了。


price_int*intergraild


结果作为金额值,那么这个值又代表什么含义,这次我直接修改为30,订单金额如下:


记一次某网站支付逻辑漏洞的“薅羊毛”


同样返回信息没毛病,但是查看订单之后发现金额并未进行结算。


记一次某网站支付逻辑漏洞的“薅羊毛”


那么猜测后端代码应该是这样的一个逻辑,在下订单的时候支付的逻辑就是不判定price的价格。

事实上修改该位置的参数也是没有任何作用的上面已经做过尝试了,然后抓了一下九八折的包。


记一次某网站支付逻辑漏洞的“薅羊毛”


这里发现字段integralid的值修改为了22,那么猜测就来了,逻辑应该是这样的。

  • 21->9.9

  • 22>9.8


自然就直接测试九五折了,确定了猜想,直接修改参数id


记一次某网站支付逻辑漏洞的“薅羊毛”


发现成功测试,实现了在不满足条件的情况下的折扣打折,那么后端代码的逻辑也可以做一下猜测,在校验支付模块的时候,只是对字段integralid的值的合法性进行了校验,简单分为两种情况。


  1. price_int*intergraild(合法id,存在于数据库的id)

  2. price_int*intergraild(不合法id)


漏洞自然出现在第一种情况,因为price_int的值未作校验,合法的逻辑应该是,对price_int的id进行校验。


  • 0<print_int<100 按照正常价格进行判断=”” ,不打折扣<=”” p=””>

  • 100<print_int<500 条件下按照九九折<=”” p=””>


以此类推,但是我们想要充值最少的钱拿到最大的优惠应该怎么充值呢,所以这个时候最好的选择应该是这样的。


记一次某网站支付逻辑漏洞的“薅羊毛”


这样的情况下得到的优惠应该是最大的,因为我想要最大的折扣还想得到最大的优惠,选择金额100000所能拿到的折扣也不过就是个九五折。

对于这个漏洞的利用并且我们一次性能利用的支付逻辑得到的优惠是四块多,问题来了,想要薅羊毛怎么解决呢?

这个思路的话其实原理也很简单,不做详细介绍,当然如何规避这个漏洞呢,只是需要在判断的时候增加一个对于print_int验证的过程,在提交订单的时候。

伪代码:

<?phpfunction payment(print_int,intergraild){   if(print_int<100){       price=print_int*intergraild;//id=20    }elseif (100<print_int<500){        price=print_int*intergraild;//id=21    }    ............    else(print_int>5000){        price=print_int*intergraild;//id=25    }}?>


在初次判断的时候对订单生成的时候调用了类似的代码,在提交订单的时候同样使用该部分代码,对订单内容的数据的合理性做校验那么就可规避这个漏洞了。

但是到这里对于该逻辑所产生的危害虽然还算可以,但是身为渗透本来来说对于现状还是不满足的,充值的目的是什么,充值的目的是为了获得积分,那么能不能直接获得积分而不用选择通过充值服务去实现呢?

于是乎有了下面的内容。

后面分析后台的时候有一个这样的功能,账户管理这个模块内有几个功能点。


记一次某网站支付逻辑漏洞的“薅羊毛”


这个数据迁移的功能成功引起了我的注意,那么此时尝试一波数据迁移。


记一次某网站支付逻辑漏洞的“薅羊毛”


记一次某网站支付逻辑漏洞的“薅羊毛”


成功登录就完事儿了,尝试登录且抓包


记一次某网站支付逻辑漏洞的“薅羊毛”


登录了获得登录的积分,且我的之前的积分还都在,我们充值的目的就是兑换的积分,有了积分还能进行积分兑换,ahhhhha,那么思路get了,这个时候突然想到了条件竞争……

话不多说,直接开始构造数据包。


记一次某网站支付逻辑漏洞的“薅羊毛”


记一次某网站支付逻辑漏洞的“薅羊毛”


我这边生成一个用户id的字典,我自己尽量保持上图两个位置的值一样,在重新和登录数据包,选择同样的username以及password字段,一边迁移一遍的登陆呢?


记一次某网站支付逻辑漏洞的“薅羊毛”


加载上我们的用户字典,开始爆破,可以发现


记一次某网站支付逻辑漏洞的“薅羊毛”


最开始的积分变为了


记一次某网站支付逻辑漏洞的“薅羊毛”


这里需要注意一点的是两个数据包的发送时间不能错,真是经过频繁的测试测试再测试,get到了,到现在才发现这网站有waf,太la了吧,起码至此,羊毛”薅”到了,起码撩到了小学妹儿不是么?

发现问题、分析问题、尝试问题毕竟不是一件容易的事情,好了坦白了,剧本是编的的,东西是真的,ahhhh!!!


小结


理性学习,授权渗透,维护网络安全。


【火线Zone云安全社区群】

进群可以与技术大佬互相交流

进群有机会免费领取节假日礼品

进群可以免费观看技术分享直播

识别二维码回复【社区群】进群

记一次某网站支付逻辑漏洞的“薅羊毛”


【火线zone社区周激励】

2022.4.4~ 2022.4.10公告

记一次某网站支付逻辑漏洞的“薅羊毛”


【相关精选文章】


记一次某网站支付逻辑漏洞的“薅羊毛”


记一次某网站支付逻辑漏洞的“薅羊毛”


记一次某网站支付逻辑漏洞的“薅羊毛”

火线Zone是[火线安全平台]运营的云安全社区,内容涵盖云计算、云安全、漏洞分析、攻防等热门主题,研究讨论云安全相关技术,助力所有云上用户实现全面的安全防护。欢迎具备分享和探索精神的云上用户加入火线Zone社区,共建一个云安全优质社区!

如需转载火线Zone公众号内的文章请联系火线小助手:hxanquan(微信)


记一次某网站支付逻辑漏洞的“薅羊毛”

//  火线Zone //

微信号 : huoxian_zone


记一次某网站支付逻辑漏洞的“薅羊毛”

点击阅读原文,加入社区,共建一个有技术氛围的优质社区!

原文始发于微信公众号(火线Zone):记一次某网站支付逻辑漏洞的“薅羊毛”

版权声明:admin 发表于 2022年4月12日 下午6:00。
转载请注明:记一次某网站支付逻辑漏洞的“薅羊毛” | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...