精华 某P2P系统对象自动绑定漏洞可任意充值
发布于 3 个月前 阅读权限 无需登录 作者 0c0c0f 4312 次浏览 来自 案例分享

对象自动绑定被许多框架支持(比如Spring MCV), 它允许将HTTP请求参数自动的绑定到对象。然而攻击者可以添加额外的HTTP请求参数 ,如果开发人员在处理业务逻辑时缺少安全校验就会导致相应的安全问题。前段时间看到一篇介绍对象自动绑定漏洞和Spring MVC的文章,可以对比着看看。Autobinding vulns and Spring MVC : http://agrrrdog.blogspot.ru/2017/03/autobinding-vulns-and-spring-mvc.html

注:本文作者mmc ,p2p平台已授权测试。

##一:先看一个真实案例


这是国内某p2p平台账户余额功能 1.png 在账户余额的首页我们注册了账号进去以后发现余额是0元,需要充值才能进行投资理财然后提现。 2.png 在充值的页面可以同步余额,经过分析发现这个功能就是把平台上的钱和银行里账户的钱同步一致。这个p2p平台使用的是江西银行来保存客户资金所以最终同步的结果就是江西银行账号的钱和平台的钱一样。经过我长期分析发现这个地方不存任何漏洞,各种加密验证都是很合理的。使用的接口都是银行专门提供的。然后继续往下看。 3.png 我们找到了一个用户地址的设置功能。正常情况下这个地方应该会有存储型XSS,sql注入,一般的越权等传统的安全漏洞问题。但是在这个平台上我们没有发现。我将这个数据包发送到burp 的repeat功能方便我后续做测试。经过对web安全的长期研究在这种表单输入的地方最容易出现的问题其实还有一个那就数据污染,但是这个问题好像在国内并没有引起足够的重视或者说见到的案例比较少。 4.png 这是从burp response回来的数据包,通过对这个数据包的分析,我们发现一个有意思的事情,不知道大家有没有注意。我们对比看一下就很容易发现请求的数据包和返回的数据包参数不一致。换句话说返回的数据包里面参数比请求的数据包多了几个字段其中有email字段和jdbalance字段。通过经验可预测一般这种情况大部分存在数据污染的情况,这个地方应该叫做参数污染。具体的测试操作就是在请求的数据包中吧多出来的字段加入进去然后观察。 5.png 上面是请求的数据包,用burp截断返回数据包的方式看下返回的数据包 6.png 我们看到返回的金额变成了100.00。 这个时候并不代表我们真的达到了数据污染的目的。我们得去我们的余额账户里面看一下。 7.png 点击刷新以后我们发现余额和总资产已经变成了100。后面我们重复了前面开始的操作同步平台上账户里面的钱到银行然后在通过平台成功提现100。

##二:关于这个漏洞的危害以及更多的利用方式


1) 常见的所有输入的地方都会出现这个漏洞 2) 任意用户修改,任意金额修改等等的敏感地方要多测试 3) 缓存修改等等

34 回复

我是来看峰牛的文章的!

还有这种操作?学习下思路

这个思路以前在tools发过,还提交过案例

16年发的

@huigou 这个思路不错,正常开发应该会校验的,或者orm层不配置多余的参数 应该就没问题了。这种漏洞应该不会少。

这代码逻辑很强

这个逻辑漏洞很6

思路很赞,学习了。

师傅牛逼,学习了。

比较好奇jd_balance和其他参数是否属于同一个pojo,为什么它的命名方式独立特行

@zhouliu 应该是一个吧 谁知道还加了一个前缀

难道controller自动装配的直接是整个用户对象?然后直接将整个对象更新到db?这也太。。。。。

那是不是所有会涉及到用户信息的update和insert都会有这种隐患。。

应该是的, 不过一般情况开发人员应该会校验,其他框架应该也会存在类似问题。

@EBWi11 我理解orm层需要有那个字段才会自动更新过去

@0c0c0f 怀疑是用户信息的update和insert全部直接用的用户信息的对象,在orm没有区分业务逻辑。。

通过这样的方式 成功拿到了我们学校论文系统的管理员权限

@0c0c0f 嘿嘿,确实很清晰。

这个思路太棒了!

这个思路挺6

思路挺厉害的。

这思路很强

挺猥琐,在其他地方绑定参数,竟然也传参过去了

回到顶部