前言
在内网渗透测试中,信息收集的深度与广度,直接关系到整个内网渗透测试的成败,本篇文章主要对内网信息收集做简单介绍~
一、内网信息描述
当渗透测试人员进入内网后,面对的是一片“黑暗森林”,所以渗透测试人员首先会对当前所处的网络环境进行判断,通常的判断分为三种:
- 我是谁?——对机器角色的判断。
- 这是哪?——对目前机器所处网络环境的拓扑结构进行分析和判断。
- 我在哪?——对目前机器所处位置区域的判断。
对机器角色的判断,是指判断已经控制的机器是普通Web服务器、开发测试服务器、公共服务器、文件服务器、代理服务器、DNS服务器还是存储服务器等。具体的判断是通过对机器内的主机名、文件、网络连接等多种情况综合进行的。 对目前机器所处网络环境的拓扑结构进行分析和判断,是指需要对所处内网进行全面的数据收集及分析整理,绘制出大概的内网整体拓扑结构图,以便后期进行进一步的内网渗透和准确定位内网具体目标,从而完成渗透测试 对目前机器所处位置区域的判断,是指判断机器处于网络拓扑中的哪个区域,是在DMZ区、办公网,还是核心区核心DB等位置。当然,这里的区域并不是绝对的,只是一个大概的环境,不同位置的网络环境不一样,区域的界限也不一定明显。
二、收集本机信息
不管是在外网中还是内网中,信息收集都是重要的第一步。当渗透测试人员成功控制一台机器后,其内网结构如何、这台机器是什么角色的、使用机器的人是什么角色的、机器上安装的是什么杀毒软件、机器是通过什么方式上网的、机器是笔记本还是台式机等,都需要通过信息收集来获取。
1、手动收集信息
本机信息包括主机的系统、权限、内网分配P地址段、安装的软件杀毒、端口、服务、补丁更新频率、网络连接信息、共享、会话等。如果是域内主机,系统、软件、补丁、服务、杀毒一般都是批量安装的。通过收集本机的相关信息,可以进一步了解整个域的操作系统版本、软件、补丁、用户命名方式等。
查询网络配置信息
执行如下命令,可以获取当前机器是否处在内网中、有几个内网、内网段分别是多少、是否是域内网、网关IP地址、DNS指向的IP地址等信息,如图所示:
代码语言:javascript复制ipconfig /all
查询操作系统版本
获取操作系统和版本信息
代码语言:javascript复制systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本"
执行以上命令,可以看到当前系统为Windows Server 2008 R2 Enterprise。如果是英文操作系统,则输入如下命令:
代码语言:javascript复制systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
查看系统体系结构
执行如下命令,查看系统体系结构,如下图所示:
代码语言:javascript复制echo %PROCESSOR_ARCHITECTURE%
安装软件版本信息
使用wmic命令,可以将结果输出到文本中,具体如下,如下图所示:
代码语言:javascript复制wmic product get name,version
也可以利用PowerShell命令,收集软件版本信息条具体如下,如下图所示:
代码语言:javascript复制powershell "Get-WmiObject -class Win32_Product |Select-Object -Property name,version"
查询本机服务信息
执行如下命令,查询本机服务信息,如下图所示:
代码语言:javascript复制wmic service list brief
查询进程列表信息
执行如下命令,可以查看当前进程列表和进程用户,分析软件、邮件客户端、VPN和杀毒软件等进程,如下图所示:
代码语言:javascript复制tasklist /v
执行如下命令也可以查看进程信息:
代码语言:javascript复制wmic process list brief
一般来说,域内的较件和杀毒软件应该是一致的,常见的杀毒软件进程,如下表所示:
查看启动程序信息
执行如下命令查看启动程序信息,如下图所示:
代码语言:javascript复制wmic startup get command,caption
查看计划任务信息
执行如下命令,查看计划任务,如下图所示:
代码语言:javascript复制schtasks /query /fo LIST /v
PS:如果遇到资源无法加载问题,则是由于当前活动页码所致:
之后,我们可以将活动页码修改为437即可:
代码语言:javascript复制chcp 437
之后再次执行即可查看到相关计划任务信息:
查看主机开机时间
执行如下命令,查看主机开机时间,如下图所示:
代码语言:javascript复制net statistics workstation
查询用户列表信息
执行如下命令,查看本机用户列表,通过分析本机用户列表,可以找出内部网络机器名的命名规则,特别是个人机器,可以推测出整个域的用户命名方式:
代码语言:javascript复制net user
执行如下命令,获取本地管理员(通常含有域用户)信息:
代码语言:javascript复制net localgroup administrators
执行如下命令,查看当前在线用户信息
代码语言:javascript复制query user || qwinsta
查客户端会话信息
执行如下命令(需要管理员权限才行),列出或断开本地计算机和连接的客户端的会话,如下图所示:
代码语言:javascript复制net session
查询端口列表信息
执行如下命令,查看端口列表、本机开放的端口所对应的服务和应用程序:
代码语言:javascript复制netstat –ano
从上图可以看到当前机器和哪些主机进行了连接以及TCP-UDP等端口使用、监听情况。还可以通过网络连接来进行初步的判断,如代理服务器可能会有很多机器来连代理端口、更新服务器(例如WSUS)可能开放更新端口8530、DNS服务器会开放53端口等,再根据其他信息进行综合判断。
查询补丁列表信息
执行如下命令,查看系统的详细信息,需要注意系统的版本、位数、域、补丁信息及跟新频率等。一般域内主机的补丁都是批量安装的,通过查看本地计算机补丁列表,可以找到未打补丁的漏洞,当前更新了2个补,如下图所示
代码语言:javascript复制Systeminfo
同时,也可以使用wmic来识别安装在系统中的补丁情况,命令如下图所示:
代码语言:javascript复制wmic qfe get Caption,Description,HotFixID,InstalledOn
从上面的执行结果,我们可以看到补丁的名称、描述、补丁ID、安装时间等信息。
查看本机共享信息
执行如下命令,可查看本机共享列表和可访问的域共享列表(域内共享有很多时候是相同的),如下图所示:
代码语言:javascript复制net share
利用wmic查找共享,命令如下:
代码语言:javascript复制wmic share get name,path,status
查询路由和缓存表
执行如下命令,查询路由表及所有可用接口的ARP(地址解析协议)缓存表:
代码语言:javascript复制route print
代码语言:javascript复制
代码语言:javascript复制arp -A
查询防火墙配置
关闭防火墙:
Windows Server 2003系统及以前版本,命令如下:
代码语言:javascript复制netsh firewall set opmode disable
Windows server 2003之后系统版本,命令如下:
代码语言:javascript复制netsh advfirewall set allprofiles state off
查询防火墙配置
代码语言:javascript复制netsh firewall show config
修改防火墙配置
Windows Server 2003系统及之前版本,允许指定程序全部链接,命令如下:
代码语言:javascript复制netsh firewall add allowedprogram c:nc.exe "allow nc" enable
Windows server 2003 之后系统版本,情况如下:
允许指定程序连入,命令如下:
代码语言:javascript复制netsh advfirewall firewall add rule name="pass nc" dir=in action=allow program="C: nc.exe"
代码语言:javascript复制
允许指定程序连出,命令如下:
代码语言:javascript复制netsh advfirewall firewall add rule name="Allow nc" dir=out action=allow program="C: nc.exe"
允许 3389 端口放行,命令如下
代码语言:javascript复制netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow
#####自定义防火墙日志存储位置
代码语言:javascript复制netsh advfirewall set currentprofile logging filename "C:windowstempfw.log"
####查询远程连接服务 #####查看远程连接端口 在cmd下使用注册表查询语句,命令如下,得到连接端口为0xd3d,转换后为3389,如下图所示:
代码语言:javascript复制REG QUERY "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal ServerWinStationsRDP-Tcp" /V PortNumber
netsh advfirewall set currentprofile logging filename "C:windowstempfw.log"
netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow
netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow
netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow
在Windows Server 2003中开启3389端口:
方法一: 查看开启的端口——没有开启3389端口
执行语句:
代码语言:javascript复制wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1
执行结果:
成功开启3389端口:
wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%'
call SetAllowTSConnections 1
wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%'
call SetAllowTSConnections 1
方法二: 查看开启端口————未开启3389:
执行语句:
代码语言:javascript复制REG ADD HKLMSYSTEMCurrentControlSetControlTerminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
执行结果:
查看端口开放情况————成功开启3389端口:
在Windows Server 2008 和 Windows Server 2012 中开启 3389 端口 查看当前开发端口———未开放3389端口
之后执行如下命令来开启3389端口——管理员权限执行否则会报错
代码语言:javascript复制wmic /namespace:\rootcimv2terminalservices path win32_terminalservicesetting where (__CLASS !="") call setallowtsconnections 1
代码语言:javascript复制wmic /namespace:\rootcimv2terminalservices path win32_tsgeneralsetting where (TerminalName='RDP-Tcp') call setuserauthenticationrequired 1
代码语言:javascript复制reg add "HKLMSYSTEMCURRENTCONTROLSETCONTROLTERMINAL SERVER" /v fSingleSessionPerUser /t REG_DWORD /d 0 /f
REG ADD HKLMSYSTEMCurrentControlSetControlTerminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
之后成功开启3389端口:
2、自动化信息收集
为了简化操作,我们可以创建一个脚本来实现在目标机器上查询流程、服务、用户账号、用户组、网络接口、硬盘信息、网络共享信息、安装Windows补丁、程序在启动运行、安装的软件列表、操作系统、时区信息等信息。网络上有很多类似的脚本,当然,我们也可以自己定制一个。在这里推荐一个利用WMIC收集目标机信息的脚本。 WMIC(Windows Management Instrumentation Command-Line,Windows管理工具命令行)是Windows下最有用的命令行工具。WMIC对于信息收集和渗透都是非常实用的。默认任何版本的WindowsXP的低权限用户不能访问WMIC,Windows7以上版本允许低权限的用户访问WMIC并执行相关查询操作。 WMIC脚本的不载地址为http://www.fuzzysecurity.com/scripts/files/wmic_info.rar,执行脚本后,会将所有结果写入一个HTML文件,如下图所示:
3、Empire下主机信息收集
在 Empire 下也存在类似模块,输入“usemodule situational_awareness/host/winenum”命令即可查看本机用户、域组成员、最后的密码设置时间、剪贴板内容、系统基本信息、网络适配器信息、 共享信息等,如下图所示:
另外,situational_awareness/host/computerdetails 模块几乎列举了系统中的所有有用信息,如目标主机事件日志、应用程序控制策略日志,包括 RDP 登录信息、PowerShell 脚本运行和保存的信息等。在运行这个模块时需要管理员权限
三、查询当前权限
查看当前权限
查看当前权限,命令如下
代码语言:javascript复制whoami
获取了一台主机的权限后,会有以下三种情况:
- 本地普通用户:当前权限为 win-2008 本机的 user 用户:
- 本地管理员用户:当前权限为 win7-x64-test 本机的 administrator用户:
- 域内用户:当前权限为 hacke 域内的 administrator用户:
在这三种情况中,如果当前内网存在域,本地普通用户只能查询本机相关信息,不能查询域内信息。本地管理员用户和域内用户则可以查询域内信息。 其原理是:域内的所有查询都是通过域LDAP协议去域控制器进行查询的,而这个查询需要经过权限认证,所以,只有域用户才拥有这个权限;当域用户运行查询命令时,会自动使用 Kerberos协议进行认证,无须额外输入账号和密码。 本地管理员 administrator 权限可以直接提升为ntauthoritysystem 权限,因此,在域中,除了普通用户,所有机器都有一个机器用户,用户名是机器名后加“$”。在本质上,机器上的system用户对应的就是域里面的机器用户,所以,system权限是可以运行域内查询的相关命令的。 ###获取域SID 执行如下命令,获取域 SID:
whoami /all
可看到,当前域hacke的 SID为S-1-5-21-180313546-3823935851-3686928739,域用户user1的SID为 S-1-5-21-180313546-3823935851-3686928739-1106,如图 2-29 所示。
##判断是否有域 搜集完本机相关信息后,接下来,就要判断当前内网是否有域。如果有,需要判断所控主机是否在域内,下面讲解几种方法: ###使用ipconfig命令 执行如下命令,可以查看网关IP 地址、DNS的IP地址、本地地址是否和DNS服务器为同一网段、域名等,如下图所示:
代码语言:javascript复制ipconfig /all
然后,通过反向解析查询命令nslookup来解析域名的IP地址。使用解析出来的IP地址进行对比,判断域控制器和DNS服务器是否在同一台服务器上,如下图所示:
###查看系统详细信息 执行如下命令,来查看系统信息,如结果所示,域即域名,登录服务器为域控制器。如果域显示为 WORKGROUP,表示当前服务器不在域内,当前域名为 hacke.testlab:
代码语言:javascript复制Systeminfo
###判断主域 执行如下命令,判断主域,一般域服务器都会同时作为时间服务器:
代码语言:javascript复制net time /domain
运行该命令后,一般会有如下三种情况:
whoami /all
whoami /all
- 存在域,但当前用户不是域用户,提示说明权限不够,如下图所示:
- 存在域,并且当前用户是域用户,如下图所示:
- 当前网络环境为工作组,不存在域,如图 2-37 所示:
##探测域内存活主机 内网存活主机的探测是内网渗透中不可或缺的一个环节。在扫描的时候,应尽量避免使用Namp等工具进行暴力扫描,也不要在目标机器上使用图形化的工具,而要尽量使用目标系统自带的各种工具,推荐使用PowerShell脚本。对于Windows 7以下版本的系统,可以使用VBS 脚 本。在探测时,可在白天和夜间分别探测,以对比分析存活主机和对应的 IP 地址。 ###利用NetBIOS快速探测内网 NetBIOS是一种在局域网上的程序可以使用的应用程序编程接口(API),为程序提供了请求低级服务的统一的命令集,作用是给局域网提供网络及其他特殊功能。几乎所有的局域网都是在NetBIOS协议的基础上工作的。“NetBIOS”也是计算机的标识名,该名字主要用于局域网中计算机之间的相互访问。NetBIOS的工作流程是正常的机器名解析查询应答过程,推荐优先使用。 NetBIOS 的使用比较简单。将其上传到目标主机后,直接输入IP地址范围并运行,如下图所示:
显示结果的第一列为IP地址,第二列是机器名和所在域名,最后一列是关于机器所开启的服务的列表,具体含义如下表所示:
###利用 ICMP 协议快速探测内网 除了利用NetBIOS协议,还可以使用 ICMP 协议。依次对内网中的每个 IP 地址执行 ping 命 令,可以快速有效地找出内网中所有存活的主机。在实战中,可以使用如下命令循环探测整个 C 段,如下图所示:
for /L %I in (1,1,254) DO @ping -w 1 -n 1
192.168.174.%I | findstr "TTL="
也可以使用VBS脚本,代码如下:
代码语言:javascript复制strSubNet = "192.168.174."
Set objFSO= CreateObject("Scripting.FileSystemObject")
Set objTS = objfso.CreateTextFile("C:WindowsTempResult.txt")
For i = 1 To 254
strComputer = strSubNet & i
blnResult = Ping(strComputer)
If blnResult = True Then
objTS.WriteLine strComputer & " is alived ! :) "
End If
Next
objTS.Close
WScript.Echo "All Ping Scan , All Done ! :) "
Function Ping(strComputer)
Set objWMIService = GetObject("winmgmts:\.rootcimv2")
Set colItems = objWMIService.ExecQuery("Select * From Win32_PingStatus Where Address='" & strComputer & "'")
For Each objItem In colItems
Select case objItem.StatusCode
Case 0
Ping = True
Case Else
Ping = False
End select
Exit For
Next
End Function
在使用时,需要修改IP地址段,之后输入如下命令,添加参数/b 表示置于后台运行
代码语言:javascript复制cscript c:windowstemp1.vbs
该命令默认会把扫描结果写到C:WindowsTempResult.txt 文件中,相对而言速度很慢,不是很推荐,如下图所示:
四、扫描域内端口
通过查询目标主机的端口开放信息,不仅可以了解目标主机所开放的服务,还可以找出其开放服务的漏洞、分析目标的网络拓扑结构等,具体需要关注以下三点:
- 端口的Banner信息
- 端口上运行的服务
- 常见应用的默认端口 在进行内网渗测试时,通常会使用Metasploit内置的端口进行扫描。也可以上传端口扫描工具,使用工具进行扫描。当然,还可以根据服务器的环境,使用自定义的端口扫描脚本。在有授权的情况下,可以直接使用Nmap、masscan等端口扫描工具直接获取开放的端口信息。 ###利用Telnet命令进行扫描 Telnet协议是TCP/IP协议族的一员,是Internet远程登录服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在使用者计算机上使用Telnet程序,可以连接到目标服务器。如果只是想快速地探测某主机的某个常规高危端口是否开放,Telnet 命令是最方便的。Telnet命令的简单使用实例,如下图所示:
###Metasploit端口扫描 Metasploit包含多种端口扫描技术,与其他扫描工具接口良好。在msfconsole下运行“search portscan”命令,即可进行搜索。 在这里,使用 auxiliary/scanner/portscan/tcp 模块进行演示,如下图所示:
可以看到,Metasploit 的内置端口扫描模块能够找到系统和开放端口。 ###PowerSploit的 Invoke-portscan.ps1 PowerSploit中的Invoke-Portscan.ps1脚本,推荐使用无文件形式的扫描,如下图所示:
代码语言:javascript复制Invoke-Portscan -Hosts 192.168.174.0/24 -T 4 -ports '445,1433,8080,3389,80' -oA c:windowstempres.txt
Invoke-Portscan -Hosts 192.168.174.0/24 -T 4 -ports '445,1433,8080,3389,80' -oA c:windowstempres.txt
五、收集域内基础信息
确定了当前内网拥有的域,并且所控制的主机在域里面,就可以进行域内相关信息的收集了。因为这些查询命令本质上都是通过LDAP协议去域控制器上查询的,查询时候需要经过权限认证, 只有域用户才有这个权限,所以本地用户是无法运行以下命令的(system 权限用户除外。在域里面,除了普通用户,所有机器都有一个机器用户,用户名为机器名加“$”。system 用户对应的就是域里面的机器用户,所以 system权限用户可以运行以下查询命令)。
1、查询域
查询域的命令如下:
代码语言:javascript复制net view /domain
2、查询此域内所有计算机
执行如下命令,可以通过查询得到的主机名来对主机角色进行初步判断,如下图所示。例如,"dev"可能是开发服务器,"web"或者app可能是Web服务, "NAS"可能是存储服务器,"fileserver"可能是文件服务器等。
代码语言:javascript复制net view /domain:XXX
3、查询域内所有用户组列表
执行如下命令,查询域内所有用户组列表:
代码语言:javascript复制net group /domain
可以看到,该域含有 13 个组。系统自带的常见组如下:
- Domain Admins:域管理员组。
- Domain Computers:域内机器。
- Domain Controllers:域控制器。
- Domain Guest:域访客组,权限较低。
- Domain Users:域用户。
- Enterprise Admins:企业系统管理员用户。
4、查询所有域成员计算机列表
执行如下命令,查询所有域成员计算机列表:
代码语言:javascript复制net group "domain computers" /domain
5、获取域信任列表
执行如下命令,获取域信任列表信息:
代码语言:javascript复制nltest /domain_trusts
六、查找域控制器
1、查看域内控制器的机器名
执行如下命令,可以看到域控制器机器名为DC
代码语言:javascript复制nltest /DCLIST:xxx
2、查看域控制器的主机名
执行如下命令,可以看到域控制器主机名为 dc:
代码语言:javascript复制Nslookup -type=SRV _ldap._tcp
3、查看当前时间
一般时间服务器为主域控制器,执行如下命令:
代码语言:javascript复制net time /domain
4、查看域控制器组
执行如下命令,查看域控制器组。有一台域控制器的机器名为DC:
代码语言:javascript复制net group "Domain Controllers" /domain
七、定位域管理员
1、域内定位管理员概述
内网渗透测试与常规的渗透测试是截然不同的。内网渗透测试的需求是拿到内网中特定用户或特定机器的权限,进而获得特定资源,完成内网渗透测试任务。在通常的网络环境里,内网中部署了大量的网络安全设备,如IDS、IPS、日志审计、安全网关、反病毒软件等。所以,在域网络攻击测试场景中,如果渗透测试人员获取了域内的一个支点,为了实现对域网络的整体控制, 渗透测试人员就需要获取域管理员权限。
2、常用域管理员定位工具
假设已经在Windows域中取得了普通用户权限,希望在域内横向移动,想知道域内用户登录 的位置、他是否是任何系统中的本地管理员、他所归属的组、他是否有权访问文件共享等。枚举主机、用户和组,有助于我们更好地了解域内布局。 常用的工具有psloggedon.exe、pveFindADUser.exe、netsess.exe、hunter、NetView 等。在PowerShell中,常用的脚本是PowerView。
3、psloggedon.exe
在Windows中,可以使用命令“net session”查看谁在本地计算机上使用了资源,但是没有命令用来查看谁在使用远程计算机的资源、谁登录了本地或远程计算机。psloggedon.exe可以显示本地登录的用户和通过本地计算机或远程计算机的资源登录的用户。如果指定了用户名而不是计算机,psloggedon.exe会搜索网络邻居中的计算机,并显示该用户当前是否已登录,其原理是通过检 验注册表里HKEY_USERS项的key值来查询谁登录过机器(同样调用了NetSessionEnum API), 某些功能需要拥有管理员权限才能使用。psloggedon.exe的下载地址为https://docs.microsoft.com/en-us/sysinternals/downloads/psloggedon,使用如下命令及参数,如下图所示:
代码语言:javascript复制psloggedon [-] [-l] [-x] [\computername|username]
- -:显示支持的选项和用于输出值的单位。
- -l:仅显示本地登录,不显示本地和网络资源登录。
- -x:不显示登录时间。
- computername:指定要列出登录信息的计算机的名称。
- Username:指定用户名,在网络中搜索该用户登录的计算机。
4、pveFindADUser
pveFindADUser.exe 可用于查找 Active Directory 用户登录的位置,枚举域用户,以及查找在 特定计算机上登录的用户,包括本地用户、通过RDP 登录的用户、用于运行服务和计划任务的用户账 户。运行该工具的计算机需要具有.NET Framework 2.0,并且需要具有管理员权限。pveFindADUser.exe 的下载地址为 https://github.com/chrisdee/Tools/tree/master/AD/ADFindUsersLoggedOn,使用如下命令及参数,如下图所示:
代码语言:javascript复制pveFindADUser.exe <参数>
代码语言:javascript复制
- -h:显示帮助。
- -u:检查是否有更新版本的实用程序。
- -current [''username'']:如果仅指定了-current 参数,将获取所有目标计算机上当前登录的所 有用户。如果指定了用户名(DOMAINUsername),则显示该用户登录的计算机。
- -last [''username'']:如果仅指定了-last 参数,将获取目标计算机上的最后一个登录用户。如果指定了用户名(DOMAINUsername),则显示具有此用户账户作为上次登录的计算机,根据网络的策略,可能会隐藏最后一个登录用户名,且该工具可能无法得到该用户名。
- -noping:阻止该工具在尝试获取用户登录信息之前对目标计算机执行 ping 命令。
- -target:可选参数,用于指定要查询的主机。如果未指定此参数,将查询当前域中的所有主 机。如果指定此参数,则后跟一个由逗号分隔的主机名列表。
5、netview
netview.exe 是一个枚举工具,使用 WinAPI 枚举系统,利用 NetSessionEnum 找寻登录会话, 利用 NetShareEnum找寻共享,利用 NetWkstaUserEnum枚举登录的用户。同时,netview.exe 能够 查询共享入口和有价值用户。netview.exe 的绝大部分功能不需要管理员权限即可执行,下载地址为https://github.com/mubix/netview,使用如下命令及参数,如下图所示:
- -h:显示帮助菜单。
- -f filename.txt:指定从中提取主机列表的文件。
- -e filename.txt:指定要排除的主机名文件。
- -o filename.txt:将所有输出重定向到文件。
- -d domain:指定从中提取主机列表的域。如果没有指定,则使用当前域。
- -g group:指定用户搜寻的组名。如果没有指定,则使用 Domain Admins。
- -c:检查对已找到共享的访问权限。 PS:其他的就不再赘述和演示了,有兴趣的可以自我使用看看~
八、利用PowerShell收集域信息
PowerShell是微软推出的一款用于提高管理员对操作系统及应用程序易用性和扩展性的脚本环境,可以说是cmd.exe的加强版。微软已经将PowerShell 2.0 内置在Windows Server 2008 和 Windows 7中,将PowerShell 3.0内置在Windows Server 2012和 Windows 8中,将 PowerShell 4.0内置在 Windows Server 2012 R2 和 Windows 8.1 中,将PowerShell 5.0 内置在 Windows Server 2016 和 Windows 10 中。PowerShell 作为微软官方推出的脚本语言,在Windows系统中的强大众所周知:在系统管理员手中,可以提高Windows系统管理工作的自动化程度;在渗透测试人员手中, 便于渗透测试人员更好地绕过系统防护和相关反病毒软件。 如果想在 Windows 系统中执行一个 PowerShell 脚本,首先需要在Windows 系统的“开始菜 单”中打开“Run”对话框,输入“powershell”,如下图所示:
接下来,将弹出一个窗口,窗口上方有“Administrator”字样,代表当前 PowerShell 权限为管理员权限,如下图所示:
如果想执行一个PowerShell脚本,需要修改PowerShell的默认权限为执行权限。PowerShell常用的执行权限共有四种,具体如下:
- Restricted:默认设置,不允许执行任何脚本。
- Allsigned:只能运行经过证书验证的脚本。
- Unrestricted:权限最高,可以执行任意脚本。
- RemoteSigned:本地脚本无限制,但是对来自网络的脚本必须经过签名 在 PowerShell 中输入“Get-ExecutionPolicy”,看到为默认Restricted 权限,如下图所示:
将 PowerShell 执行权限改为 Unrestricted,输入"Y",如下所示:
PowerView是一款依赖PowerShell和WMI对内网域情况进行查询的常用渗透脚本。 PowerView集成在PowerSploit工具包中,下载地址为: https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1 打开一个PowerShell窗口,进入PowerSploit目录下的 Recon 目录,输入命令“ImportModule .PowerView.ps1”,成功导入脚本,没有报错,如下图所示:
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:根据用户日志获取某域用户登录过哪些域机器。
PS:PowerShell在内网渗透中还是很有用的,由于相关的内容过多就不再展开了~
九、总结
由于文章篇幅原因,这里不再多赘述其他内容了,至于内网渗透中信息收集的方法自然不仅仅局限于上面这些,有兴趣的可以做深入的了解与分析,同时GitHub上也有很多关于内网信息收集的方法与辅助脚本~
相关参考
《内网安全攻防》 《Metasploite渗透测试指南》 《PowerShell实战指南第三版》