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

原创: 张祥利 Pallet  7月12日

点击上方蓝字及时获取PalletOne最新消息

PalletOne技术讲堂之智能合约漏洞解析_第1张图片

讲师简介:

张祥利,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) {

    if(msg.sender.call.value(_amount)()) {

       _amount;

   }

   balances[msg.sender] -= _amount;

  }

}

三、转账

 Solidity 中几种转币方式。

•.transfer()

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

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

•.send()

当发送失败时会返回 false

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

•.call.value()()

当发送失败时会返回 false

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

使用 msg.sender.call.value(amount)() 传递了所有可用 Gas 供调用,也是可以成功执行递归的前提条件。

四、Fallback

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

函数

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

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

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

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

五、攻击实验

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

> contract.address

> getBalance(contract.address)

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

 instance_address_here

function withdrawAttack() public { msg.sender.transfer(this.balance); }

3.使用攻击合约攻击

>contract.donate(‘attackAddr’,{value:500000000000000000})

= 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

部署合约:http://remix.ethereum.org

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

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

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

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

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

添加PalletOne波波微信

加入社区,咨询更多消息

官网:https://pallet.one/

官方邮箱:[email protected]

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

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

你可能感兴趣的:(PalletOne技术讲堂之智能合约漏洞解析)