首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

PalletOne技术讲堂之智能合约漏洞解析

讲师简介:

张祥利,PalletOne高级核心开发工程师,9年c/c++开发经验。熟悉加解密算法,熟悉比特币,对数据结构和算法有较深入的了解。

一、Ethernaut

Ethernaut是Zeppelin提供的一个基于Web3 和 Solidity的智能合约审计训练平台,目前收录了18 道题目,复现了智能合约中可能出现的各种安全问题。

•https://ethernaut.zeppelin.solutions

•https://ethernaut-devcon3.zeppelin.solutions/

•https://github.com/OpenZeppelin

•The ethernaut is a Web3/Solidity based wargame inspired on overthewire.org.

CTF,全称Capture The Flag,即夺旗赛,起源于1996 年 DEFCON全球黑客大会,是网络安全技术人员进行技术竞技的一种比赛。

二、重入漏洞---DAO

Re-entrancy

function withdraw(uint_amount) public {

if(balances[msg.sender] >= _amount) {

_amount;

}

balances[msg.sender] -= _amount;

}

}

三、转账

Solidity 中几种转币方式。

•.transfer()

当发送失败时会 throw; 回滚状态

只会传递部分 Gas 供调用,防止重入(reentrancy)

•.send()

当发送失败时会返回 false

只会传递部分 Gas 供调用,防止重入(reentrancy)

•.call.value()()

当发送失败时会返回 false

传递所有可用 Gas 供调用,不能有效防止重入(reentrancy)

四、Fallback

Fallback函数在合约实例中表现形式:一个不带参数没有返回值的匿名

函数

什么时候会执行 fallback 函数呢?

•当外部账户或其他合约向该合约地址发送ether时;

•当外部账户或其他合约调用了该合约一个不存在的函数时;

注:目前已知的关于 Solidity 的安全问题大多都会涉及到 fallback 函数

五、攻击实验

1.点击按钮获取实验实例

> contract.address

> getBalance(contract.address)

2.部署攻击合约:记得步骤‘1’的地址替换

instance_address_here

3.使用攻击合约攻击

>contract.donate(‘attackAddr’,)

= hack

参考:

Ethernaut通关0-15:

https://www.anquanke.com/post/id/148341

Solidity 安全:已知攻击方法和常见防御模式综合列表:

https://github.com/slowmist/Knowledge-Base/blob/master/solidity-security-comprehensive-list-of-known-attack-vectors-and-common-anti-patterns-chinese.md

翻译自 :https://blog.sigmaprime.io/solidity-security.html

https://ethereum.github.io/browser-solidity/

以太坊智能合约安全入门了解一下:

http://rickgray.me/2018/05/17/ethereum-smart-contracts-vulnerabilites-review/

区块链世界的IP协议高性能分布式账本

更多有价值的悄悄话,欢迎加入PalletOne社群

加入社区,咨询更多消息

官网:https://pallet.one/

Telegram:https://t.me/PalletOneGlobal

Github:https://github.com/PalletOne

Twitter:https://twitter.com/PalletOne_org

Facebook:https://www.facebook.com/Pallet

One-1399711010172819/?modal=admin_todo_tour

更多官方咨询,关注公众号获得

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券