许多加密货币交易所为其用户提供不同类型的钱包。每种钱包类型都用于特定的活动,例如现货交易、期货交易、资金、礼物等。利用本文中的漏洞非常重要的一点就是了解现货和期货交易。这是因为将资金从一种钱包类型转移到另一种时,就有机会挖掘到漏洞。
现货交易是比特币或以太坊等加密货币的经典买卖。你设定价格来购买或出售你的代币,交易所将你与买家或卖家相匹配。
例如,您想以市场价格购买 BTC。你下订单,交易所立即从另一位交易者那里卖给你 BTC。
期货交易是关于买卖特定合约。这些合约代表以特定价格购买或出售代币的交易。
例如,假设您购买了比特币期货合约。合同规定,从现在起 6 个月你将以 20,000 美元的价格购买 BTC。如果 BTC 在 6 个月涨到 40 000 美元,您可以使用期货合约以 50% 的折扣购买 BTC!或者,如果价格降到达到 10 000 美元,您将在交易中失败,因为您需要为 1 个比特币支付两倍的价格。
请注意,拥有期货合约意味着仅拥有合约,而不是文档中提到的数字资产。
当您在现货和期货钱包之间转移资金时会出现此错误。基本上,您可以以一种错误地舍入数字的方式弄乱转账金额。如果你调整得当,你可以无限制地增加资产的数量。
获取余额超过 0 美元的任何现货或期货钱包。然后,通过使用 Burp Suite 处理请求来启动数据传输。在我们的示例中,我们将使用 1 USDT:
然后将其发送到重放功能模块进行进一步测试。
尝试编辑“金额”并检查服务器响应:
如果服务器状态为 200,则一切正常:
您会注意到可以使用小于系统默认值(小数点后十个符号)的金额进行转账。
这是因为四舍五入的问题。十进制数包含不超过 10 位数字。任何低于 0,000000005 的数字都低于最低要求。因此,它将四舍五入到最接近的可用数字。
当您发送带有操纵数字的请求时,两个钱包都会执行不同的舍入逻辑:
在这种情况下,服务器首先检查“来自”钱包的余额。
当钱包分析他们发送和接收的金额时,他们对负数和正数的看法不同:
只要小数点后的数字超过 9 个,“发件人”钱包就会不断将数字四舍五入为 0:
要自动执行此漏洞利用,您可以在 Burp Intruder 中设置空负载攻击。不要太快发送请求,因为交易所的 WAF 可以检测到它们。一旦找到发送请求的正确速度,您就可以计算提取一美元需要多少时间。
此漏洞适用于任何交易所加密货币,甚至 BTC。因此,您可以通过使用比特币进行渗透测试来最大化影响。
当攻击者在钱包中积累了足够的资金时,他们可以从交易所提取资金。在这种情况下,交易所的热钱包必须转移资金。如果恶意行为者自动执行此漏洞利用,他们可以耗尽交易所的钱包。
为了增加此错误报告的严重性,我们建议做两件事:
推荐阅读
如有侵权,请联系删除
星球部分精华内容推荐
其他更多精彩内容,欢迎加入我们的星球