avatar
Articles
106
Tags
10
Categories
0

Home
Archives
Tags
About
何方圜的博客
Home
Archives
Tags
About

何方圜的博客

可怕的外部调用?
Created2024-10-25
往往对于一个功能成熟的DAPP,如uniswapV2,多签钱包等,都是通过多个智能合约实现的,那么就多多少少都会涉及到外部的调用,然而这就带来的很大的风险。如果不能确保外部调用的合约是正常且不带恶意逻辑代码,那么对自身合约就是个定时炸弹,不知道哪天就调用了一个不正常的恶意合约,引爆炸弹。 外部调用会引发的一些常见漏洞:重入攻击,外部合约的安全性问题,重放攻击等 具体来看一下代码: function deposit( uint256 farmDeposit, address payable from, address to ) external returns (uint256 shares) { require(farmDeposit > 0, "deposits must be nonzero"); require(to != address(0) && to != address(this), "to"); require(from ! ...
CTF-freebie
Created2024-10-24
CTF-freebie 题目源码点击 这道题,怎么说,和昨天写的那个CTF-tasty-stake的漏洞原理一样 看到这段代码,经典的委托调用,只不过这次又是不实现它 function deposit( uint256 farmDeposit, address payable from, address to ) external returns (uint256 shares) { require(farmDeposit > 0, "deposits must be nonzero"); require(to != address(0) && to != address(this), "to"); require(from != address(0) && from != address(this), "from"); shares = farmDeposit; ...
CTF-tasty-stake
Created2024-10-23
CTF-tasty-stake题目源码点击 题目要求: 有个TastyStaking 合约,该合约允许您质押 STEAK 以种植 BUTTER 代币。您的任务是从质押合约中耗尽所有 STEAK 代币。 首先这个合约是个单合约,实现的功能的挺多的,阅读了很久,看了一下它的提示:所有输入都经过了适当的验证吗? 看来又是参数有问题,来到合约最后,migrateStake合约实现的代币质押的转移 function migrateStake(address oldStaking, uint256 amount) external { TastyStaking(oldStaking).migrateWithdraw(msg.sender, amount); _applyStake(msg.sender, amount); } 但是关键来了。对于这个oldStaking,这个函数并没有有什么检查举动,回想前几天刚做的Safu Valut题,和它有点类似,都是没有对外部调用进行一个检查,那么这个题旧很好的解决了 攻击合约: contract Att ...
CTF-safu-wallet
Created2024-10-23
CTF-safu-wallet题目源码点击。 题目要求:这是一个多签名钱包,已经有一位顾客存入钱,然后你要将它的钱永远困住在这个钱包里 首先看到合约代码:很清晰的辨别了,SafuWallet合约是代理合约,SafuWalletLibrary合约是逻辑合约,这样分开,就好理解了对于多签名钱包,我的理解就是,不止一个管理员,至少要俩个管理员就可以管理这个钱包了。 逻辑合约里有kill函数,如果能调用,这应该是最便捷的解题方式了 function kill(address _to) onlymanyowners(sha3(msg.data)) external { suicide(_to); } 很遗憾的是,有个onlymanyowners限制,这也就是多签名钱包的魅力了吧。 看到代理合约中,构造函数还是有点东西。 constructor(address[] memory _owners, uint _required, uint _daylimit) { bytes memory data = abi.encodeWithSignature( ...
CTF-free-Lunch
Created2024-10-23
CTF-free-Lunch题目来源:点击 首先这个代币只有一个合约,还是容易理解。如果对unswap V2有了解的话,会更好的理解合约。发现漏洞。要了解流动池点击, 题目要求是:我们初始有俩个代币,让我们通过这个SafuMaker合约后,翻倍50,并且要耗尽这个合约的资金。 攻击流程(这道题没有思路,或者是说对流动性的了解太少了,看了测试合约,发现这个思路真的让我茅舍顿开,或者是,题目还是做少了): 添加流动性并获得 LP 代币: 攻击者首先向 SAFU-USDC 流动性池添加流动性,例如存入 10 USDC 和 10 SAFU。这一步使得攻击者获得相应数量的 LP 代币,代表他们在流动性池中的份额。 创建新流动性池: 攻击者使用获得的 LP 代币与 SAFU 代币创建一个新的流动性池。这一步增加了攻击者的流动性控制能力。 转移 LP 代币并进行转换: 攻击者将 10% 的新流动性池的 LP 代币转移到 safuMaker 合约,并调用其 convert 方法。这通常会激活一些机制,例如将 LP 代币转换为 SAFU 代币或其他奖励。 代币交换: 攻击者使用路由合约执行 ...
CTF-game-assets
Created2024-10-22
CTF-game-asserts题目源码:点击 题目说明:GG labs 刚刚发布了他们的 nOtApOnZi 游戏,该游戏允许将多个 WLed NFT 用作游戏内物品。为了集成多个 ERC721 代币,他们有一个包装合约 (ERC1155) 来包装 NFT,允许它们在游戏中使用。用户也可以在使用完 NFT 后解包它们。您的任务是将用户的 NFT 困在包装合约中并使他们无法挽回,从而使用户感到悲伤 这个一实现了游戏里的资产转化,首先AssetHolder合约中,就是资产的说明,具体实现有点多,这里就不深究了,AssetWrapper合约就是我们重点要说的了,他是一个包装合约,因为这个游戏使用的ERC1155代币规则,所以在进行包装的时候,要对用户进行返回代币是,就会触发一个隐藏的接受函数, function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, byte ...
ERC1155
Created2024-10-22
ERC1155多代币标准 简介用于多种代币管理的合约标准接口。 单个部署的合约可以包括同质化代币、非同质化代币或其他配置(如半同质化代币)的任何组合。 多代币标准是什么? 它的目的很单纯,就是创建一个智能合约接口,可以代表和控制任何数量的同质化和非同质化代币类型。 这样一来,ERC-1155 代币就具有与 ERC-20 和 ERC-721 代币相同的功能,甚至可以同时使用这两者的功能。 它改进了 ERC-20 和 ERC-721 标准的功能,提升了效率并纠正了实现中的明显错误。 功能批量传输通过一次合约调用传输多种资产 就是不单是一种代币可以传输,很多种代币都可以传输 来看看,他与ERC20传输合约的比较 // ERC-20function transferFrom(address from, address to, uint256 value) external returns (bool);// ERC-1155function safeBatchTransferFrom( address _from, address _to, uint256[] calldat ...
java_学生管理系统
Created2024-10-21
前言最近要做个一java的学生管理系统,要一段很长时间,还是从零开始,所以就记个笔记,记录一下自己的学习知识,感觉和之前学的网页面有一些知识的关联。 采用一个java+Swing的框架, SwingSwing 是一个为Java设计的GUI工具包。 GUI(图形用户界面)为程序提供图形界面,它最初的设计目的是为程序员构建一个通用的 GUI,使其能够在所有的平台上运行,但 Java 1.0 中基础类 AWT(抽象窗口工具箱)并没有达到这个要求,于是 Swing 出现了,它是 AWT 组件的增强组件,但是它又不能完全替代 AWT 组件,这两种组件需要同时出现在一个图形用户界面中。 Swing包括了图形用户界面(GUI)器件如:文本框,按钮,分隔窗格和表。 Swing提供许多比AWT更好的屏幕显示元素。它们用纯Java写成,所以同Java本身一样可以跨平台运行,这一点不像AWT。它们是JFC的一部分。它们支持可更换的面板和主题(各种操作系统默认的特有主题),然而不是真的使用原生平台提供的设备,而是仅仅在表面上模仿它们。这意味着你可以在任意平台上使用JAVA支持的任意面板。轻量级组件的缺点则是执 ...
CTF-SafuVault
Created2024-10-20
CTF-SafuVault这个题的源代码这里 题目要求就是:获得不少于保险库的90%代币 还是先阅读代码,合约SafeVault,是一个安全的收益金库,用于用户存入代币,然后金库会调用策略合约 SafuVault的deposit函数将存入的代币进行投资,用户通过withdraw函数提取它们的代币,其中还有个depositFor函数,允许其他用户为其他人存款,这个收益合约看起来还是功能挺齐全的。而收益生成合约 SafuStrategy,就是来管理存入金库的资金,要想获得资金的话,还是的同通过金库合约,反复查看这个合约的,开始时并没有发现获得资金的方法,查看了提示:所有外部功能都得到妥善保护吗?又去看了金库合约的函数,发现deposit和depositFor函数修饰限定不一样,具体看一下代码: function deposit(uint256 _amount) public nonReentrant { strategy.beforeDeposit(); uint256 _pool = balance(); want().safeTran ...
EIP-1559
Created2024-10-20
EIP-1559在做solidity自我检测的时候,第一次,了解到这个协议,就来做个学习笔记 含义首先它是由V神和Ethhub_io创始人Eric Conner于2019年3月联合提出的以太坊交易手续费机制改进提案。这个提案的主要内容就是对向矿工的支付的gas方式做出了改变,它将gas费分为俩部分:基础费(basefee)+矿工小费 基础费(basefee)就是以太坊网络根据交易需求和区块大小动态调整的。BASEFEE的计算方式是通过一个名为“基础费用追踪器”的算法来实现的。该算法会根据当前区块的交易需求和区块大小来动态调整BASEFEE,以确保交易能够在合理的时间内得到确认。 EIP-1559协议的核心思想其实有两块:第一块是变更燃料费价格的定价方式,降低整体的燃料费价格,以利于以太坊生态中的各种应用的发展。第二块是原来的以太坊网络中的燃料费全部是矿工的收入,在EIP-1559协议实施后,燃料费的一部分将燃烧掉,不再作为矿工的收入。 作用降低以太坊的矿工费用,维持以太坊网络的稳定
1…678…11
avatar
何方圜
夫孰异道而相安
Articles
106
Tags
10
Categories
0
Follow Me
Announcement
CTF的更新
Recent Post
关于OPE2025-06-19
sherlock-S-locker System2025-06-17
sherlock-DODO Cross-Chain DEX2025-06-17
单机版区块链的实现2025-06-16
sherlock-Usual ETH02025-06-10
Tags
链接 题解 Solana 基本知识 协议 test 攻击事件分析 课程学习 CTF 审计报告
Archives
  • 六月 20257
  • 五月 20252
  • 四月 20252
  • 三月 20252
  • 十二月 202411
  • 十一月 202421
  • 十月 202439
  • 九月 20247
Info
Article :
106
UV :
PV :
Last Update :
©2020 - 2025 By 何方圜
Framework Hexo|Theme Butterfly