自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 ChainFlag靶场实战(一)

靶场wpmore。

2023-01-02 22:41:58 679

原创 2022中国可信链大赛初赛赛题全解

所有的题目我都放在了,由于太长就不放入wp了,感兴趣的可自行移步。

2022-11-28 19:26:52 1691

原创 capture the ether靶场题解(Miscellaneous)

分析一下思路,如果我们编写一个满足ITokenReceiver接口的攻击合约,并把它的地址作为玩家地址,那么我们通过合约调用bank中的取钱函数,取走五十万后,在我们的tokenFallback函数中再调用一次withdraw函数,就会再向我们转五十万,即可完成。bank合约创建之初,就获得了一百万的token,创建者拥有五十万的使用权,玩家拥有五十万的使用权,如果我们通过token往bank里面进行转账,就会调用bank的tokenFallback函数,给我们增加bank中的余额。

2022-11-26 11:08:56 323

原创 capture the ether靶场题解(Account)

思路很简单,使用creat2,我们知道creat2可以根据用户输入salt的不同,部署可控地址的合约,我们只需要将攻击合约的字节码放入deploy函数,再根据脚本算出生成对应地址需要的salt。将部署合约的地址放入s1,攻击合约字节码哈希后放入s3,经过一段时间即可生成出salt,将salt放入deploy函数,即成功部署attack合约,调用攻击函数即可。同样能够在区块链浏览器上查到交易,且我们能够发现,本来r应该唯一的交易,确存在两笔交易拥有相同的r,我们可以根据这个计算出对应账户的私钥。

2022-11-25 22:02:13 1974

原创 capture the ether靶场题解(Math)

if代码块本身的逻辑是没有问题的,并不会出现变量覆盖的情况,但else就不一样了,由于没有进if,相当于直接创建了一个结构体变量,这势必会造成变量覆盖,而能够覆盖的就是数组的长度以及head。由于数组的长度取决于我们传入的wei数,而在push中会对数组的length++,length又跟amount公用一个slot,所以我们传入1wei则长度和amount都2,我们两次都传入1wei,则第一次push的结构体会被第二次push的结构体覆盖,具体原因我就不一一阐释了。

2022-11-21 22:36:48 1859

原创 Damn Vulnerable DeFi靶场实战(11-13)

题目要求:大意是有一个Gnosis Safe的钱包注册表,有人部署或者注册钱包时,会获得十个DVT代币,目前有四个人注册了,注册表中有四十个DVT代币,我们需要获取这四十个代币。WalletRegistry.sol合约:题目只给了这一个合约,合约中前两个函数分别是给address增加权限和删除权限,第三个函数就是我们要达到的目标,其中的限制条件非常多,我们来仔细分析一下这个函数。首先,确保合约拥有足够的token。第二,,调用者必须要是代理工厂合约。第三,,限制了传入的singleton必须是Gn

2022-11-14 17:33:03 557

原创 Damn Vulnerable DeFi靶场实战(6-10)

damndefi靶场

2022-11-08 10:19:16 1989

原创 Damn Vulnerable DeFi靶场实战(1-5)

知道这一点后我们可以看看用户合约。题目只给了这个合约,这个合约包含三个函数,存,取和借,flashloan函数中限制了借的钱以及是否归还,并且调用者必须满足IFlashLoanEtherReceiver接口,因此调用者必须是一个合约,且满足此接口,那么execute函数则是我们可以自己定义的。经过上面的分析,我们的思路已经很明确了,就是在闪电贷合约中借钱,然后存入矿池中,继而得到奖励代币,再将奖励代币发送给attacker,然后将钱返还给闪电贷合约,即可完成攻击。

2022-10-29 22:07:06 1057 1

原创 capture the ether靶场题解(Lotteries)

这题同样要求我们猜answer,但他的answer是在每次Guess的时候生成的,无法通过web3进行查询,但我们明白一件事,合约之间的调用是在同一个区块当中的,也就是说,如果我们通过攻击合约进行调用guess,那么我们攻击合约生成的answer与guess生成的answer是相同的。这关他的answer是随机生成的,根据创建时候的区块数量进行生成,并且由于没有进行修饰符修饰,默认为internal变量,所以我们无法直接看到,但任何数据在区块链上都是无法隐藏的,我们通过web3库就能直接拿到该值。

2022-10-25 10:45:05 1167

原创 Ethernaut靶场实践(三)

首先他要我们前十六位全为我们自己的地址,我们将自己的地址直接转换就可以了,第17-32位全为零,由于uint强转是从后面取,也就是十六进制的第9-12位全为零,而1-8位不全为零,因此我们构造出一个Bytes8的数据,并跟我们的数据进行与运算,即可满足要求。随后调用,然后一步步找到剩余的gas,我们需要找到区块链浏览器中的第二个gas操作,并取该gas-2的值,因为gasleft本身也会消耗gas,再与8191进行mod运算,在初始gas处减少响应的结果,重复2-3次,即可成功,提交实例,攻击完成。

2022-10-10 22:08:25 1172

原创 solidity漏洞实践(二)

三个solidity的复杂题型实践

2022-10-07 16:34:53 459

原创 Ethernaut靶场学习实践(二)

Ethernaut靶场7-12

2022-10-07 16:30:24 1583 1

原创 Ethernaut靶场学习实践(一)

ethernaut靶场分析

2022-10-03 19:28:55 607

原创 solidity漏洞实践(一)

漏洞源码如下这里面我发现了两个漏洞一是在transfer中可能出现uint256溢出漏洞二是在fakeflashloan中可能出现的call注入漏洞于是要拿到flag的第一个条件可用溢出漏洞解决第二个条件可用call注入漏洞解决一.成功满足第一个require二.成功满足第二个require调用complete函数后成功获取flag!由于自己本身对该漏洞方面的题目不是很熟悉,所以几乎是看了别人的解决方法自己动手实践了一次,请多见谅。...

2022-06-20 23:04:30 301

原创 对重入漏洞的分析,复现以及修复方案

在以太坊中,智能合约能够调用其他外部合约的代码,由于智能合约可以调用外部合约或者发送以太币,这些操作需要合约提交外部的调用,所以这些合约外部的调用就可以被攻击者利用造成攻击劫持,使得被攻击合约在任意位置重新执行,绕过原代码中的限制条件,从而发生重入攻击。重入攻击本质上与编程里的递归调用类似,所以当合约将以太币发送到未知地址时就可能会发生。简单的来说,发生重入攻击漏洞的条件有 2 个:调用了外部的合约且该合约是不安全的外部合约的函数调用早于状态变量的修改假设:智能合约A有函数F1,攻击合约B有函数F2。F1

2022-06-12 19:54:03 2499

原创 solidity学习笔记第三篇|僵尸工厂

这是个人学习solidity的第三篇笔记有几点以太坊上的 DApp 跟普通的应用程序有着天壤之别。第一个例子,在你把智能协议传上以太坊之后,它就变得不可更改, 这种永固性意味着你的代码永远不能被调整或更新。你编译的程序会一直,永久的,不可更改的,存在以太坊上。这就是 Solidity 代码的安全性如此重要的一个原因。如果你的智能协议有任何漏洞,即使你发现了也无法补救。你只能让你的用户们放弃这个智能协议,然后转移到一个新的修复后的合约上。但这恰好也是智能合约的一大优势。代码说明一切。如果你去读智能合约的代码,

2022-06-12 16:09:20 298

原创 Solidity学习第二篇|僵尸工厂

这是个人学习solidity第二篇笔记以太坊区块链由 _ account _ (账户)组成,你可以把它想象成银行账户。一个帐户的余额是 以太 (在以太坊区块链上使用的币种),你可以和其他帐户之间支付和接受以太币,就像你的银行帐户可以电汇资金到其他银行帐户一样。每个帐户都有一个“地址”,你可以把它想象成银行账号。这是账户唯一的标识符。映射 是另一种在 Solidity 中存储有组织数据的方法。映射是这样定义的:映射本质上是存储和查找数据所用的键-值对。在第一个例子中,键是一个 address,值是一个 ui

2022-06-12 15:56:52 242

原创 Solidity学习第一篇|僵尸工厂

​这是个人学习solidity的第一篇Solidity 的代码都包裹在合约里面. 一份合约就是以太应币应用的基本模块, 所有的变量和函数都属于一份合约, 它是你所有应用的起点.所有的 Solidity 源码都必须冠以 “version pragma” — 标明 Solidity 编译器的版本. 以避免将来新的编译器可能破坏你的代码。状态变量是被永久地保存在合约中。也就是说它们被写入以太币区块链中. 想象成写入一个数据库。...

2022-06-12 15:43:01 264

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除