主页 > imtoken钱包官网 > Geth以太坊短地址攻击分析

Geth以太坊短地址攻击分析

imtoken钱包官网 2023-07-08 05:13:25

前言

作为区块链新手,一直想复现短地址攻击。 不过我参考了网上很多大佬们的文章,发现很多文章只是简单介绍了这种攻击的原理,只是简单的提到了具体的复现。 像我这样的新手要跟进复现还是有难度的。 的。 所以从开始研究到复现,踩了很多坑。 今天,我将复制过程中的一些细节记录下来,与大家分享。

环境准备

我在Centos上转载:

需要安装:nodejs、git、wget、vim、gcc-c++、ntp、epel、cmake3.x:(智能合约需要cmake3.x版本编译)、golang、go-ethereum、keythereum、web3.js、ethereumjs——发送

有很多东西需要安装。 为了保证文章没有太多篇幅讲安装(虽然我在安装上浪费了很多时间),我就不写详细的安装步骤了。 推荐两篇我在安装时参考的文章:

如果不涉及,基本使用npm安装即可。

如果在安装过程中遇到错误:可以尝试使用淘宝源安装,或者安装指定版本。 如果我说太多以太坊分析网站,我会哭。 虽然我还没有完全安装好所有的软件,但也勉强能完成重现。

漏洞复现

环境安装完成后,就可以开始重现漏洞了。

以太坊网站_新加坡以太坊交易网站_以太坊分析网站

1、首先编写自己的以太坊私链创世块的json文件,内容如下,其中chainId的取值可以是随机的,但要大于0,即为私链:

新加坡以太坊交易网站_以太坊网站_以太坊分析网站

在此路径下初始化它(“gethinitgenesis.json”):

以太坊网站_以太坊分析网站_新加坡以太坊交易网站

初始化完成后,我们就可以打开我们的私有链了。 图中框为私链创建后运行期间的文件保存路径,包括区块信息、信息等。如果第一次重现失败,再次进入控制台发现无法挖矿或挖矿时,可以考虑一个简单暴力的方法,删除这些文件,重新初始化配置文件。

2.使用命令打开终端:

因为如果直接使用“geth console”打开终端,它的日志等一些信息会不断刷新,严重影响我们输入命令,所以我们使用“geth --networkid 1000 console 2>>geth.log”来将日志信息输出到这个路径下的geth.log文件中,--network参数指定了我们要连接的私有链的ID,也就是我们之前在genesis.json文件中写的“chainId”

以太坊分析网站_以太坊网站_新加坡以太坊交易网站

3、私链刚创建时,没有账户。 我们使用“personal.newAccount("123")”命令生成一个新帐户。 多次生成账户,直到生成我们需要的账户地址(地址末尾有两个0,目前猜测肯定是2的倍数,因为我测试用的是1 0,结果不是成功了,但是3个或更多地址是真实的。生成太难了,全靠运气,所以没测试)值得注意的是,我一开始的密码是用“1”而不是“123”,但是我生成了将近200个账户,没有以两个结尾 有0个账户(多次尝试,浪费了很多时间)。 网上有人说理论上会生成256个账号,其中会有一个以“00”结尾的。 在我尝试使用密码“123”后,以“00”结尾的账户在10个或更多的账户内多次生成。 我不知道原因。 毕竟是玄学。

新加坡以太坊交易网站_以太坊分析网站_以太坊网站

personal.newAccount("123")

以太坊分析网站_新加坡以太坊交易网站_以太坊网站

4、我们需要整理一下地址,因为私链默认的挖矿账户是第一个生成的账户,我们不需要修改,部署合约时使用,所以我们需要保留的是第一个账户地址和生成的“漂亮数字”地址:

以太坊分析网站_新加坡以太坊交易网站_以太坊网站

5、接下来就是部署合约了,但是部署合约之前需要先挖矿,因为现在每个账户都没有钱了,部署合约需要钱。 所以使用“miner.start()”开始挖矿。 为确保正常挖矿,请使用“eth.blockNumber”查看区块数量是否增加。 也可以使用“eth.getBalance(addr1)”查看账户余额是否有ether,单位是wei。 “miner.stop()”停止挖矿。

新加坡以太坊交易网站_以太坊分析网站_以太坊网站

6. 编写智能合约。 这里借用了大佬的代码。 我可以成功重现这个漏洞。 大佬的文章简直就是一盏指路明灯(#commentBox),我整个转载过程也是沿用了大佬的思路,因为功能简单,直接转钱就行了。 其实自己写就是这样。 一个传输函数和一个查询函数,毕竟是在命令行界面上运行的。

新加坡以太坊交易网站_以太坊分析网站_以太坊网站

7.在Remix中编译代码,复制“Details”中的WEB3DEPLOY:

以太坊网站_以太坊分析网站_新加坡以太坊交易网站

以太坊分析网站_新加坡以太坊交易网站_以太坊网站

8. 在控制台解锁账户并部署合约:

以太坊网站_以太坊分析网站_新加坡以太坊交易网站

要部署合约,只需将复制的“WEB3DEPLOY”粘贴到控制台即可。

新加坡以太坊交易网站_以太坊网站_以太坊分析网站

挖矿、打包交易、显示合约地址、停止挖矿,一气呵成:

新加坡以太坊交易网站_以太坊分析网站_以太坊网站

9.生成ABI字节码:

var short_address = short_addressContract.at('合约地址')var abi = short_address.transfer.getData('靓号', 转账的代币数)

以太坊网站_以太坊分析网站_新加坡以太坊交易网站

这里我们将 1 个代币转移到目标地址。

以太坊分析网站_新加坡以太坊交易网站_以太坊网站

保存此技能。

10、获取账户addr1的私钥(这也是我踩过的坑,一开始以为私钥是keystore路径下对应的UTC文件中“密文”的值,导致报错解决问题的方向浪费了很多时间。,甚至差点放弃,后来通过刷新发际线的高度发现了问题。)

获取私钥参考文章:。

以太坊分析网站_新加坡以太坊交易网站_以太坊网站

11. 编写生成“rawtranscation”的脚本,需要用到私钥、合约地址、abi。

以太坊网站_新加坡以太坊交易网站_以太坊分析网站

节点运行脚本以获取已签名的交易:

以太坊网站_以太坊分析网站_新加坡以太坊交易网站

新加坡以太坊交易网站_以太坊分析网站_以太坊网站

12. 使用 eth.sendRawTranscation() 发送交易并获取交易哈希:

以太坊网站_以太坊分析网站_新加坡以太坊交易网站

13、继续挖矿,使交易打包成块,确认队列中没有交易等待后,即可停止挖矿:

以太坊分析网站_新加坡以太坊交易网站_以太坊网站

14.查看对应账号,复现成功以太坊分析网站,撒花:

以太坊网站_以太坊分析网站_新加坡以太坊交易网站

有时候你可能会再次失败,没关系,如果你重复几次,你就会成功一次,年轻人,耐心点。

临终总结:玄学真非凡人可得。 计算机学起来挺有意思的,就是脑袋有点凉。

*本文作者:18611588432,本文属于FreeBuf原创打赏计划,未经许可禁止转载。