区块链安全
文章目录
- 区块链安全
- Jump Oriented Programming实战二
- 实验目的
- 掌握对EVM逆向能力
- 实验环境
- 实验工具
- 实验原理
- 实验内容
- Jump Oriented Programming实战二 实验步骤
Jump Oriented Programming实战二
实验目的
学会使用python3的web3模块
学会分析以太坊智能合约中中Jump Oriented Programming(JOP)问题
深刻理解EVM字节码与delegatecall函数调用参数布局
掌握对EVM逆向能力
找到合约漏洞进行分析并形成利用
实验环境
Ubuntu18.04操作机
实验工具
python3
实验原理
涉及到 JOP 的是如下三个字节码:0x56 JUMP 0x57 JUMPI 0x5B JUMPDEST,在 EVM 中的无条件跳转 JUMP 和条件跳转 JUMPI 的目的地都必须是 JUMPDEST,这点和 ROP 可以任选返回地址不同。
通常需要用到 JOP 的合约在编写时都夹杂着内联汇编的后门,本实验通过jop控制程序控制流,实现特定目的。
分析合约执行流,巧妙构造函数参数,完成特定位置的jump。
实验内容
合约中内置了稍微复杂的JOP问题,找到合约漏洞并形成利用,触发合约的SendFlag(address addr)事件即可
使用python3的web3模块远程利用漏洞并获取flag
实验地址为nc ip 10016
Jump Oriented Programming实战二 实验步骤
获取合约地址和合约源代码
nc ip 10016连接到题目,输入1,获取部署合约的game account及token
打开http://ip,输入上述分配的game account,点击Request获取eth
nc ip 10016连接到题目,输入2,获取部署合约的地址及new token
使用geth attach连接到题目,获取合约字节码,题目附件中提供了合约字节码反汇编和反编译代码
分析合约源代码漏洞
0x60806040526004361061008e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806319ff1d211461009057806324b04905146101205780632f76c9c21461012a578063645b8b1b146101555780636bc344bc146101ac57806370a0823114610208578063f0d252681461025f5780632665f77d146102ac575b005b34801561009c57600080fd5b506100a56102c3565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100e55780820151818401526020810190506100ca565b50505050905090810190601f1680156101125780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610128610323565b005b34801561013657600080fd5b5061013f610406565b6040518082815260200191505060405180910390f35b34801561016157600080fd5b50610196600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505