某P2P系统对象自动绑定漏洞可任意充值

对象自动绑定被许多框架支持(比如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平台账户余额功能

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

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


1) 常见的所有输入的地方都会出现这个漏洞

2) 任意用户修改,任意金额修改等等的敏感地方要多测试

3) 缓存修改等等

 

原文作者: 0c0c0f