内网安全攻防:渗透测试指南——第2章内网信息收集


目录

2.1.工作组手动信息收集

1.查询网络配置信息

2.查询操作系统及安装软件的版本信息

3.查询本机服务信息

4.查询进程列表

5.查看启动程序信息

6.查看计划任务

7.查看主机开机时间

8.查看用户

9.列出或断开本地计算机和连接的客户端的会话

10.查询端口列表

11.查询补丁列表

12.查询本机共享

13.查询路由表及所有可用接口的 ARP 缓存表

14.查询防火墙相关配置

15.查看计算机代理配置情况

16.查询并开启远程连接服务

2.2自动信息收集

2.3 查询当前权限

1.查看当前权限

2.获取域 SID

3.查询指定账户的详细信息

2.4 判断是否有域

1.使用 ipconfig 命令

2.查看系统详细信息

3.查询当前登录域及登录用户信息

4.判断主域

2.5 探测域内存活主机

1 利用 NetBIOS 快速探测内网

2.利用 ICMP 协议快速探测内网

3 通过 ARP 扫描探测内网

1.arp脚本

2.EmpireEmpire 中的 arpsan 模块

3.Nishang 中的 Invoke-ARPScan.ps1 脚本

4 通过常规 TCP/UDP 端口扫描探测内网

2.6 扫描域内端口

1.telnet扫描

2.S扫描器

3 Metasploit 端口扫描

4.powersploit扫描

5.nishang端口扫描

6 端口 Banner 信息


脚本下载地址     2.Empire下的信息收集  
  1.   (Empire: W12MRC5H) > usemodule situational_awareness/host/winenum
  2.   (Empire: powershell/situational_awareness/host/winenum) > execute

     

bugtraq exploit-db           参考链接                                                          

目录

2.7收集域内基础信息

1.查询域

?2.查询此域内所有计算机

?3.查询域内所有用户组列表

4.查询所有域成员计算机列表

?5.获取域密码信息

?6.获取域信任信息

2.8 查找域控制器

1.查看域内控制器的机器名

?2.查看域控制器的主机名

?3.查看当前时间

?4.查看域控制器组

 

2.9 获取域内的用户和管理员信息

1.向域控制器进行查询

?2.获取域内用户详细信息

?3.查看存在的用户

?4.查询域内置本地管理员组用户

2.9.2 查询域管理员用户组

1.查询域管理员用户

?2.查询管理员用户组

2.10 定位域管理员

1.psloggedon.exe

2.pveFindADUser.exe

3.netview.exe

4.Nmap 的 NSE 脚本

5.PowerView

6.Empire 下的 user_hunter 模块

2.11 查找域管理进程

1.获取域管理员列表

?2.列出本机所有进程及进程用户

3.寻找是否有进程所有者为域管理员的进程

2.11.2 查询域控制器的域用户会话

1.查询域控制器列表

2.收集域管理员列表

?3.收集所有活动域会话列表

4.交叉引用域管理员列表与活动会话列表

 

2.11.3 扫描远程系统上运行的任务

2.11.4 扫描远程系统上 NetBIOS 信息

2.12 模拟域管理员方法简介

2.13 利用 PowerShell 收集域信息

1.powershell

?2.PowerView


下载链接
  1.   psloggedon [-] [-l] [-x] [\\computername|username]
  2.    
  3.   -:显示支持的选项和用于输出值的单位。
  4.   -l:仅显示本地登录,不显示本地和网络资源登录。
  5.   -x:不显示登录时间。
  6.   \\computername:指定要列出登录信息的计算机的名称。
  7.   Username:指定用户名,在网络中搜索该用户登录的计算机。

2.pveFindADUser.exe

 
  1.   pveFindADUser.exe <参数>
  2.   -h:显示帮助。
  3.   -u:检查是否有更新版本的实用程序。
  4.   -current [''username'']:如果仅指定了-current 参数,将获取所有目标计算机上当前登录的所有用户。如果指定了用户名(DOMAIN\Username),则显示该用户登录的计算机。
  5.   -last [''username'']:如果仅指定了-last 参数,将获取目标计算机上的最后一个登录用户。如果指定了用户名(DOMAIN\Username),则显示具有此用户账户作为上次登录的计算机。根据网络的策略,可能会隐藏最后一个登录用户名,且该工具可能无法得到该用户名。
  6.   -noping:阻止该工具在尝试获取用户登录信息之前对目标计算机执行 ping 命令。
  7.   -target:可选参数,用于指定要查询的主机。如果未指定此参数,将查询当前域中的所有主
  8.   机。如果指定此参数,则后跟一个由逗号分隔的主机名列表
  9.    
  10.    
  11.   pveFindADUser.exe 可用于查找 Active Directory 用户登录的位置,枚举域用户,以及查找在特定计算机上登录的用户,包括本地用户、通过 RDP 登录的用户、用于运行服务和计划任务的用户账户。运行该工具的计算机需要具有.NET Framework 2.0,并且需要具有管理员权限。
       

3.netview.exe

  netview.exe 是一个枚举工具,使用 WinAPI 枚举系统,利用 NetSessionEnum 找寻登录会话,利用 NetShareEnum 找寻共享,利用 NetWkstaUserEnum 枚举登录的用户。同时,netview.exe 能够查询共享入口和有价值用户。netview.exe 的绝大部分功能不需要管理员权限即可执行,下载地址为 https://github.com/mubix/netview    
  1.   netview.exe <参数>
  2.   -h:显示帮助菜单。
  3.   -f filename.txt:指定从中提取主机列表的文件。
  4.   -e filename.txt:指定要排除的主机名文件。
  5.   -o filename.txt:将所有输出重定向到文件。
  6.   -d domain:指定从中提取主机列表的域。如果没有指定,则使用当前域。
  7.   -g group:指定用户搜寻的组名。如果没有指定,则使用 Domain Admins。
  8.   -c:检查对已找到共享的访问权限。

 

4.Nmap 的 NSE 脚本

如果有域账户或者本地账户,就可以使用 Nmap 的 smb-enum-sessions.nse 引擎来获取远程机器的登录会话,并且不需要管理员权限。smb-enum-sessions.nse 的下载地址为 https://nmap.org/nsedoc/scripts/smb-enum-sessions.html    
  1.   smb-enum-domains.nse:对域控制器进行信息收集,可以获取主机信息、用户、密码策略可以使用的用户等。 smb-enum-users.nse:在进行域渗透测试的时候,如果获取了域内某台主机的权限,但是权限有限,不能获取更多的域用户信息,就可以借助这个脚本对域控制器进行扫描。 ? smb-enum-shares.nse:遍历远程主机的共目录。
  2.   smb-enum-processes.nse:对主机的系统进程进行遍历。通过这些信息,可以知道目标主机上运行软件信息,选择合适的漏洞或者规避防火墙及杀毒软件。
  3.   smb-enum-sessions.nse:获取域内主机的用户登录会话,查看当前是否有用户登录。
  4.   smb-os-discovery.nse:收集目标主机的操作系统、计算机名、域名、全称域名、域林名称、NetBIOS 机器名、NetBIOS 域名、工作组、系统时间。

5.PowerView

 
  1.   C:\Users\Administrator\Downloads>powershell.exe -exec bypass -Command "& " #cmd未执行成功
  2.   PS C:\Users\Administrator\Downloads> .\powerview.ps1
  3.   PS C:\Users\Administrator\Downloads> Import-Module .\powerview.ps1
  4.    
  5.    
  6.   Invoke-StealthUserHunter :只需要一次查询,就可以获取域内的所有用户。从user.HomeDirectories 中提取所有用户,并对每个服务器进行 Get-NetSessions 获取。因为不需要使用 Invoke-UserHunter 对每台机器进行操作,所以这个方法的隐蔽性相对较高,但涉及的机器面不一定完整。默认使用 InvokeStealthUserHunter,如果找不到需要的信息,就
  7.    
  8.   接着使用 Invoke-UserHunter 方法。
  9.   Invoke-UserHunter:找到域内特定的用户群。它接收用户名、用户列表或域组查询,并接收一个主机列表或查询可用的主机域名。它会使用 Get-NetSessions 和 Get-NetLoggedon(调用 NetSessionEnum 和 NetWkstaUserEnum API)扫描每个服务器,而且会比较结果,筛选出目标用户集。使用这个工具是不需要管理员权限的。在本地绕过执行该脚本
   

6.Empire 下的 user_hunter 模块

 
  1.   (Empire: agents) > interact EHVMZDT8
  2.   (Empire: EHVMZDT8) > usemodule situational_awareness/network/powerview/user_hunter
  3.   (Empire: powershell/situational_awareness/network/powerview/user_hunter) > execute

2.11 查找域管理进程

 

1.获取域管理员列表

net group "Domain Admins" /domain 
 

2.列出本机所有进程及进程用户

3.寻找是否有进程所有者为域管理员的进程

   

2.11.2 查询域控制器的域用户会话

查询域控制器的域用户会话,其原理是:在域控制器中查询域用户会话列表,并将其与域管理员列表交叉引用,从而找出域管理会话的系统列表。在这里,必须查询所有域控制器。  

1.查询域控制器列表

net group "Domain Controllers" /domain     #使用 LDAP 查询从 Domain Controllers 单元收集的域控制器的列表。也可以使用 net 命令查询域控制器列表
 

2.收集域管理员列表

使用 LDAP 进行查询。也可以使用 net 命令从域管理员组中收集域管理员列表,如下所示。

net group "Domain Admins" /domain 
 

3.收集所有活动域会话列表

Netsess.exe –h    #使用 Netsess.exe 查询每个域控制器,收集所有活动域会话列表。Netsess 是一个很棒的工具,它包含了本地Windows 函数 netsessionenum。该函数可以返回活动会 话的 IP 地址、域户、会话开始时间和空闲时间。
 

4.交叉引用域管理员列表与活动会话列表

  1.   FOR /F %i in (dcs.txt) do @echo [+] Querying DC %i && @netsess -h %i 2>nul > sessions.txt && FOR /F %a in (admins.txt) DO @type sessions.txt | @findstr /I %a
  2.    
  3.   type sessions.txt
  4.    
  5.   将域控制器列表添加到 dcs.txt 中,将域管理员列表添加到 admins.txt 中,并和 netsess.exe 放在同一个目录下。运行如下脚本后,会在当前目录下生成一个 sessions.txt 文本文件

 

2.11.3 扫描远程系统上运行的任务

如果渗透目标在域系统上使用共享本地管理员账户运行后,可以用下列脚本来扫描系统中的域管理任务。
  1.   net group "Domain Admins" /domain #先从“域管理员”组中收集域管理员的列表
  2.    
  3.   FOR /F %i in (ips.txt) DO @echo [+] %i && @tasklist /V /S %i /U user /P password 2>NUL > output.txt && FOR /F %n in (names.txt) DO @type output.txt | findstr %n > NUL && echo [!] %n was found running a process on %i && pause #ips.txt 填入目标域系统的列表,在names.txt 填入收集来的域管理员的列表

   

2.11.4 扫描远程系统上 NetBIOS 信息

在一些 Windows 系统中,允许用户通过 NetBIOS 查询已登录用户。下面这个 Windows 命令行脚本将扫描远程系统活跃域管理会话。

同样,先收集域管理员列表,然后将目标域系统列表添加到 ips.txt 文件中,将收集到的域管 理员列表添加到 admins.txt 文件中,并置于同一目录下
  1.   for /F %i in (ips.txt) do @echo [+] Checking %i && nbtstat -A %i2>NUL >nbsessions.txt && FOR /F %n in (admins.txt) DO @type nbsessions.txt | findstr /I %n > NUL && echo [!] %n was found logged into %i
  2.    
  3.   for /F %i in (ips.txt) do @echo [+] Checking %i && nbtscan -f %i 2>NUL >nbsessions.txt && FOR /F %n in (admins.txt) DO @type nbsessions.txt | findstr /I %n > NUL && echo [!] %n was found logged into %i
  4.   #目标域系统列表添加到 ips.txt 文件中,将收集到的域管理员列表添加到 admins.txt 文件

2.12 模拟域管理员方法简介

如果有一个 meterpreter 会话,可以使用 Incognito 模拟域管理员,或添加一个新的域管理员。通过尝试遍历系统中所有可用的授权令牌来随意添加新的管理员。具体操作方法在第四章
   

2.13 利用 PowerShell 收集域信息

1.powershell

  1.   Get-ExecutionPolicy 查看powershell权限
  2.   Set-ExecutionPolicy Unrestricted 设置权限
  3.    
  4.   Restricted:默认设置,不允许执行任何脚本。
  5.   Allsigned:只能运行经过证书验证的脚本。
  6.   Unrestricted:权限最高,可以执行任意脚本。
  7.   RemoteSigned:本地脚本无限制,但是对来自网络的脚本必须经过签名。

 

2.PowerView

PowerView 是一款依赖 PowerShell 和 WMI 对内网域情况进行查询的常用渗透脚本  
  1.   PowerView 中的常用命令如下。
  2.   Get-NetDomain:获取当前用户所在的域名称。
  3.   Get-NetUser:返回所有用户的详细信息。
  4.   Get-NetDomainController:获取所有域控制器。
  5.   Get-NetComputer:获取所有域内机器的详细信息。
  6.   Get-NetOU:获取域中的 OU 信息。
  7.   Get-NetGroup:获取所有域内组和组成员信息。
  8.   Get-NetFileServer:根据 SPN 获取当前域使用的文件服务器。
  9.   Get-NetShare:获取当前域内所有网络共享。
  10.   Get-NetSession:获取在指定服务器存在的会话信息。
  11.   Get-NetRDPSession:获取在指定服务器存在的远程连接信息。
  12.   Get-NetProcess:获取远程主机的进程信息。
  13.   Get-UserEvent:获取指定用户的日志信息。
  14.   Get-ADObject:获取活动目录的对象信息。
  15.   Get-NetGPO:获取域所有组策略对象。
  16.   Get-DomainPolicy:获取域默认或域控制器策略。
  17.   Invoke-UserHunter:用于获取域用户登录计算机及该用户是否有本地管理权限。
  18.   Invoke-ProcessHunter:查找域内所有机器进程用于找到某特定用户。
  19.   Invoke-UserEventHunter:根据用户日志获取某域用户登录过哪些域机器。