攻击交易: https://phalcon.xyz/tx/bsc/0x39718b03ae346dfe0210b1057cf9f0c378d9ab943512264f06249ae14030c5d5 攻击合约:0x058bae36467a9fc5e1045dbdffc2fd65b91c2203 攻击账号:0x190cd736f5825ff0ae0141b5c9cb7fcd042cef2a 被攻击合约:LockedDeal 0x8bfaa473a899439d8e07bf86a8c6ce5de42fe54b
查看攻击交易过程,发现攻击者调用LockedDeal 合约的WithdrawToken 方法将MNZ、WOD、SIP、ECIO等代币转移至攻击合约:
需要注意在调用WithdrawToken方法时传递的参数为PoolId = 158971,而这个参数正是攻击合约在上一步调用CreateMassPools方法时新建池子的返回值:
继续查看在 CreateMassPools 方法的实现,发现LockedDeal 合约会调用getArraySum 方法将调用者的_Token转移至LockedDeal合约后,再创建包含指定数量的代币的池子:
再看getArraySum方法的实现,sum = sum + _array[i]; 代码存在整数溢出的风险,而编译器版本为 pragma solidity ^0.6.0;
查看攻击合约输入的两个整数 _StartAmount [] 115792089237316195423570985008687907853269984665640502182660492372007802789937 + 61856797091635905326850000 = 1 (整数溢出)
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!