相关线索:

Fountain代币合约源码:

https://etherscan.io/address/0x82cf44be0768a3600c4bdea58607783a3a7c51ae#code

本次攻击主要利用了合约中的batchTransfers函数,攻击交易地址:

https://etherscan.io/tx/0x6898846b762aefcdb99d077212bed5e02fd40187dfe21f1070ec8f96b4a7e0da


代码分析:

先来看看主要的batchTransfers函数:

图片.png

该函数是用于分别给不同的地址转账,具体流程如下:

  1. 计算总共要转的金额(存在溢出

  2. 转账人的余额减去要转的总金额

  3. 收款人增加单笔转账的金额

问题主要发生在第一步,由于存储总金额的变量totalAmount的类型为uint256,uint256的最大值为2的256次方,当要赋予totalAmount的值超过2^256的话就会发生上溢。

出了batchTransfers函数之外我们还发现了该合约还有多处函数存在类似的溢出问题:

  1. batchTransferFroms

  2. function batchInvests  (只允许owner调用

造成损失

首先攻击者使用溢出给自己凭空铸造了大量的代币

图片.png

但是他并无法卖出这么多

图片.png

该地址总共向外转出了7502160个代币。

然后我们发现该代币总共就上线了两个交易所:CoinBene、Cointiger

经过调研发现攻击者主要在Cointiger交易所将币卖出图片.png

时间和攻击者对合约完成攻击的时间差不多吻合

图片.png

如果将这个时间段内的卖单全部算为攻击者的卖单,那么攻击者本次总共卖出的代币数量为12595,获利金额为0.07 BTC。

源链接

Hacking more

...