SMT智能合约溢出漏洞分析

什么是SMT?

这是官网https://smartmesh.io 对SMT的介绍,可以简单了解一下。

SmartMesh是物联网基于区块链的底层协议

SmartMesh具有嵌入式区块链节点,并且扩展了Raiden和Lightning Networks的第二层架构网络协议

允许无互联网数字支付和交易

利用基于区块链的令牌激励机制,SmartMesh技术可以形成灵活的

分散式的网状网络,可以进行自我修复,并且具有比标准互联网连接更高的近场速度和带宽。

SmartMesh允许区块链将互联网边界突破到万物互联的物联网(IoT)和物联网(IoE)时代。

听起来好像很厉害的样子?嗯,他们也有自己的SMT币

我不听我不听我不听,我买不起币,你别跟我说这个……

什么是智能合约?

在前面的文章中,我写了智能合约的漏洞,那么什么是智能合约?

有的同学可能没有接触过,看得一头雾水。

好了,这里我不用再强调了吧?这个是考试重点,做好笔记。

智能合约”(smart contract)这个术语至少可以追溯到1995年,是由多产的跨领域法律学者尼克·萨博(Nick Szabo)提出来的。他在发表在自己的网站的几篇文章中提到了智能合约的理念。他的定义如下:

一个智能合约是一套以数字形式定义的承诺(promises) ,包括合约参与方可以在上面执行这些承诺的协议。

你看懂了吗??反正我是没看懂!

没看懂不要紧,我们来看看一个比较好理解的例子:

我们在淘宝买东西,一般是付完钱,等着收货,整个过程就算完结了。

我们经历了这么些步骤:

提交商品订单,支付完成

淘宝核对订单,核对支付金额

淘宝确认金额无误,商家开始备货

商家发货

客户收货

我们发现,这些操作,基本上都是通过网络来实现的,这就好像是我们和淘宝签了一个合约:

只要我付给你钱,你就给我发货,不许耍赖。

智能合约本质上就是一段代码,它运行在区块链网络中,具体的合约代码业务功能由用户来实现。

合约代码一旦部署到区块链网络上,则不可修改,所有的节点会同步该合约代码。

所以一旦智能合约代码出现漏洞,造成的损失是不敢想象的,一想就破产了!

以太坊支持4中智能合约编程语言:

Solidity,类似Javascript

Mutan, 类似Go语言

LLL, 类似Lisp

Serpent,类似Python

更详细的了解,可以自行Google/Baidu,遇到不懂的肯定是要自己先查资料哦,养成习惯。

溢出代码实现

在之前的文章中,只用文字说了溢出的结果

定义变量uint8 a

a的取值范围是0到255

当a=255,我们对a加 1,a会变成 0。

当a=255,我们对a加 2,a会变成 1。

当a=0,我们对a减 1,a会变成 255。

当a=0,我们对a减 2,a会变成 255。

这里以代码来演示。

实现代码

分四步走

1.uint8上溢出

函数返回结果

2.uint8下溢出

函数返回结果

3.uint256上溢出

函数返回结果

4.uint256下溢出

函数返回结果

注:uint默认是uint256

SMT智能合约漏洞

出现漏洞的合约代码

注意看第三行

其中我们可以看到:

_feeSmt=8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff(十六进制)

_value=7000000000000000000000000000000000000000000000000000000000000001(十六进制)

将两者的十六进制转为10进制

所以

_feeSmt=65133050195990359925758679067386948167464366374422817272194891004451135422463(十进制)

_value=50659039041325835497812305941300959685805618291217746767262693003461994217473(十进制)

两者相加的Solidity代码实现

执行结果,两者相加为0

而转账人balances[_from] 肯定是大于等于0的。

所以 if(balances[_from]

那么就不会执行后面的revert()函数

revert是不可能revert的,这辈子都不可能revert的!

也就不会执行回滚操作,进而执行后面的转账代码。

好了,今天的课就到这里了,我舍不得你们走,你们点个赞再走好不好?

如果有疑问欢迎在公众号留言。

参考

https://solidity-cn.readthedocs.io/zh/develop/introduction-to-smart-contracts.html

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180602G0I88W00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券