JavaScript 不可用。

我们检测到浏览器禁用了 JavaScript。请启用 JavaScript 或改用支持的浏览器来继续访问

BH 资金池攻击原理分析

作者:Anban Chu

发表日期:2023年10月21日

所属目录:黑客攻击

攻击描述

相关地址

攻击过程技术分析

01.攻击合约 A 调用 攻击合约 B 的 0xe4dcedb7 函数借 1,521,678 USDT,资金转到攻击 A 的地址

发送方 0x26d0c6...77185618(DPPOracle) 接收方 0xf04073...c4924300 For 641,315 (BSC-USD)
发送方 0xFeAFe2...eBb5d681 接收方 0xf04073...c4924300 For 32,965 (BSC-USD)
发送方 0x9ad32e...52E4e69A 接收方 0xf04073...c4924300 For 623,095 (BSC-USD)
发送方 0x6098A5...4EC6B476 接收方 0xf04073...c4924300 For 72,524 (BSC-USD)
发送方 0x81917e...0f05fC1d 接收方 0xf04073...c4924300 For 151,778 (BSC-USD)

发送方 0xf04073...c4924300 接收方 0x216Ccf...1576480C For 1,521,678.716 (BSC-USD)

此时攻击 A 地址内 USDT 金额为 1,521,678.716

02. 从 PancakePair 和 PancakeV3Pool 分别借 10,000,000 和 15,000,000 到攻击 A 的地址


发送方 0x16b9a8...D1eb0daE 接收方 0x216Ccf...1576480C For 10,000,000 (BSC-USD)
发送方 0x4f31Fa...a4Be40Eb 接收方 0x216Ccf...1576480C For 15,000,000 (BSC-USD)

此时攻击 A 地址内 USDT 金额为 26521678.716

03. 攻击地址 A 转移 n 个 USDT 到被攻击合约 X(共 12 次)

一共投入了 12 次,投入 USDT 金额分别是 10,20,40,80,160,280,500,1000,1500,2000,3000,5000。合计投入了 13590 USDT

被攻击合约内部的收到资金的逻辑是

  • 10% USDT 转移到 0xc9fc938bcf691affa79c9fec3d1719f6297fa20e
  • 60% USDT 转移到 USDT/BH-LP 合约中。(LP 的 BH 由被攻击合约提供)
  • 30% USDT 购买 BH
    • 其中 66.66 % BH 给一个地址
    • 其中 33.33 % BH 给评分给 N 个地址

投入记录如下:


  • 第 1 次 10 USDT Alt text
  • 第 2 次 20 USDT Alt text
  • 第 3 次 40 USDT Alt text
  • 第 4 次 80 USDT Alt text
  • 第 5 次 160 USDT Alt text
  • 第 6 次 280 USDT Alt text
  • 第 7 次 500 USDT Alt text
  • 第 8 次 1000 USDT Alt text
  • 第 9 次 1500 USDT Alt text
  • 第 10 次 2000 USDT Alt text
  • 第 11 次 3000 USDT Alt text
  • 第 12 次 5000 USDT Alt text

攻击合约存入前:一些数据快照

  • LP 状态(BH 价格是: $0.01041031866/个)
    • USDT 余额: 1,393,467 USDT(139 万)
    • BH 余额: 133,854,404 BH(13385 万)
  • 被攻击合约状态
    • BH 余额: 99,671,998,587(996.71998 亿)

攻击合约存入 12 次后:一些数据快照

  • LP 状态(BH 价格是: $0.01047103071/个)
    • USDT 余额: 1,405,698 USDT(140 万)
    • BH 余额: 134,246,383 BH(13424 万)
  • 被攻击合约状态
    • BH 余额: 99,671,360,714(996.71360 亿)

04. 攻击合约 A 调用被攻击合约 X.0x33688938 ,添加 300 万 USDT

攻击合约存入 300 万 后:一些数据快照

  • LP 状态(BH 价格是: $0.01753354945/个)
    • USDT 余额: 4,405,698 USDT(440 万)
    • BH 余额: 251,272,454 BH(2.51272 亿)
  • 被攻击合约状态
    • BH 余额: 99,554,191,596 (995.54191 亿)
  • 攻击合约添加了 LP 数量 19,487,579 Alt text

此时价格涨到了 $0.17,用户手里的 BH 余额为 66,274,929(6627 万,注意这个金额数量)

05. 通过 PancakeSwap 将 22,000,000 USDT 兑换成 209,261,023 BH

购买后:一些数据快照

  • LP 状态(BH 价格是: $0.62853602868/个)
    • USDT 余额: 26,405,698 USDT(2640 万)
    • BH 余额: 42,011,431 BH( 4200 万,注意这个金额数量)
  • 购买后 0x5b9dd1de70320b1ea6c8bbeba12bf4e246227999 收到 209,261,135 BH

Alt text

注意:此时 LP 被踢出了 2.09 亿的 BH。此时价格涨到了 $0.62853602868。此时用户手里的 BH 额度是 6627 万,而被攻击合约的 LP 内的额度只有 4200 万。 用户即使全部解锁,还会剩余 2426.3498 万。

目前攻击地址 0x216ccfd4fb3f2267677598f96ef1ff151576480c 内还剩余 22,080,807 BH

06. 调用 10 次被攻击合约的 0x4e290832 方法卖出 BH 代币

10 次操作,每次操作之前的 LP 内 BH 金额是

  1. LP 内 BH 金额是 42,011,431,开始卖 BH
    1. 攻击合约 0x216 卖掉 23,106,287 BH 到被攻击合约 0x8ca78
    2. 攻击者收到 12,379,812 USDT(1237.98 万)
    3. LP 内
      1. 还剩 11,841,212 USDT(1184.12 万)
      2. 还剩 18,839,354 BH(1883.93 万)
  2. LP 内 BH 金额是 20,060,716,开始卖 BH
  3. LP 内 BH 金额是 9,578,655,开始卖 BH
  4. LP 内 BH 金额是 4,573,427,开始卖 BH
  5. LP 内 BH 金额是 2,183,524,开始卖 BH
  6. LP 内 BH 金额是 1,042,446,开始卖 BH
  7. LP 内 BH 金额是 497,654,开始卖 BH
  8. LP 内 BH 金额是 237,564,开始卖 BH
  9. LP 内 BH 金额是 113,400,开始卖 BH
  10. LP 内 BH 金额是 54,128,开始卖 BH
    1. 操作后 LP 剩余 USDT: 39,780
    2. 操作后 LP 剩余 BH: 24,261

Alt text

被攻击合约描述

漏洞分析

修复方式/安全建议/反思

相关阅读

相关攻击





以上就是本篇文章的全部内容了,希望对你有帮助。

>> 本站不提供评论服务,技术交流请在 Twitter 上找我 @anbang_account