当前位置:网站首页>智能合约安全——私有数据访问
智能合约安全——私有数据访问
2022-07-30 14:15:00 【fingernft】
这次我们将了解如何访问合约中的私有数据(private 数据)。目标合约话不多说,直接上代码

这次我们的目标合约是部署在 Ropsten 上的一个合约。
合约地址:0x3505a02BCDFbb225988161a95528bfDb279faD6b链接:https://ropsten.etherscan.io/address/0x3505a02BCDFbb225988161a95528bfDb279faD6b#code
漏洞分析由上面的合约代码我们可以看到,Vault 合约将用户的用户名和密码这样的敏感数据记录在了合约中,我们知道合约中修饰变量的关键字仅限制其调用范围,这也就间接证明了合约中的数据均是公开的,可任意读取的,将敏感数据记录在合约中是不安全的。
读取数据
首先,让我们来学习一下solidity的 storage存储方式:1)storage 中的数据被永久存储。其以键值对的形式存储在 slot 插槽中。2)storage在插槽中数据从右向左排列,空间不足时,打包当前插槽,开启下一个插槽存储数据;存储定长数组(长度固定)时,数组中每一个数据占据一个插槽。3)存储变长数组(长度随元素的数量而改变)比较特殊,在遇到变长数组时,会先启用一个新的插槽 slotA 用来存储数组的长度,其数据存储在另外的编号为 slotV 的插槽中。slotA 表示变长数组声明的位置,同时也存储着变长数组的长度length:length = sload(slotA)用slotV表示变长数组数据存储的位置(即key),index 表示 value 对应的索引下标:slotV = keccak256(slotA) + index用 value 表示变长数组某个数据的值:value = sload(slotV)下面我们就带大家来读取这个合约中的数据。首先我们先看 slot0 中的数据:
由合约中可以看到 slot0 中只存储了一个 uint 类型的数据,我们读取出来看一下:我这里使用 Web3.py 取得数据,首先写好程序
运行结果:

“7b”是16进制数,转换成10进制数就是123。这里我们就成功的去到了合约中的第一个插槽 slot0 中存储的 uint 类型的变量 count=123 ,下面我们继续:
slot1 中存储三个变量:u16, isTrue, owner
运行结果:
从右往左依次为owner = f36467c4e023c355026066b8dc51456e7b791d99isTrue = 01 = trueu16 = 1f = 31
slot2 中就存储着私有变量 password 我们读取看看
运行结果:

slot 3, 4, 5 中存储着定长数组中的三个元素
运行结果:

slot6 中存储着变长数组的长度
运行结果:

返回的结果显示变长数组的长度为3。我们从合约代码中可以看到用户的 id 和 password 是由键值对的形式存储的,下面我们来读取两个用户的 id 和 password:user1
运行结果:

user2
运行结果:
这样我们就成功的将合约中的所有数据读取完成。由此可见,合约中的私有数据也是可以读取的。总结大家可以看到,合约中的私有数据也是可以读取的,所以一定不要将任何敏感数据存放在合约中哦。
如果想了解更多的智能合约和区块链知识,欢迎到区块链交流社区CHAINPIP社区,一起交流学习~社区地址:https://www.chainpip.com/
边栏推荐
- 【Vue.js 3.0源码】KeepAlive 组件:如何让组件在内存中缓存和调度?
- ESP32 反复重启问题 Arduino屏蔽断电探测器
- Some thoughts on String
- Flask Framework - Sijax
- 浅析显卡市场的未来走向:现在可以抄底了吗?
- Simple understanding of Precision, Recall, Accuracy, TP, TN, FP, FN
- 还在说软件测试没有中年危机?9年测试工程师惨遭淘汰
- SLF4J的使用
- [深入研究4G/5G/6G专题-46]: 5G Link Adaption链路自适应-2-常见缩略语
- 开源工具推荐:高性能计算辅助工具MegPeak
猜你喜欢

PyQt5快速开发与实战 9.1 使用PyInstaller打包项目生成exe文件

Flask Framework - Sijax

我为何从开发人员转做测试,3年软件测试工程师,带你聊聊这其中的秘辛

Huawei's 7-year-experienced software testing director, gives some advice to all friends who want to change careers to learn software testing

以unity3d为例解读:游戏数据加密

三电系统集成技术杂谈

吃透Chisel语言.28.Chisel进阶之有限状态机(二)——Mealy状态机及与Moore状态机的对比

Six-faced ant financial clothing, resisting the bombardment of the interviewer, came to interview for review

ROS 导航

跳槽前,把自己弄成卷王
随机推荐
从实例来看DAO:权力分散的伟大尝试
Flask框架——Flask-SQLite数据库
Understand Chisel language. 28. Chisel advanced finite state machine (2) - Mealy state machine and comparison with Moore state machine
MIMO雷达波形设计
[深入研究4G/5G/6G专题-46]: 5G Link Adaption链路自适应-2-常见缩略语
还在说软件测试没有中年危机?9年测试工程师惨遭淘汰
The use of ccs software (app software that makes money reliably)
Flask Framework - Sijax
LeetCode二叉树系列——107.二叉树的层序遍历II
[ARC092D] Two Faced Edges
redis6.0 源码学习(五)ziplist
00后测试员摸爬滚打近一年,为是否要转行或去学软件测试的学弟们总结出了以下走心建议
Digital signal processing course lab report (what foundation is needed for digital signal processing)
Shell变量与赋值、变量运算、特殊变量、重定向与管渠
Web3创始人和建设者必备指南:如何构建适合的社区?
新一代开源免费的终端工具,太酷了
Huawei's 7-year-experienced software testing director, gives some advice to all friends who want to change careers to learn software testing
cookie模拟登录「建议收藏」
Redis6.0 source code learning (5) ziplist
Chapter6 : Has Artificial Intelligence Impacted Drug Discovery?