BCST区块链安全研究所研究案例一:某合约低危漏洞深度分析区块链

BCST区块链安全研究所 2018-06-13 10:15
分享到:
导读

今天为大家分享一个轻微漏洞案例,案例的主角是S*T与M*C,大家应该对这两个项目不会陌生。由于之前出了漏洞,造成无限转币,导致项目方损失惨重。

前言

今天为大家分享一个轻微漏洞案例,案例的主角是S*T与M*C,大家应该对这两个项目不会陌生。由于之前出了漏洞,造成无限转币,导致项目方损失惨重。

申明一下,我们仅仅只是做案例分享。

对于智能合约,我们一直认为,任何一行代码都应该且必须严谨,具体你懂的。。。。

代码案例

咱们先看下面的代码:

代码解析

这是一个代理转账函数,参数简单说明:

_from---转账方

_spender---收款方

_value---转账金额

如果你的签名为:

keccak256是一个加密算法,内嵌的函数,可以直接调用。ecrecover是恢复签名公钥的函数,如果传的各个值正确,ecrecover恢复出的公钥等于应该等于_from所传地址。按正常流程来执行的话这个函数是没有问题的。

重点!重点!考试要考!

但是,但是,如果ecrecover里面传的参数不对,ecrecover就会返回0x0地址,而且我们检查了下合约,并没有禁止向0x0转账,所以理论上说,任何人都可以从0x0地址获得这个合约的token。

实操

这时候我们去以太坊区块链浏览器中查下0x0有没有他们的token,果不其然,里面有0.1个token,然后我们调用代理授权函数,并从0x0中将剩余的0.1个token成功的转到了我们的测试账号上。

实操详细流程

1、执行approveProxy函数,授权成功

2、我们通过区块浏览器查看allowance 是否授权成功,看下面截图,成功授权,可以从0x0转走0.个token。

3、接着我们调用transferForm

4、转出成功!成功!成功!成功!。

总结

虽然这个属于轻微漏洞,但是如果有人往0x0转了对应合约的token,那么其他人还是能取出来,一般来说往0x0里面转token属于销毁,如果项目方哪天宣布要销毁部分token,往0x0转了大量token,然后被有心人给发现了,那就尴尬了。

token 函数 合约 成功 案例
分享到:

1.TMT观察网遵循行业规范,任何转载的稿件都会明确标注作者和来源;
2.TMT观察网的原创文章,请转载时务必注明文章作者和"来源:TMT观察网",不尊重原创的行为TMT观察网或将追究责任;
3.作者投稿可能会经TMT观察网编辑修改或补充。


专题报道