CTF-jpeg-sniper
CTF-jpeg-sniper这道题的源码在这里
题目的要求是:铸币
首先又是要理解这些代码想表达的意思
BaseLaunchpegNTF合约,这个NTF的原型,里面实现了isEOA的修饰器,看到这个,我就想起了前几天才整理的智能合约的漏洞:如何绕过外部账户,实现用合约调用。接下来就是普通的铸币流程
function numberMinted(address _owner) public view returns (uint256) { return balanceOf(_owner); } function totalSupply() public view returns (uint256) { return _tokenId.current(); } /// 每个使用者可铸币的数量 function _mintForUser(address to, uint256 quantity) internal { for ...
CTF-GasValue
CTF-GasValue这个题要求我们使open为faluse源代码如下:
// SPDX-License-Identifier: MITpragma solidity 0.8.17;interface INozzle { function insert() external returns (bool);}/// @title Gas Valve/// @author https://twitter.com/bahurum/// @notice The evil Dr. N. Gas has created a machine to suck all the air out of the atmosphere. Anon, you must deactivate it before it's too late!/// @custom:url https://www.ctfprotocol.com/tracks/eko2022/gas-valvecontract Valve { bool public open; bool pu ...
AMM漏洞分析
是否使用硬编码滑点在高波动时期,使用硬编码滑点会导致交易不佳并冻结用户资金
有截止日期保护吗如果没有截至日期保护,用户交易衡容易收到Sandwich攻击
是否针对协议储备的验证检查如果储备金未经验证,协议可能会面临风险,并且可以借出,从而影响系统的偿付能力。
AMM是否使用分叉代码如果使用了分叉代码,尤其是来自Uniswap等已知项目的代码,并且这些代码没有进行正确更新,或者审计,可能会引入已知的漏洞
产品常数公式中是否存在舍入问题公式中的四舍五入问题可能导致代币交换和流动性供应不准确或不平衡。
是否可以根据用户输入进行任意调用允许基于用户输入的任意调用可能会使合约面临各种漏洞
是否有适当的机制来防止过度滑点如果没有滑点保护,交易者可能会因交易过程中的巨大价格偏差而遭受意外损失。
AMM是否正确处理不同十进制配置和令牌如果 AMM 不支持具有不同小数或类型的令牌,则可能会导致计算错误和潜在损失。
AMM是否支持转账收费代币转账收费代币可能会导致问题,因为发送金额和接收金额不匹配。
协议是否在代币交换之前计算”minAmountOut”集成 AMM 的协议应在掉期之前确定 ‘minAmo ...
AMM(自动化做市商)
简单介绍长话短说
你可以将自动做市商视为一个机器人,它总是愿意为你报出两种资产之间的价格。有些使用像 Uniswap 这样的简单公式,而 Curve、Balancer 和其他公司则使用更复杂的公式。
您不仅可以使用 AMM 进行无需信任的交易,还可以通过向流动性池提供流动性来成为庄家。这基本上允许任何人成为交易所的做市商,并通过提供流动性赚取费用。
由于 AMM 简单易用,它在 DeFi 领域真正占据了一席之地。以这种方式实现去中心化做市是加密货币愿景的本质。
介绍去中心化金融 (DeFi) 在以太坊和 BNB 智能链等其他智能合约平台上引起了人们的极大兴趣。收益耕种已成为一种流行的代币分配方式,代币化的 BTC 在以太坊上不断增长,闪电贷交易量也在蓬勃发展。
与此同时,像 Uniswap 这样的自动做市商协议经常会看到有竞争力的交易量、高流动性和不断增加的用户数量。
但是这些交易所是如何运作的呢?为什么为最新的食品币建立市场如此快速和容易?AMM 真的能与传统的订单簿交易所竞争吗?让我们来一探究竟。
什么是自动化做市商(AMM)?自动做市商 (AMM) 是一种去中心化交易所 (DEX ...
矿工攻击
漏洞分析 矿工可以验证交易并将它添加到区块链中,操纵哈希或者时时间戳等区块属性来影响合约的执行或结果
举例 是否明智使用了block.timestamp,尤其是对于较长的间隔,block.timestamp可以被矿工再很小的程度上操纵,影刺依赖它进行计算时可能会有风险
价格操控攻击漏洞分析 攻击者故意改变去中心化交易所的资产价格,通常是为了依赖利用合约或者交易
举例如果价格或资产之间的汇率是从余额比率得出的,则可以对其进行操纵。闪电贷和捐赠是众所周知的用于操纵价格的攻击媒介。
重入攻击重入攻击是一种针对智能合约的安全漏洞,攻击者利用合约在执行期间的状态不一致性,通过多次调用合约的某个函数,从而导致资金或数据的异常损失。下面将详细细分重入攻击的类型,并通过具体示例进行说明。
单个合约重入攻击漏洞描述:攻击者利用合约中的漏洞,在同一合约内重复调用函数,导致状态不一致或资金损失。
举例:某个合约允许用户提取资金,攻击者利用重入漏洞在提现过程中多次调用提现函数,导致超过账户余额的提取。
跨合约重入攻击漏洞描述:攻击者首先调用一个合约的函数,该函数再调用另一个合约的函数,然后再通过回调再次调用原 ...
恶意破环攻击
漏洞描述攻击者通过恶意破坏系统,通常它们不会有盈利的,就是恶意破坏运营和用户,它们可以通过链上的轻微改变来阻止用户交易
CTF-The lost Kitty
CTF-The lost kitty题目就是Lucas在一个空间为2^256的房间丢失了一只猫,要求我们找到这只小猫,题目的源代码,如下:// SPDX-License-Identifier: MITpragma solidity ^0.8.0;
contract HiddenKittyCat { address private immutable _owner;
constructor() { _owner = msg.sender; bytes32 slot = keccak256(abi.encodePacked(block.timestamp, blockhash(block.number - 69)));
assembly { sstore(slot, “KittyCat!”) } }
function areYouHidingHere(bytes32 slot) external view returns (bool) { ...
CTF-Creativity
CTF-Creativity题目:要求调用sendFlag(),记录事件源代码:
pragma solidity ^0.5.10;contract Creativity { event SendFlag(address addr); address public target; uint randomNumber = 0; function check(address _addr) public { uint size; assembly { size := extcodesize(_addr) } require(size > 0 && size <= 4); target = _addr; } function execute() public { require(target != address(0)); target.delegatecall(ab ...
20241005AIZPTToken攻击事件分析
AIZPTToken攻击事件分析先大概描述一下:攻击者使用闪电贷借的钱,然后再购买了价值8000 BNB的AIPTToken,然后再以高价卖出,从中得到利润,还清借款,最终获得价值34BNB(约俩万美金)。
这是发生在最近的攻击,首先攻击者发现了这个AIZPTToken代币买卖的计算错误,下面是截取的AIZPTToken合约中的一段代码
function buy() internal { require(tradingEnable, 'Trading not enable'); uint256 swapValue = msg.value; uint256 token_amount = (swapValue * _balances[address(this)]) / (address(this).balance); require(token_amount > 0, 'Buy amount too low'); uint256 user_amount = token_amount * 50 / 100; ui ...
智能合约的漏洞
智能合约的漏洞重入攻击 重入漏洞本质上是状态同步问题,当智能合约调用外部函数时,执行流会转移到被调用的合约,如果调用合约未能正确同步状态,则在流程转移过程中可能会被重新进入,导致重复执行相同的代码逻辑。具体来说,攻击通常分两个步骤展开:1,被攻击合约调用攻击合约的外部函数,并转移执行流程。2,在攻击合约函数内部,利用一定的技巧,再次调用被攻击合约的漏洞函数。由于以太坊虚拟机 (EVM) 是单线程的,因此在重新进入易受攻击的函数时,合约状态不会正确更新,类似于初始调用。这允许攻击者重复执行某些代码逻辑,从而实现意外行为。典型的攻击模式涉及多次重复的资金提取。
举例以修改后的WETH为例
contract EtherStore { mapping(address => uint256) public balances; function deposit() public payable { balances[msg.sender] += msg.value; } function withdraw() public ...