2

访问私人数据| 破解 Solidity

 2 years ago
source link: https://learnblockchain.cn/article/3417
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

访问私人数据| 破解 Solidity

访问私人数据| 破解 Solidity

639025b59c2cdd89b411a3758f109201.jpg

在开始之前,我们需要了解状态变量是如何通过SLOTS以稳定方式存储的。

Slot System

Solidity通过槽存储合约中定义的变量。

b22bb3b710ddb724f307a8fd8682a943.jpg
访问说明符(私有)

当为基于区块链的应用程序(dApps)编写代码时,你可以定义一个变量为公共或私有。定义私有变量的目的是防止其他合约修改它。但是,区块链应该是透明的,这意味着不管变量是私有的还是公共的,每个人都可以读取它。因此,存储像密码这样的敏感信息是一个非常糟糕的主意。

通过例子来理解

Vault Contract定义了各种各样的变量,但最有趣的是bytes32密码,存储id和密码的 struct Users数组。

630877d66bd8c60dc934a1bf608f6e0f.jpg

addUsers函数将其他用户推送到Users结构数组中。

c990d074da3c65df003c008ad27d3fae.jpg

合约已经部署在Ropsten TestNet地址:0x3505a02BCDFbb225988161a95528bfDb279faD6b

让我们使用truffle 来学习如何与插槽交互,并最终提取密码。

Truffle Demo

让我们连接到Ropsten并初始化到我们拥有的合约地址。

8b61fb3dc0e969e003f3e8311f4f61e7.jpg
truffle — 连接到Ropsten

如果你正在查看上面的合约,我已经标记了哪些变量存储在哪些槽中。

//Syntax to access the data stored in the slots web3.eth.getStorageAt(contractAddress, slotIndex, console.log)

在下面的例子中,我们读取slotIndex=0的数据,然后将十六进制转换为十进制。

4bb55c6d2d837e0f3d6ae6eeb119276c.jpg

在本例中,我们试图读取slotIndex=2的内容,即密码变量。输出为bytes32,可以通过web3.utils.toAscii\转换为Ascii码。

b288def2997b1b9255be61a046cd5090.jpg
读取私有bytes32密码变量

最后,读取用户id和密码。第一个getStorageAt调用输出数组长度。soliditySha3返回第一个数组元素存储的哈希值。

访问下一个存储项。我们需要将哈希值增加1。因此,3f - >40。

f964d25b9c3f94f17a3774001eeac5c2.jpg
读取struct Users数组中的数据

解决方案

区块链在设计上是透明的,所以不要将敏感信息存储在区块链上。

Source:https://zuhaibmd.medium.com/accessing-private-data-hack-solidity-4-f94d479432c7

关于

ChinaDeFi - ChinaDeFi.com 是一个研究驱动的DeFi创新组织,同时我们也是区块链开发团队。每天从全球超过500个优质信息源的近900篇内容中,寻找思考更具深度、梳理更为系统的内容,以最快的速度同步到中国市场提供决策辅助材料。

Layer 2道友 - 欢迎对Layer 2感兴趣的区块链技术爱好者、研究分析人与Gavin(微信: chinadefi)联系,共同探讨Layer 2带来的落地机遇。敬请关注我们的微信公众号 “去中心化金融社区”

本文首发于:https://mp.weixin.qq.com/s/6yvpWR_qn_T0VFOhgJn0-Q

  • 发表于 1天前
  • 阅读 ( 68 )
  • 学分 ( 0 )
  • 分类:Solidity

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK