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