新書推薦:
《
一个英国军事顾问眼中的二战
》
售價:HK$
285.2
《
就业、利息和货币通论(徐毓枬译本)(经济学名著译丛)
》
售價:HK$
69.0
《
瘦肝
》
售價:HK$
102.4
《
股票大作手回忆录
》
售價:HK$
57.3
《
秩序四千年:人类如何运用法律缔造文明
》
售價:HK$
158.7
《
民法典1000问
》
售價:HK$
102.4
《
国术健身 易筋经
》
售價:HK$
34.3
《
古罗马800年
》
售價:HK$
193.2
|
內容簡介: |
《智能合约安全入门》从环境介绍,Solidity、web3基础和漏洞原理及利用方面,详细地介绍智能合约相关漏洞知识。其中,第一部分介绍了 Remix IDE、Metamask 以及geth等环境的安装和使用方法;第二部分介绍了solidity语言的基础知识与基本语法,以及web3的使用方法;第三部分重点讲解了智能合约常见漏洞的基本原理及其攻击方式,同时还增加了 Ethernaut 通关游戏的部分内容,以此来加深对漏洞原理的理解。
|
關於作者: |
天融信科技集团(证券代码:002212)创始于1995年,是国内首家网络安全企业,亲历中国网络安全产业的发展历程,如今已从中国第一台自主研发防火墙的缔造者成长为中国领先的网络安全、大数据与云服务提供商。天融信始终以捍卫国家网络空间安全为己任,创新超越,致力于成为民族安全产业的领导者、领先安全技术的创造者和数字时代安全的赋能者。
|
目錄:
|
目 录 第0章 初探区块链与智能合约1 关于区块链1 区块链定义1 区块链技术1 区块链层级结构2 区块链的优点2 关于智能合约2 以太坊3 第1章 环境准备5 1.1 使用npm安装Remix IDE5 1.2 使用docker安装Remix IDE6 1.3 使用docker安装geth7 1.4 本章总结8 第2章 Remix环境介绍和使用方法9 2.1 Remix环境的使用方法19 部署学习11 2.2 Remix环境的使用方法212 2.2.1 部署学习13 2.2.2 构造函数14 2.2.3 初始化合约余额14 2.3 Remix环境的使用方法315 Remix搭配MetaMask15 2.4 本章总结17 第3章 MetaMask的使用方法18 3.1 安装MetaMask18 3.2 获取测试币20 3.3 MetaMask Api的使用方法21 3.4 本章总结22 第4章 geth的使用方法23 4.1 geth基础命令23 子命令的使用方法24 4.2 console的基础命令25 4.2.1 console中web3对象的命令25 4.2.2 console中的挖矿26 4.3 geth启动节点26 4.3.1 启动节点26 4.3.2 测试节点27 4.3.3 启动参数说明27 4.3.4 关于RPC27 4.3.5 连接节点28 4.3.6 新建用户28 4.3.7 开始挖矿28 4.3.8 测试转账29 4.4 部署智能合约130 4.4.1 使用容器提供例子30 4.4.2 重新编译31 4.5 调用智能合约134 4.6 geth从头搭建私链36 4.6.1 创建目录36 4.6.2 启动私链节点38 4.7 部署智能合约239 4.8 调用智能合约240 4.9 geth的新版本40 4.10 本章总结41 第5章 Solidity语言基础42 5.1 创建合约42 5.2 合约接口43 5.3 变量类型44 5.4 变量修饰44 5.5 类型转换45 5.6 数学运算45 5.7 字符串比较46 5.8 结构体46 5.9 普通数组46 5.10 函数定义及修饰47 5.11 构造函数47 5.12 函数返回值48 5.13 自毁函数48 5.14 fallback函数49 5.15 receive函数50 5.16 msg全局变量和tx全局变量50 5.16.1 msg全局变量50 5.16.2 tx全局变量51 5.17 创建事件52 5.18 循环结构53 5.19 以太币单位53 5.20 转账函数54 5.21 本章总结55 第6章 Solidity数据存储56 6.1 存储中的状态变量存储结构56 6.2 紧凑存储57 6.3 动态大小数据存储58 6.3.1 动态String58 6.3.2 关于length*2问题60 6.4 动态数组存储60 6.5 字典mapping存储61 6.6 本章总结62 第7章 web3.js和web3.py63 7.1 web3.js63 7.2 web3.js配合MetaMask使用64 7.2.1 异步请求方式165 7.2.2 异步请求方式265 7.2.3 异步请求方式366 7.3 常用函数67 7.3.1 hash函数67 7.3.2 与地址相关68 7.3.3 单位转换68 7.3.4 字符串转换68 7.3.5 账户和余额69 7.3.6 获取插槽数据69 7.3.7 获取区块信息69 7.3.8 获取交易信息70 7.3.9 交易签名和发送71 7.3.10 ABI签名和编码73 7.4 web3.js连接节点74 7.5 web3.js部署合约75 7.6 web3.js合约交互77 7.6.1 实例化合约对象77 7.6.2 web3.js call调用77 7.6.3 web3.js send调用78 7.7 web3.py78 7.8 web3.py部署合约79 7.9 web3.py合约交互79 7.10 本章总结80 第8章 利用漏洞81 8.1 关于call函数81 8.1.1 函数选择器(函数签名)81 8.1.2 call函数无参数调用83 8.1.3 call函数有参数调用85 8.1.4 call函数调用其他合约87 8.2 漏洞场景88 8.3 代码分析89 8.4 漏洞复现89 8.5 本章总结91 第9章 重入漏洞92 9.1 关于重入漏洞92 9.2 关于fallback函数92 9.3 攻击场景92 9.4 漏洞场景93 9.5 攻击演示95 9.6 本章总结98 第10章 整型溢出漏洞99 10.1 溢出原理99 10.2 溢出场景100 10.2.1 加法溢出100 10.2.2 减法溢出101 10.3 案例分析102 10.3.1 BEC合约代码片段102 10.3.2 代码分析102 10.4 攻击模拟103 10.5 本章总结105 第11章 访问控制漏洞106 11.1 关于访问控制漏洞106 11.1.1 代码层面的可见性106 11.1.2 逻辑层面的权限约束106 11.2 漏洞场景1106 11.2.1 漏洞场景分析107 11.2.2 漏洞场景演示107 11.2.3 规避建议109 11.3 漏洞场景2109 11.3.1 漏洞场景分析110 11.3.2 漏洞场景演示110 11.3.3 规避建议110 11.4 漏洞场景3111 11.4.1 tx.origin全局变量和msg.sender全局变量111 11.4.2 漏洞场景分析111 11.4.3 漏洞场景演示112 11.4.4 规避建议114 11.5 本章总结114 第12章 未检查返回值115 12.1 低级别调用函数115 12.2 低级别调用中产生异常的原因115 12.3 低级别函数与普通函数调用的区别116 12.4 漏洞场景116 12.4.1 关于send函数117 12.4.2 漏洞场景分析117 12.4.3 漏洞场景演示117 12.5 真实案例119 12.6 漏洞预防120 第13章 可预测随机值121 13.1 随机数生成121 13.1.1 区块变量作为熵源的PRNG121 13.1.2 区块变量测试121 13.2 漏洞场景123 13.2.1 漏洞场景分析123 13.2.2 漏洞场景演示124 13.3 漏洞修复125 第14章 时间控制漏洞126 14.1 关于block.timestamp126 14.2 以太坊中时间戳的合理要求126 14.3 漏洞场景1127 14.3.1 漏洞场景分析127 14.3.2 漏洞场景演示128 14.3.3 另外攻击姿势131 14.4 漏洞场景2132 14.5 本章总结132 第15章 抢先交易漏洞134 15.1 关于抢先交易漏洞134 15.2 满足“抢先交易”的条件134 15.3 决定交易顺序的原则134 15.3.1 手续费高低原则134 15.3.2 先进先出原则135 15.3.3 共识节点排序原则135 15.4 交易池135 15.5 攻击流程136 15.6 漏洞场景分析137 15.7 漏洞场景演示138 15.7.1 本地搭建私链138 15.7.2 错误不期而遇139 15.7.3 改用geth140 15.7.4 部署合约141 15.7.5 攻击演示142 15.7.6 小结143 15.8 本章总结145 第16章 短地址攻击漏洞147 16.1 关于短地址攻击漏洞147 16.2 漏洞场景分析148 16.3 攻击者地址的生成149 16.4 漏洞场景演示150 16.5 本章总结152 第17章 拒绝服务漏洞153 17.1 关于拒绝服务漏洞153 17.2 漏洞场景1153 17.2.1 漏洞场景演示154 17.2.2 selfdestruct函数155 17.3 漏洞场景2156 17.3.1 所有者丢失156 17.3.2 漏洞场景演示156 17.4 漏洞场景3158 17.5 漏洞场景4159 17.5.1 非预期异常159 17.5.2 攻击payload159 17.5.3 漏洞场景演示160 17.6 本章总结161 第18章 账户及账户生成162 18.1 以太坊账户162 18.2 以太坊地址163 18.3 外部账户的生成163 18.4 特定外部账户的生成167 18.5 合约账户的生成168 18.6 Create2170 18.6.1 关于Create2170 18.6.2 Create code170 18.6.3 Factory合约171 18.7 本章总结175 第19章 Ethernaut176 19.1 关于Ethernaut176 19.2 环境准备177 19.2.1 Hello Ethernaut177 19.2.2 安装MetaMask插件177 19.2.3 测试网络的选择177 19.2.4 控制台的使用178 19.3 本章总结178 第20章 Ethernaut Level 1179 20.1 Level 1 Fallback179 20.2 源码分析180 20.2.1 fallback函数180 20.2.2 攻击过程181 20.3 闯关尝试181 20.4 本章总结183 第21章 Ethernaut Level 2~5184 21.1 Level 2 Fallout184 21.1.1 关卡源码184 21.1.2 源码分析185 21.1.3 闯关尝试185 21.2 Level 3 CoinFlip186 21.2.1 关卡源码186 21.2.2 源码分析187 21.2.3 闯关尝试187 21.2.4 攻击payload187 21.2.5 问题总结190 21.3 Level 4 Telephone190 21.3.1 关卡源码190 21.3.2 源码分析191 21.3.3 攻击payload191 21.3.4 闯关尝试191 21.4 Level 5 Token192 21.4.1 关卡源码192 21.4.2 源码分析193 21.4.3 闯关尝试193 21.5 本章总结194 第22章 Ethernaut Level 6~9195 22.1 Level 6 Delegation195 22.1.1 关卡源码195 22.1.2 源码分析196 22.1.3 闯关尝试197 22.1.4 另谋出路198 22.2 Level 7 Force199 22.2.1 关卡源码199 22.2.2 源码分析199 22.2.3 攻击payload200 22.2.4 闯关尝试200 22.3 Leval 8 Vault201 22.3.1 关卡源码201 22.3.2 源码分析202 22.3.3 闯关尝试202 22.4 Level 9 King202 22.4.1 关卡源码203 22.4.2 源码分析203 22.4.3 攻击payload204 22.4.4 闯关尝试204 22.5 本章总结205 第23章 Ethernaut Level 10~13206 23.1 Level 10 Reentrance206 23.1.1 关卡源码206 23.1.2 源码分析207 23.1.3 关于重入漏洞207 23.1.4 攻击payload207 23.1.5 闯关
|
|