# NFT空投盗取NFT分析

By [Box ⛩️](https://paragraph.com/@box) · 2022-05-06

---

事件起源
----

> 今天地址为：0xEc82b4564AE9CC74eA164c1cee353A4E1dEB4EA7 的朋友在NFT上遭遇了一次“伪装空投攻击”。
> 
> 攻击场景还原：他早上起来发现自己的Doodle地址上面多了一个空投space doodle，然后一查发现价值不菲，于是他兴高采烈马上就去挂单，但是挂单之后，发现一些地方不对，比如在同样的价值区，并未发现自己的挂单。他向我咨询是怎么回事，并且希望了解相关NFT的稀有度查询数据。
> 
> 就在这个时候，他发现自己的doodles被转移走了。
> 
> 我认真的阅读他提供的相关信息，发现空投的并不是一个完整的NFT而是一个erc1155协议，我猜测是一个共管协议，因为上面显示的是共管标识。一旦获得该种类的空投，如果挂单授权，可能在这一步上面涉及私钥泄露，然后钱包里面的NFT和token就会被盗。
> 
> 这应该是一种非常常见的黑客盗取NFT的形式，希望大家引以为戒。每当NFT钱包里面多了一些乱七八糟的空投的时候，一定要认真查阅官方信息，一切以官方信息为准。
> 
> 另外，由于硬件钱包目前不支持NFT的共管授权，所以硬件钱包在这种攻击上面是无法挂单的，在此由衷感谢@今天派派最帅 ，他家的护盾保护了我手里的NFT。
> 
> ——土澳大师兄

最为一个长期混迹于EVM开发的人，第一反应就是不可能，不存在。我从来没听说过有什么共管协议，鉴于大师兄只是一个KOL，并不是一个专业的技术人员，所以不必追究错误，有预警之心是非常好的。

那既然不是所谓的共管协议，那这到底怎么做到的呢。我简单的在我的钱包里面翻找了一下，终于在一个Azuki的钱包里面找到了所谓的那个space doodle。那么，分析开始。

PS：这里提前说明一下，我用了10分钟进行分析，实际上得到的结果，就是很简单操作钱包授权而已，但是如果你感兴趣，可以继续往下看。

猜测韭菜操作
------

众所周知，在没有任何交互的情况下，任何人都没有办法从你钱包里面转走任何东西。

如果说你的东西被转走了，那么只有两个可能，1.私钥被盗 2.签名了交易或者执行了交易。

所以，当我们挂单后，发现自己的挂单没有成功，会怎么做？大部分人的第一反应肯定是去寻找项目方信息进行反馈，而这里就上了第一个当。

![](https://storage.googleapis.com/papyrus_images/ea64ef373ae30dae9424aee0a6e9b52b6cf0c99651d33996628b8ddbae23359f.png)

来到这个项目的首页，可以看到一个蓝色的链接特别显目，并且除了网站链接和etherscan链接就没有任何其他信息，所以大部分人应该就会进入他精心设计的网站。

真假李逵
----

当我们进入他网站后，效果是这样。

![](https://storage.googleapis.com/papyrus_images/88557be2055cfbdc83e886b43030a1899fecba9759d2dacb606d45589fc1d800.png)

注意现在这个域名。

我第一次进入的时候，我选择了一个空钱包进行链接，在链接成功后，网站异常的闪动让我感到奇怪。此时我注意了一下域名，我发现已经自动转跳到了真正的doodle网站。

非常有意思，按照我的猜测就是，如果你的钱包没有攻击价值，就自动的跳到正版网站。

开膛破肚
----

为了验证猜测，我对网站的源码进行了一番分析。

![](https://storage.googleapis.com/papyrus_images/df9cfb4e00cd8c6fc12bf91e0274f875613a96481df38ce7d034b6ddac772b6f.png)

查看源码，可以看到是一堆混淆过的js代码，但是这种混淆其实毫无意义。在我的眼前根本就无处可藏。将其反混淆，并且反运行时字符串后。进行代码分析。可以看到一些关键内容。

### 定向攻击

可以看到链接钱包的代码如下，当完成链接后，会执行以下代码。

![](https://storage.googleapis.com/papyrus_images/589ab2765caf20c14a998a9a8eccbedab709a3b13ce538b4501665c8a8909edb.png)

这里可以看到最后一行。非常有迷惑性，当你的钱包地址里面没有攻击列表中的nft时，则不会执行任何操作，并且跳到官网。

而如果你有这些nft，就会自动的setApprovalForAll,等你approval完成后，再跳到官网，让你感觉不到任何异常。

### 攻击列表

我在代码中发现了243行合约地址，也就是说，如果你的钱包里面有这243个NFT，就会进行攻击操作。

列表如下，如果你感兴趣可以看看，如果不感兴趣可以跳过。

    {
            '0xd4e4078ca3495de5b1d4db434bebc5a986197782': 0x0,
            '0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d': 0x0,
            '0x9c8ff314c9bc7f6e59a9d9225fb22946427edc03': 0x0,
            '0x08d7c0242953446436f34b4c78fe9da38c73668d': 0x0,
            '0x22c36bfdcef207f9c0cc941936eff94d4246d14a': 0x0,
            '0x57a204aa1042f6e66dd7730813f4024114d74f37': 0x0,
            '0x23581767a106ae21c074b2276d25e5c3e136a68b': 0x0,
            '0x348fc118bcc65a92dc033a951af153d14d945312': 0x0,
            '0xed5af388653567af2f388e6224dc7c4b3241c544': 0x0,
            '0x620b70123fb810f6c653da7644b5dd0b6312e4d8': 0x0,
            '0x60e4d786628fea6478f785a6d7e704777c86a7c6': 0x0,
            '0x8a90cab2b38dba80c64b7734e58ee1db38b8992e': 0x0,
            '0x49cf6f5d44e70224e2e23fdcdd2c053f30ada28b': 0x0,
            '0xc541fc1aa62384ab7994268883f80ef92aac6399': 0x0,
            '0xa3aee8bce55beea1951ef834b99f3ac60d1abeeb': 0x0,
            '0xba30e5f9bb24caa003e9f2f0497ad287fdf95623': 0x0,
            '0x9930929903f9c6c83d9e7c70d058d03c376a8337': 0x0,
            '0x86825dfca7a6224cfbd2da48e85df2fc3aa7c4b1': 0x0,
            '0x86357a19e5537a8fba9a004e555713bc943a66c0': 0x0,
            '0x341a1c534248966c4b6afad165b98daed4b964ef': 0x0,
            '0x7bd29408f11d2bfc23c34f18275bbf23bb716bc7': 0x0,
            '0xbd4455da5929d5639ee098abfaa3241e9ae111af': 0x0,
            '0x282bdd42f4eb70e7a9d9f40c8fea0825b7f68c5d': 0x0,
            '0xedb61f74b0d09b2558f1eeb79b247c1f363ae452': 0x0,
            '0x306b1ea3ecdf94ab739f1910bbda052ed4a9f949': 0x0,
            '0x59468516a8259058bad1ca5f8f4bff190d30e066': 0x0,
            '0x1a92f7381b9f03921564a437210bb9396471050c': 0x0,
            '0xe785e82358879f061bc3dcac6f0444462d4b5330': 0x0,
            '0x7d8820fa92eb1584636f4f5b8515b5476b75171a': 0x0,
            '0x9df8aa7c681f33e442a0d57b838555da863504f3': 0x0,
            '0xb47e3cd837ddf8e4c57f05d70ab865de6e193bbb': 0x0,
            '0xdd012153e008346591153fff28b0dd6724f0c256': 0x0,
            '0xb668beb1fa440f6cf2da0399f8c28cab993bdd65': 0x0,
            '0x513cd71defc801b9c1aa763db47b5df223da77a2': 0x0,
            '0x5b7622ded96511639ddc12c86eb2703331ca2c78': 0x0,
            '0xc9677cd8e9652f1b1aadd3429769b0ef8d7a0425': 0x0,
            '0x9705a7113363a383c8a96689e20286abe6612bb3': 0x0,
            '0x059edd72cd353df5106d2b9cc5ab83a52287ac3a': 0x0,
            '0x08ba8cbbefa64aaf9df25e57fe3f15ecc277af74': 0x0,
            '0xedc3ad89f7b0963fe23d714b34185713706b815b': 0x0,
            '0xce17f8ef13cf67da6eab86e31360102eea8609ff': 0x0,
            '0x6dc6001535e15b9def7b0f6a20a2111dfa9454e2': 0x0,
            '0x6fc3ad6177b07227647ad6b4ae03cc476541a2a0': 0x0,
            '0x9168224fd1033ca25aaebae9eff39c92bd15231c': 0x0,
            '0xf81ead7c021ef1aef78ec1ffe1e4abd0ecdb216d': 0x0,
            '0x6d4bbc0387dd4759eee30f6a482ac6dc2df3facf': 0x0,
            '0x34d85c9cdeb23fa97cb08333b511ac86e1c4e258': 0x0,
            '0xf54cc94f1f2f5de012b6aa51f1e7ebdc43ef5afc': 0x0,
            '0x1cb1a5e65610aeff2551a50f76a87a7d3fb649c6': 0x0,
            '0x8a939fd297fab7388d6e6c634eee3c863626be57': 0x0,
            '0x78d61c684a992b0289bbfe58aaa2659f667907f8': 0x0,
            '0x496a2d17a89cbc4248e9b52c8003a50c648fbca0': 0x0,
            '0xae3d8d68b4f6c3ee784b2b0669885a315ba77c08': 0x0,
            '0xe0176ba60efddb29cac5b15338c9962daee9de0c': 0x0,
            '0x0825f050e9b021a0e9de8cb1fb10b6c9f41e834c': 0x0,
            '0x892848074ddea461a15f337250da3ce55580ca85': 0x0,
            '0xc9d8f15803c645e98b17710a0b6593f097064bef': 0x0,
            '0x20ed6cdf9344b3a187063a3ff4d883b6b1947b81': 0x0,
            '0xccc441ac31f02cd96c153db6fd5fe0a2f4e6a68d': 0x0,
            '0x7cc7add921e2222738561d03c89589929cefcf21': 0x0,
            '0x16de9d750f4ac24226154c40980ef83d4d3fd4ad': 0x0,
            '0xb6329bd2741c4e5e91e26c4e653db643e74b2b19': 0x0,
            '0xab0b0dd7e4eab0f9e31a539074a03f1c1be80879': 0x0,
            '0xf661d58cfe893993b11d53d11148c4650590c692': 0x0,
            '0x2250d7c238392f4b575bb26c672afe45f0adcb75': 0x0,
            '0xd2f668a8461d6761115daf8aeb3cdf5f40c532c6': 0x0,
            '0xf87e31492faf9a91b02ee0deaad50d51d56d5d4d': 0x0,
            '0x959e104e1a4db6317fa58f8295f586e1a978c297': 0x0,
            '0x3110ef5f612208724ca51f5761a69081809f03b7': 0x0,
            '0x521f9c7505005cfa19a8e5786a9c3c9c9f5e6f42': 0x0,
            '0x31b6d1289f96818e79dbb271bf77e8132b86e814': 0x0,
            '0x79fcdef22feed20eddacbb2587640e45491b757f': 0x0,
            '0x3903d4ffaaa700b62578a66e7a67ba4cb67787f9': 0x0,
            '0xd0318da435dbce0b347cc6faa330b5a9889e3585': 0x0,
            '0x529a4e15b3ce13523417f945ecd0959ff71e0a9e': 0x0,
            '0x6080b6d2c02e9a0853495b87ce6a65e353b74744': 0x0,
            '0xbd3531da5cf5857e7cfaa92426877b022e612cf8': 0x0,
            '0x75e95ba5997eb235f40ecf8347cdb11f18ff640b': 0x0,
            '0x2acab3dea77832c09420663b0e1cb386031ba17b': 0x0,
            '0x960b7a6bcd451c9968473f7bbfd9be826efd549a': 0x0,
            '0x0bd4d37e0907c9f564aaa0a7528837b81b25c605': 0x0,
            '0x28472a58a490c5e09a238847f66a68a47cc76f0f': 0x0,
            '0x03ef30e1aee25abd320ad961b8cd31aa1a011c97': 0x0,
            '0x9c80777cae192e5031c38a0d951c55730ecc3f5e': 0x0,
            '0x6e9da81ce622fb65abf6a8d8040e460ff2543add': 0x0,
            '0x5cc5b05a8a13e3fbdb0bb9fccd98d38e50f90c38': 0x0,
            '0x0972290a80333d19c6703073c3e57134a4ca0127': 0x0,
            '0xb4d06d46a8285f4ec79fd294f78a881799d8ced9': 0x0,
            '0x3abedba3052845ce3f57818032bfa747cded3fca': 0x0,
            '0x38a6fd7148c4900338e903258b5e289dfa995e2e': 0x0,
            '0xfe8c6d19365453d26af321d0e8c910428c23873f': 0x0,
            '0x950b9476a4de757bb134483029ac4ec17e739e3a': 0x0,
            '0xa1d4657e0e6507d5a94d06da93e94dc7c8c44b51': 0x0,
            '0x5bd815fd6c096bab38b4c6553cfce3585194dff9': 0x0,
            '0x9c8d2f53f6bff84458f1c84fdaa1e4852ca958e3': 0x0,
            '0x880644ddf208e471c6f2230d31f9027578fa6fcc': 0x0,
            '0x5be99338289909d6dbbc57bb791140ef85ccbcab': 0x0,
            '0x698fbaaca64944376e2cdc4cad86eaa91362cf54': 0x0,
            '0xd7b397edad16ca8111ca4a3b832d0a5e3ae2438c': 0x0,
            '0x86c10d10eca1fca9daf87a279abccabe0063f247': 0x0,
            '0x09233d553058c2f42ba751c87816a8e9fae7ef10': 0x0,
            '0x9378368ba6b85c1fba5b131b530f5f5bedf21a18': 0x0,
            '0x0c2e57efddba8c768147d1fdf9176a0a6ebd5d83': 0x0,
            '0xef0182dc0574cd5874494a120750fd222fdb909a': 0x0,
            '0xeb3a9a839dfeeaf71db1b4ed6a8ae0ccb171b227': 0x0,
            '0x1b829b926a14634d36625e60165c0770c09d02b2': 0x0,
            '0xb5c747561a185a146f83cfff25bdfd2455b31ff4': 0x0,
            '0x123b30e25973fecd8354dd5f41cc45a3065ef88c': 0x0,
            '0x4b61413d4392c806e6d0ff5ee91e6073c21d6430': 0x0,
            '0x97597002980134bea46250aa0510c9b90d87a587': 0x0,
            '0x8943c7bac1914c9a7aba750bf2b6b09fd21037e0': 0x0,
            '0x0b4b2ba334f476c8f41bfe52a428d6891755554d': 0x0,
            '0x7ea3cca10668b8346aec0bf1844a49e995527c8b': 0x0,
            '0x7948f7ff1158b338a898e80ce8b1c3c964a80cec': 0x0,
            '0xf61f24c2d93bf2de187546b14425bf631f28d6dc': 0x0,
            '0x495b01c1bc3b9203fde4362d9913c692fb661f3f': 0x0,
            '0xbad6186e92002e312078b5a1dafd5ddf63d3f731': 0x0,
            '0x0cfb5d82be2b949e8fa73a656df91821e2ad99fd': 0x0,
            '0x72d47d4d24018ec9048a9b0ae226f1c525b7e794': 0x0,
            '0x7ecb204fed7e386386cab46a1fcb823ec5067ad5': 0x0,
            '0xbd275ce24f32d6ce4e9d9519c55abe9bc0ed7fcf': 0x0,
            '0x35471f47c3c0bc5fc75025b97a19ecdde00f78f8': 0x0,
            '0x5af0d9827e0c53e4799bb226655a1de152a425a5': 0x0,
            '0x9a38dec0590abc8c883d72e52391090e948ddf12': 0x0,
            '0xcefc0a83564dd2a083b83b4a73bbae97e40fa7ea': 0x0,
            '0x7afe30cb3e53dba6801aa0ea647a0ecea7cbe18d': 0x0,
            '0xa6a5ec7b1b8a34ff2dcb2926b7c78f52a5ce3b90': 0x0,
            '0xd73acd7f5099fdd910215dbff029185f21ffbcf0': 0x0,
            '0xfcb1315c4273954f74cb16d5b663dbf479eec62e': 0x0,
            '0x1afef6b252cc35ec061efe6a9676c90915a73f18': 0x0,
            '0x67d9417c9c3c250f61a83c7e8658dac487b56b09': 0x0,
            '0x7afeda4c714e1c0a2a1248332c100924506ac8e6': 0x0,
            '0x970d5e0bd5c4f193fccf7fd579590c5f5c69b2d9': 0x0,
            '0x98a0227e99e7af0f1f0d51746211a245c3b859c2': 0x0,
            '0xc1caf0c19a8ac28c41fe59ba6c754e4b9bd54de9': 0x0,
            '0x364c828ee171616a39897688a831c2499ad972ec': 0x0,
            '0x13927739076014913a3a7c207ef84c5be4780014': 0x0,
            '0x25cd67e2dfec471acd3cdd3b22ccf7147596dd8b': 0x0,
            '0xa5c0bd78d1667c13bfb403e2a3336871396713c5': 0x0,
            '0x8d4100897447d173289560bc85c5c432be4f44e4': 0x0,
            '0x4a8c9d751eeabc5521a68fb080dd7e72e46462af': 0x0,
            '0x4db1f25d3d98600140dfc18deb7515be5bd293af': 0x0,
            '0xad9fd7cb4fc7a0fbce08d64068f60cbde22ed34c': 0x0,
            '0x4a537f61ef574153664c0dbc8c8f4b900cacbe5d': 0x0,
            '0x3fe1a4c1481c8351e91b64d5c398b159de07cbc5': 0x0,
            '0x8ffb9b504d497e4000967391e70d542b8cc6748a': 0x0,
            '0xf4ee95274741437636e748ddac70818b4ed7d043': 0x0,
            '0xa5e25b44b01e09b7455851838c76cde68d13e29f': 0x0,
            '0x177ef8787ceb5d4596b6f011df08c86eb84380dc': 0x0,
            '0x2f102e69cbce4938cf7fb27adb40fad097a13668': 0x0,
            '0xd78b76fcc33cd416da9d3d42f72649a23d7ac647': 0x0,
            '0xc8e1de8dc39a758c7a50f659b53f787e0f1398bd': 0x0,
            '0x58519ea95cdfad3622c4c574e61a58fa257d9e77': 0x0,
            '0xe70da20a2b10d60ca620a4e494fe2b37c9499e97': 0x0,
            '0x226bf5293692610692e2c996c9875c914d2a7f73': 0x0,
            '0x0b1d6565d88F9Bf6473e21c2AB58D28A495d7BB5': 0x0
        }
    

该省省，该花花
-------

最有意思的事情是，我在反编译他合约内容的时候，发现他的合约并不是一个真实合约，而是一个代理合约。

![](https://storage.googleapis.com/papyrus_images/95dbfc4a3664f729603aee2afee20587e902bb7b921089c075214b49f42a132f.png)

而他的实际合约为

![](https://storage.googleapis.com/papyrus_images/b9595a4d2afc2f09045cd45716343e7eee7917f1a21edfabb2e3d31d2fe78566.png)

这个名字我总感觉有点眼熟，是不是之前就有这种攻击案例。

那么为什么要部署一个代理合约而不是重新部署一份呢？

当然是为了省下GAS费啊！部署一个真实的NFT合约需要接近130u的gas，但是部署一个代理合约只需要60u。是不是骑着单车去酒吧？

总结
--

其实说来说去，很多人都是不愿意承认自己的操作，大部分人认为一个网站，长的像官网，就是官网，就会默认放心所有的操作，往往是这种粗心，才会导致人财两空。这种攻击手段就是非常简单的钓鱼攻击，用一个小小的鱼饵，往往就可以钓到很多大鱼。

最后
--

欢迎关注我的推特：[BoxMrChen](https://twitter.com/BoxMrChen),微博：[DEFI劝退师](https://weibo.com/u/6506788195)

如果觉得我写的不错，欢迎请我喝一杯咖啡：0x954F1D97aE9c4a27d012e70cCaAfde29822B3F2B

如果有什么技术方面想要交流的，随时都欢迎私信我。

---

*Originally published on [Box ⛩️](https://paragraph.com/@box/nft-nft)*
