CTF-degen-jackpot
CTF-degen-jackpot题目源代码:点击
题目要求:首先合约有1000个代币,你初始有一个代币,你的任务是提取全部的代币从合约中。
这个题合约看似很多,其实功能明显FNFTHHandler合约是这个币的一些操作LockManager合约是进行锁定地址的操作OtherContract 合约,就是其他合约OtherInterface 合约,就是接口的实现,可以在这里看见合约的一些功能函数。Revert 合约,这个就是主合约了,也是我们要重点分析的合约TokenVault合约,显而易见。金库合约,
要想取得全部代币,还是先看那里可以转出,在Revert合约中,有个撤回函数
function withdrawFNFT(uint fnftId, uint quantity) external override revestNonReentrant(fnftId) { address fnftHandler = addressesProvider.getRevestFNFT(); // Check if this many FNFTs exist in th ...
CTF-opyn-sesame
CTF-opyn-sesame题目源代码:点击
要求是:获得合约中所有的余额
和之前那个看涨期权有点像,这个是看跌期权,所还是的对这个股市的一些专有的词一些理解,这篇文章写的很好点击
capture the ether
对于随机数,来实现一个更好的理解。
math1第一个很简单,答案直接告诉你了,输入即可
2第二个,暴力破解,关键就是uint8,一个字节的符号,范围0-127,直接暴力破解,循环
3第三个,有一些拆分,由于哈希计算的是当前的时间戳,所以我们直接引用它的计算哈希的表达式就行了,写一个攻击合约,在同一笔交易中进行就可以了
4第四个,就要使用控制台了,查询当前的密码,然后输入就可以了
CTF-Extractoor
CTF-Etractoor题目源代码:点击
题目要求:已经启动了一场荷兰拍卖,以出售 1_000_000 个 FARM 代币。到目前为止,一个 degen 已经投入了 900 ETH。
您的任务是从 DutchAuction 合约中窃取至少 90% 的 ETH。
这次合约就只有一个,实现的是荷兰拍卖,我们要获取eth,所以我们就先看合约中,那个地方可以获得eth,发现commitETH合约中,能够返回eth,
function commitEth(address payable _beneficiary) public payable nonReentrant { // Get ETH able to be committed uint256 ethToTransfer = calculateCommitment(msg.value); /// @notice Accept ETH Payments. uint256 ethToRefund = msg.value - ethToTransfer; if (ethToTran ...
CTF-malleable
CTF-malleable题目源代码:点击
题目要求是:您一直在黑暗的森林中嗅探,并发现了 TreasureVault 合同。它需要合约所有者的验证签名才能提取选定数量的 ETH。
您已经记录了用户在之前的 tx 中用于提取一些 ETH 的签名。
耗尽剩余的合约资金。
首先先里了解一下签名,这是我有学到的一个新知识。
签名结构v、r 和 s 是以太坊签名的三个组成部分。签名用于验证消息的来源和内容。v 是恢复标识符,通常为 27 或 28,表示签名的版本。r 和 s 是签名的输出,用于确保消息未被篡改。
签名的生成签名包含三个部分:r、s 和 v。r 和 s 是椭圆曲线的点,而 v 表示恢复标识符。计算 s:当生成签名时,消息哈希(通常是交易或信息的哈希)会被用于计算 r 和 s。签名的 s 值通常会在 0 到曲线的参数 n 之间,因此在椭圆曲线中,s 值是可以被认为是模反的。攻击者如何计算 s
模反性:在椭圆曲线中,存在一个性质,允许将 s 值“反转”。具体来说,对于一个有效的 s,存在另一个有效的 s_,使得 s + s_ ≡ n(模 n),其中 n 是椭圆曲线的一个参数。因此,攻 ...
CTF-Side-Entrance
CTF-Side-Entrance题目源代码:点击
题目要求:有一个 CallOptions 合约,允许用户创建备兑 wETH-USDC 看涨期权。
他们甚至提供了 functionality 允许用户通过使用 Uniswap 闪电贷在没有任何资金的情况下执行他们购买的期权。
您的任务是窃取至少 90k USDC。您开始没有资金。
断更中,关于闪电贷加流动性的题真的很难,准备把uinswap家族学完了再来解题。
CTF-safu-swapper
CTF-safu-swapper题目源代码:点击
题目要求:还是获得pool池的全部代币
这题合约,有俩个,一个主要实现计算,一个主要实现流动性池,首先主要就是看合约流动性提供者,怎样改变流动性,是否有漏洞,果然被发现在移除流动性,发现使用的是 uint amount = IERC20(token).balanceOf(pool); return (amount.mul(units)).div(totalSupply); 而我们在Safupool合约中,并没有发现能改变 baseAmount,tokenAmount,换句话来说,就是在我们以transfer转入代币时合约不会更新baseAmount,tokenAmount,实际上合约是通过 uint amount = IERC20(token).balanceOf(pool);来计算份额,pool会认为已经收到了转账。而增加流动性是:
function addLiquidity(uint256 _baseAmount, uint256 _tokenAmount) public returns (uint liquidityUnits ...
ERC4626
ERC4626含义ERC-4626 是优化和统一收益资金库技术参数的标准。 它为表示单个底层 ERC-20 代币的份额的代币化收益资金库提供标准应用程序接口。 ERC-4626 还概述了使用 ERC-20 的代币化资金库的可选扩展,提供存款、提取代币和读取余额的基本功能。
它主要是运用在收益金库中
定义asset:由 Vault 管理的基础 Token。 具有由相应的 EIP-20 合约定义的单位。share:Vault 的 token。具有标的资产比率 在 Mint / Deposit / Withdraw/redeem (由 Vault 定义) 时兑换。fee:Vault 向用户收取的资产或份额数量。可以存在费用 存款、收益、AUM、提款或 Vault 规定的任何其他内容。滑点:广告股价与经济现实之间的任何差异 存款到金库或从金库取款,不计入费用。
功能asset :function asset() public view returns (address assetTokenAddress)函数返回用于资金库记账,存款,取款的带代币地址。
total ...
CTF-Flash-Loaner
CTF-Flash-Loaner题目源码:点击
题目要求:FlashLoaner 合约接受用户的资金以促进闪电贷,其中他们收取少量费用。这笔费用作为收益提供给储户。
您的任务是从该合约中抽走 99%+ 的用户资金。您开始时没有资金。
这题看起来就是很闪电贷。但是阅读完后,并没有发现一些漏洞,突破口就是这个代码: IFlashCallback(msg.sender).flashCallback(fee, data);可是我们的回执函数能做些什么呢,除了还款我想不到其他方向了
再次审阅合约,发现这个闪电贷是继承ERC4626合约的,意味着它也可以实现存取功能,所以思路就打开了,首先借入一些代币,在调用deposit函数,存入闪电贷中,满足还款条件,然后再执行withdraw函数,又将代币撤回
攻击合约:
//SPDX-License-Identifier: MIT
pragma solidity^0.8.17;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
interface IUniswapV2 ...
CEXISWAP攻击事件分析
攻击介绍cexiswap被黑客攻击,黑客从中盗取了3w的USDT。(CEXISWAP是一个去中心化的多链交易所,通过贸易管道技术在DEX和CEX之间桥接流动性)
TX:0xede72a74d8398875b42d92c550539d72c830d3c3271a7641ee1843dc105de59e
攻击分析我们通过phalcon来看。攻击合约直接调用受害者的initialize(),使自己成为了admin,再调用受害者的upgradeToAndCall(),再upgradeToAndCall()中受害者再次delegatecall攻击合约的0x1de24bbf函数。
很明显,受害者为对initialize()进行访问限制,导致被攻击。
POC
//SPDX-License-Identifier: UNLICENSEDpragma solidity ^0.8.10;import"forge-std/Test.sol";import"./interface.sol";// Attacker : https://etherscan.io/addres ...
