矿工攻击
漏洞分析 矿工可以验证交易并将它添加到区块链中,操纵哈希或者时时间戳等区块属性来影响合约的执行或结果
举例 是否明智使用了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 ...
抢先交易攻击
抢先交易攻击交易抢跑漏洞描述:交易抢跑是指攻击者在看到某个交易即将被矿工打包到区块中时,通过提高gas费迅速提交自己的交易,使其在原交易之前被打包。
举例:1.用户在去中心化交易所(如Uniswap)上提交一笔交易,希望以较低价格购买某种代币。2.攻击者看到这一交易后,立即提交一笔相同的交易,但设置更高的交易费用(gas price),使其交易优先被处理。3.结果,攻击者以较低价格获得代币,随后再以高价出售,获取利润。
价格抢跑漏洞描述:价格抢跑发生在用户的交易影响了某个资产的价格,而攻击者在价格变动前迅速提交交易,从中获利。举例:1.在某个拍卖合约中,用户提交了一个出价,导致价格上涨。2.攻击者注意到这一变化,并在用户出价被确认之前,提交自己的出价。3.攻击者以更低的价格赢得拍卖,获取资产。
状态抢跑漏洞描述:状态抢跑是指攻击者通过观察合约的状态变化,利用这些信息进行有利的交易。举例:1.一个合约的状态更新为可以提取奖励,用户提取前,攻击者监测到这个状态变化,立即提交提取请求。2.这样,攻击者可以在用户提取奖励之前获取更多的奖励。
交易插队漏洞描述:交易插队是指攻击者通过提交多个交易 ...
捐款攻击
捐款攻击该协议是否依赖于balance或者balanceof,而不是内部会计漏洞描述 在以太坊网络上,任何地址的余额(无论是以太币还是代币)都可以通过address(this).balance 或token.balanceof(address)查询。然而,外部账户的余额可以被外部操作(如其他合约调用、用户转账等)影响。依赖于外部状态(即余额)可能导致合约的内部逻辑失去一致性,因为外部账户的状态在合约运行期间是不可预测的。
举例 首位存款人可以中断股份的锻造,如果总资产通过大量捐款被操纵,用户可能无法获得其存款的股份,攻击者操纵依赖于balanceof确定总资产金额并阻止其他用户通过存款换取股份
拒绝服务攻击(DOS)
拒绝服务(DOS)攻击未设定gas费率的外部调用 在以太坊中,每一笔交易都会携带一定数量的Gas,这是为了确保任何执行的操作都不会消耗过多的计算资源,从而避免网络拥堵或资源耗尽。当一笔交易开始执行时,它会从交易者提供的Gas总量中扣除费用,直到合约执行完成或Gas耗尽。如果在执行过程中Gas耗尽,那么交易将被回滚,且已经消耗的Gas不会退还给用户。
漏洞分析: 1, 攻击者可以通过构造高复杂度的交易或智能合约来故意消耗大量的Gas,从而正常交易无法被包含在区块中。例如,攻击者可以创建一个合约,该合约在接收到消息时执行大量计算或存储操作,消耗接近最大Gas限额的Gas量。当许多这样的交易被同时发送到网络时,它们会占据大部分甚至全部的Gas容量,导致其他用户的正常交易无法被确认,从而达到拒绝服务的效果。 2,使智能合约进入无限循环,这将导致Gas立即耗尽,交易失败并回滚。这种攻击通常发生在合约逻辑中存在错误的情况下,例如没有正确处理循环退出条件,或在递归调用中缺少终止条件。当合约进入无限循环时,它会尝试消耗所有可用的Gas,最终导致交易失败,并可能使合约处于不可用状态。
解决方法: ...
20240508 BSC攻击事件分析
BSC攻击事件分析这是一起发生在2024年5月8日币安智能链(BSC)上的闪贷攻击事件,影响的是GPU代币合约。该合约存在自转账漏洞,每次自转账都会导致资产翻倍。黑客利用该漏洞,通过DODO协议以闪贷的方式借入BUSD,在PancakeSwap上兑换成GPU代币,再利用漏洞进行多次自转账,导致其GPU代币余额增加了100亿倍,达到28,070,259,409,924枚代币。最后,黑客将GPU代币卖出换成BUSD,用于偿还闪贷本息,最终窃取约3.2万美元资金。
首先攻击者从DODO借贷协议中发起闪电贷,借出BUSD到攻击合约地址,攻击者合约在调用PancakeSwap协议,将借出的BUSD兑换成GPU代币,利用自我转账漏洞,凭空产生CPU代币,攻击者合约自己给自己转账,每转账一次,GPU资产就会翻倍,攻击者合约将获取到的GPU代币发送到PancakeSwap V2协议中,换取BUSD。然后攻击者从PancakeSwap V2协议中获取的BUSD,将其中的一部分用于返还DODO借贷协议的本金和利息,剩下的都是攻击者所获得的。
完整的调用信息看这里
下面是DODO协议中借贷协议中的借贷函数f ...
