🌐
经济型:买域名、轻量云服务器、用途:游戏 网站等 《腾讯云》特点:特价机便宜 适合初学者用
点我优惠购买
🚀
拓展型:买域名、轻量云服务器、用途:游戏 网站等 《阿里云》特点:中档服务器便宜 域名备案事多
点我优惠购买
🛡️
稳定型:买域名、轻量云服务器、用途:游戏 网站等 《西部数码》 特点:比上两家略贵但是稳定性超好事也少
点我优惠购买

apProve-attaCk-test — USDT 假充值攻击复现脚本
USDT充值攻击脚本/充值漏洞攻击/Node全源/USDT充值攻击脚本源码
一、这脚本是干什么的?
背景:一种常见的链上充值漏洞
很多 TRON 链上的收款系统(如 Telegram 机器人、自动发卡平台、交易所充值网关)通过监控链上交易来判断用户是否充值了 USDT。它们的逻辑通常类似:
交易来了 → 检查是不是 USDT 合约的交易 → 检查收款地址是不是自己 → 检查金额对不对 → 入账!
漏洞就在这里:TRON 链的 USDT(TRC-20 代币)合约有两种操作会触发链上交易:
| 操作 | 方法 | 是否发生代币转移 |
|---|---|---|
| 转账 | transfer(to, amount) |
✅ 是 |
| 授权 | approve(spender, amount) |
❌ 否 |
如果收款系统只检查了”有没有交易”和”金额对不对”,而没有检查交易类型(究竟是 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)
shouldPollResponse: false // 不等待确认,只广播
})
关键点:
- 不调用
transfer,只调用approve callValue: 0— 不转 TRX- 交易上链后会产生一条授权记录,但余额不发生任何变化
四、前置条件
| 要求 | 说明 |
|---|---|
| 💰 TRX 余额 | 至少 2 TRX(用于支付带宽费,实际消耗约 0.35 TRX) |
| ⚡ 能量 | 租赁约 35,000 energy(调用合约需要消耗能量) |
| 💵 USDT 余额 | 不需要持有任何 USDT |
| 🔑 用途 | 必须使用专用测试钱包,不要填主钱包私钥! |
💡 能量可以通过 TRON 链的能量租赁平台租用,费用极低(通常不到 1 TRX)。
五、使用方法
第一步:安装依赖
cd approve-attack-test
npm install
会自动安装 tronweb(TRON SDK)和 dotenv(环境变量加载)。
第二步:配置 .env
编辑 .env 文件,填入三个必填参数:
第三步:运行脚本
node approve.js
第四步:观察结果
脚本会输出类似:
=======================================================
USDT approve() 攻击复现测试
=======================================================
测试钱包地址 : TAbc123...
目标收款地址 : TXyz789...
approve 金额 : 10.06 USDT
测试钱包 TRX : 5.230000 TRX
提示:能量由租赁提供,TRX 仅用于带宽费(约 0.35 TRX)
正在构造 approve 交易...
正在广播交易(approve)...
=======================================================
✅ approve 交易已广播
=======================================================
TX Hash : 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。
七、注意事项
| ⚠️ 警告 | 说明 |
|---|---|
| 🔑 钱包安全 | 必须使用专用测试钱包,不要填任何有资产的真实钱包私钥 |
| 🌐 主网操作 | 本脚本直连 TRON 主网,每次运行消耗真实 TRX 手续费 |
| ⚡ 能量 | 确保租了足够的能量(35,000),否则会额外消耗 TRX 付能量费 |
| 📝 日志保留 | 保存 TX Hash 到 TronScan 查看完整交易记录 |
| 🔁 不可逆 | 区块链交易一旦广播就无法撤回 |
八、项目结构
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 环境变量 |
十、免责声明
本脚本仅供白帽子安全测试使用,用于验证自有系统的安全性。
- 请在获得授权的系统上测试
- 禁止用于任何非法或未经授权的攻击行为
- 使用本脚本产生的一切后果由使用者自行承担


文章版权声明:除非注明,否则均为AI虎哥的工具库原创文章,转载或复制请以超链接形式并注明出处。



还没有评论,来说两句吧...