CTF-OnlyPwner-REVERSE RUGPULL
题目源码:
// SPDX-License-Identifier: MITpragma solidity ^0.8.4;contract PrivilegeFinance { string public name = "Privilege Finance"; string public symbol = "PF"; uint256 public decimals = 18; uint256 public totalSupply = 200000000000; mapping(address => uint) public balances; mapping(address => address) public referrers; string msgsender = '0x71fA690CcCDC285E3Cb6d5291EA935cfdfE4E0'; uint public rewmax = 65000000000000000000000; uint publi ...
CTF-OnlyPwner-FREEBIE
CTF-OnlyPwner-FREEBIE题目地址 点击
要求是将合约的余额变为零
源代码很少
pragma solidity 0.8.19;import {IVault} from "./interfaces/IVault.sol";contract Vault is IVault { uint256 public totalDeposited; function deposit() external payable { totalDeposited += msg.value; emit Deposit(msg.sender, msg.value); } function withdraw(uint256 amount) external { totalDeposited -= amount; payable(msg.sender).transfer(amount); emit Withdraw(msg.send ...
CodeHawks-GivingThanks审计报告
一SummaryThe attacker can register their own address as the charitable organization and then perform a self-transfer by donating to the organization, effectively receiving a specific minted NFT for free.
Vulnerability DetailsVulnerability code source:https://github.com/Cyfrin/2024-11-giving-thanks/blob/304812abfc16df934249ecd4cd8dea38568a625d/src/GivingThanks.sol#L21-L23
There is no check to verify whether the charitable organization’s address is the same as the donor’s address, which allows atta ...
newfi攻击事件的分析
攻击介绍2023年7月17日,bscscan链上的NewFi被黑客攻击,一共损失了价值31k$的BUSD。
攻击分析我们使用phalcon进行分析,通过phalcon的调用栈分析,可以看到攻击者首先从4个池子贷了大量的BUSD,然后在PancakeSwap: Smart Router V3中通过以质押与回收BUSD从中套了31,099的BUSD。分析StakedV3.Invest()的调用栈,发现sqrtPriceX96从456917351256涨到了396517633895,显然攻击者通过StakedV3的Invest()方法操纵了价格。
POC
// SPDX-License-Identifier: UNLICENSEDpragma solidity ^0.8.10;import "forge-std/Test.sol";import "./interface.sol";// Vulnerable Contract : 0xb8dc09eec82cab2e86c7edc8dd5882dd92d22411// Attack Tx : 0x557 ...
CTF-DeFi Hack
DeFi Hack由于这个是一个题目集,就写在一起,做个写题记录五个题目的源代码,都在这里了:源代码:点击
May The Force Be With You题目要求是:要取得合约中所有的代币
首先还是看代码,合约代码,还是简单,重点还是看向withdrew函数,要撤回合约中的所有代币,
function withdraw(uint256 numberOfShares) external nonReentrant { // Gets the amount of xYODA in existence uint256 totalShares = totalSupply(); // Calculates the amount of YODA the xYODA is worth uint256 what = numberOfShares.mul(yoda.balanceOf(address(this))).div(totalShares); _burn(msg.sender, numberOfShare ...
Uwerx攻击事件分析
攻击介绍2023年8月2日,Uwerx被黑客攻击,损失了175ETH。
攻击分析我们通过phalcon来分析。
通过调用栈能发现攻击者通过不断在uniswap V2 Pool交换,最终获利。很明显是Pool的兑换比率被破坏了。之所以能被破坏,是因为uwerx TOKEN合约的_transfer()方法被利用了。
function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 ...
UniswapV3,V4 功能对比
以下功能对比摘抄于官网V4 与 V3虽然 Uniswap v4 的基础集中流动性与 Uniswap v3 相同, 架构和会计存在一些关键差异。
单例设计矿池创建V4:单例合约有助于创建矿池和 还会存储其 state。此模式可降低创建池时的成本 以及执行多跳交换。因为矿池是合约状态,而不是全新的合约本身,所以矿池的创建成本要低得多。
V3:工厂合约负责创建矿池。池是 一个单独的 Contract 实例,用于管理自己的 state。矿池初始化 成本高昂,因为合约创建是 gas 密集型的
Flash Accounting (快速记帐)V4:单例使用 flash accounting,即解锁 PoolManager 的调用方 允许进行余额更改操作(多次掉期、多次流动性修改等) 并且只需要在序列的最末端执行 token 传输。
V3:因为 V3 中缺少 Flash Accounting,所以这是责任 集成合约执行代币转账,在每次单独调用后,对每个单独的矿池合约进行代币转账
流动性费用会计V4:应计费用在修改流动性时起到抵免的作用。 增加流动性会将费用收入转化为流动性 仓内流动性降低会自动 要求提 ...
git 协作流程
团队协作首先使用在gitub 上进行团队的协作,就是你自己要先弄一个分支,然后再提交上去,流程如下:git clone 仓库进入到仓库中:cd 仓库名然后切换分支到要协作的分支:git checkout 分支名创建自己的分支:git checkout -b 分支名1写好自己的部分再提交:git add .同上提交:git commit -m “描述”推送至远程自己创建的分支:git push origin 分支名1这样就可以再创库中看到自己的分支,然后再提交去分支名(也就是说pr:Pull requst)注意要指定review;
个人上传文件到仓库 将本地文件上传到github上,要有一个自己想上传的仓库,cd 要上传的文件名,git remote add origin (ssh下的仓库地址),切换分支,主要是看仓库是master,还是main, 还是其他的分支,git branch -M main , 切换到main分支上直接上传到分支上 git push -u origin main即可
初始化一个仓库git init 仓库名写好文件后使用git add . 将文件上传至缓存区查看 ...
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题目源代码:点击
要求是:获得合约中所有的余额
和之前那个看涨期权有点像,这个是看跌期权,所还是的对这个股市的一些专有的词一些理解,这篇文章写的很好点击