# 震惊！NFT项目方成了提款机

By [degendisco.eth](https://paragraph.com/@degendisco) · 2022-07-07

---

前几天有个NFT项目方犯了个非常低级的错误，导致项目合约直接成了提款机。后续的提款竞争过程也非常精彩，涉及到PGAs, Flashbots和Frontrunning。

最早是由[@bertcmiller](https://twitter.com/bertcmiller/status/1544496577338826752)曝出的这个合约漏洞，但在曝光之后，竟然又发生一次，匪夷所思。下文是对这个事件的推测及还原。

[https://twitter.com/bertcmiller/status/1544496577338826752?s=20&t=mBGED1J-GvWdrcMSJOXR5A](https://twitter.com/bertcmiller/status/1544496577338826752?s=20&t=mBGED1J-GvWdrcMSJOXR5A)

产生漏洞的合约来自NFT项目方FlippazOne，这是一个NFT项目，采用限时竞拍模式出售。

[https://etherscan.io/address/0xE85A08Cf316F695eBE7c13736C8Cc38a7Cc3e944](https://etherscan.io/address/0xE85A08Cf316F695eBE7c13736C8Cc38a7Cc3e944)

在合约中，有一个ownerWithdrawAllTo()的方法，能讲合约中的所有余额转至指定地址。有这样的方法不奇怪，因为项目方总得要回笼资金。但在这么重要的一个方法中，合约编写者犯了个低级错误，**并没有限定调用者的权限如onlyOwner**。于是所有人都能调用，合约妥妥成了提款机。

搞笑的是，这个方法还叫ownerWithDrawAllTo，起名的时候真考虑到了。

![漏洞所在地](https://storage.googleapis.com/papyrus_images/b4f1e0a2a741b67def81226acb9c12c32601e9c889969c92ffd30d73119dbde9.png)

漏洞所在地

这个时候可能有个很勤奋的人坐在屏幕前默默阅读每个新部署的合约，突然发现了这个漏洞，于是乎静静等待有人往里打钱。

终于有人在block 15083765给合约打了1.15 ETH来竞拍NFT。

![可以看到是bid()，打了1.15ETH，此时这个1.15ETH就放在没有锁的金库里。](https://storage.googleapis.com/papyrus_images/86ca3a3a6b61763eb497e1a43c4f8a6b26888b7ecc64f219ddf5a4c8289a75b9.png)

可以看到是bid()，打了1.15ETH，此时这个1.15ETH就放在没有锁的金库里。

[https://etherscan.io/tx/0xf797ef269080f03c9dea6e99199cdb0477b6e9b20850e579d2b74a9e3e2a29a4](https://etherscan.io/tx/0xf797ef269080f03c9dea6e99199cdb0477b6e9b20850e579d2b74a9e3e2a29a4)

这个时候屏幕前的勤奋人来劲了，拿到这1.15ETH岂不是如同探囊取物一般容易。于是他没多想，直接通过etherscan上的合约窗口来调用这个ownerWithDrawAllTo()方法，弹出MetaMask提示，使用默认gas，几秒便操作完了，静等1.15ETH到账。

![只花30GWEI就能拿到1.15ETH，轻松](https://storage.googleapis.com/papyrus_images/e7ab2665ab8a6f2c8c3894a688fb0c2dac834c82de1b5f9a026442b6b36edee3.png)

只花30GWEI就能拿到1.15ETH，轻松

[https://etherscan.io/tx/0x1adfd037aeb717607ae6d480f6694380daad9fcd4686a63be3fd29778e8ca412](https://etherscan.io/tx/0x1adfd037aeb717607ae6d480f6694380daad9fcd4686a63be3fd29778e8ca412)

这时他没想到的是，链上的抢跑机器人已经盯上了他在mempool中的未确认交易，在一番模拟后发现这个交易有利可图，**便迅速复制交易内容，提高gas费**，半路打劫。

![1000 GWEI的gas我还拿捏不了你？](https://storage.googleapis.com/papyrus_images/003e5864c4695e436220a1ac57b1df56a2a54b1e88911bb91e47905236a1fb02.png)

1000 GWEI的gas我还拿捏不了你？

[https://etherscan.io/tx/0x8bded20c1db5a1d5f595b15e682a95ce11d3c895d6031147fa49c4ffa5729a30](https://etherscan.io/tx/0x8bded20c1db5a1d5f595b15e682a95ce11d3c895d6031147fa49c4ffa5729a30)

这时另一个高手出现了。为什么说他是高手，因为这个地址是0x0000打头，一看就是高手，在省gas这一块气质拿捏地死死的。

跟上一个抢跑机器人操作一样，它在mempool中发现这笔交易有理可图，迅速复制粘贴了交易细节。但不同的地方在于，**它通过Flashbots直接发送交易**。而Flashbots的bundles确保会在所有其他交易前被矿工打包，所以这个0x0000的交易就比之前单纯提高gas的机器人更先一步执行完成，成功拿到1.15ETH利润。

![他还通过间接调用方法隐藏了转账行为，高手！](https://storage.googleapis.com/papyrus_images/588d7c0ab65f55b6865653a4fbf8480ec2a72fccd86133fb5722d5f37b026795.png)

他还通过间接调用方法隐藏了转账行为，高手！

[https://etherscan.io/tx/0x670da209fb1168941c4565a9a86f87d1011b24b857ea64f658b126a43f031fa0](https://etherscan.io/tx/0x670da209fb1168941c4565a9a86f87d1011b24b857ea64f658b126a43f031fa0)

精彩的螳螂捕蝉，黄雀在后，黄雀在黄雀后的表演结束了。不得不感叹，以太坊真的是一个黑暗森林，你都不知道最后开枪的是谁，需要小心翼翼，做好安全防护。

后来没想到又有人打了4ETH进到这个合约里。当然，这个时候这个漏洞已经被曝光了，10分钟之后就有人转走了这笔钱。

![猪脚饭到账了](https://storage.googleapis.com/papyrus_images/ff84db620395159230b1a90b7bd25554fc1689ee366d7cd7acceb6dc9bc37da5.png)

猪脚饭到账了

当然，现在这个竞拍已经结束，没有办法再从里面提款。这个合约也被写入了经典的漏洞案例中，供后人观摩。

[https://github.com/SunWeb3Sec/DeFiHackLabs](https://github.com/SunWeb3Sec/DeFiHackLabs)

---

*Originally published on [degendisco.eth](https://paragraph.com/@degendisco/nft)*
