内网渗透学习笔记
第一章
1.1
工作组
**概念:**将不同的计算机按功能(或部门)组成的一个计算机集合
**特点:**工作组没有集中管理的作用,所有计算机都是对等的(即没有客户机与服务机之分)
域
基本概念
一个具有安全边界的计算机集合(安全边界指一个域中的用户无法访问另一个域中的资源)
什么是域控制器
域中一台类似管理服务器的计算机
域控制器的特点
负责所有连入的计算机和用户的验证工作
存在有域内账户、密码等属于域内计算机的信息构成的数据库
可以有多个域控
域环境
域环境一般有:单域、父域和子域、域树、域森林、域名服务器
父域和子域的关系
一个父域包含多个子域,父域子域是相对关系,其中父域与子域的安全策略独立
域树
域树是多个域通过建立信任关系组成的集合
使用点好进行隔开,一个“.”代表一个层次,放在域名的最后子域称为最高子域或一级域,他前面的子域称为二级域
子域只能使用父域的名字作为其域名的后缀
域森林
域森林指多个域树通过建立信任关系组成的集合
活动目录
活动目录是指域环境中提供目录服务的组件,存储有关网络对象的信息,帮助用户快速准确的从目录中找到其所需要信息的服务。提供了网络环境的集中管理机制
功能主要为:拥有账号、软件、环境的集中管理,增强安全性,更可靠更短的宕机时间
ISA防火墙、Exchange邮件服务器、SMS系统服务管理服务器都依赖于活动目录
安全域划分
DMZ称为隔离区,为了解决安装防火墙后外部网络不能访问内部网络服务器的问题而设立的一个非安全系统与安全系统之间的缓冲区。位于企业内部网络和外部网络之间
拥有DMZ的网络时,需要定义以下访问控制:
- 内网可以访问外网
- 内网可以访问DMZ
- 外网不能访问内网
- 外网可以访问DMZ
- DMZ不能访问内网、外网
内网的划分:办公区、核心区
鱼叉攻击:直接针对特定目标进行攻击,如钓鱼邮件
水坑攻击:没有确定的目的,如在受害者常访问的网站设置恶意代码等待受害者踩坑
域内权限解读
组
组是用户账号的集合,方便统计管理和分配权限
需要记忆以下几个组:
-
域本地组:来自于全林,作用于本域(多域用户访问本域内资源)
-
全局组:来自于本域,作用于全林(本域用户访问多域资源)
-
通用组:来自于全林,作用于全林(保存不经常变化的信息,不推荐直接保存账号信息)
A-G-DL-P策略
指将用户账号添加到全局组中,将全局组添加到域本地组中,然后为域本地组分配资源权限。
-
A:表示用户账号
-
G:表示全局组
-
DL:表示域本地组
-
P:表示资源权限
-
U:表示通用组
重要本地组权限
- 管理员组:成员可以不受限制地存取计算机/域的资源
- 账号操作员组:成员可以创建和管理该域中的用户和组并为其设置权限,也可以在本地登录域控制器
- 服务器操作员组:成员可以管理域服务器
重要全局组权限
- 域管理员组:成员在所有加入域的服务器(工作站)、域控制器和活动目录中均默认拥有完整的管理员权限。
- 企业系统管理员组:是域森林根域中的一个组。 该组在域森林中的每个域内都是Administrators组的成员,因此对所有域控制器都有完全访问权。
- 架构管理员组:是域森林根域中的一个组。 可以修改活动目录和域森林的模式。该组是为活动目录和域控制器提供完整权限的域用户组
- 域用户组:包含所有的域成员,默认情况下建立的用户账号均属于域用户组
1.2
虚拟机网络适配器
桥接模式:虚拟机视为独立的机器,有DHCP可以自动分配地址,无DHCP只能手动分配地址
NAT模式:虚拟机通过物理机的连接访问网络(即NAT地址转换),除主机外其他网络无法访问虚拟机(默认模式)
Host-only模式:虚拟机处于独立的网段,只能通过连接共享功能实现共享上网,否则无法上网。
PowerShell
PowerShell是一个命令行外壳程序和脚本环境
特点:
- Win7以上系统默认安装
- 脚本可以在内存执行,不写入硬盘
- 几乎不会触发杀毒软件
- 可以远程执行
- PowerShell运行通常不会被阻止(cmd通常会被阻止)
- 可管理活动目录
扩展名:.ps1
1 |
|
执行策略
获取当前执行策略
1 |
|
一般会有以下几种执行策略:
- Restricted:脚本不能执行(默认设置)
- RemoteSigned:本地脚本可以执行,但是网上下载的脚本不能运行(有数字证书签名除外)
- AllSigned:仅由受信任的发布者签名才能运行
- Unrestricted:允许所有脚本运行
修改执行策略
1 |
|
脚本运行
需要输入完整的路径以及文件名字,如果在系统目录则可以使用.\a.ps1
来运行
1 |
|
命令格式
一般采用动词-名词形式,同时其不区分大小写
1 |
|
常用命令&参数
绕过本地权限执行方式
1 |
|
常见参数
导入PowerShell命令
1 |
|
网站下载脚本执行(了解)
1 |
|
采用不加载用户配置文件、非交互模式进行下载
第二章
2.2
手动收集信息
查询网络配置
1 |
|
操作系统&软件信息
获取操作系统版本
1 |
|
查看系统体系结构
1 |
|
查看安装的软件版本、路径
1 |
|
本机服务信息
1 |
|
进程列表
1 |
|
启动进程信息
1 |
|
查看计划任务(要求掌握参数)
1 |
|
/tn TaskName 指定任务的名称。
/tr TaskRun 指定任务运行的程序或命令。键入可执行文件、脚本文件或批处理文件的完全合格的路径和文件名。
如果忽略该路径,SchTasks.exe 将假定文件在 Systemroot\System32 目录下。
/sc schedule 指定计划类型。有效值为 MINUTE、HOURLY、DAILY、WEEKLY、MONTHLY、ONCE、ONSTART、ONLOGON、ONIDLE。
值说明
MINUTE、HOURLY、DAILY、WEEKLY、MONTHLY
指定计划的时间单位。ONCE
任务在指定的日期和时间运行一次。ONSTART
任务在每次系统启动的时候运行。可以指定启动的日期,或下一次系统启动的时候运行任务。ONLOGON
每当用户(任意用户)登录的时候,任务就运行。可以指定日期,或在下次用户登录的时候运行任务。ONIDLE
只要系统空闲了指定的时间,任务就运行。可以指定日期,或在下次系统空闲的时候运行任务。/mo modifier 指定任务在其计划类型内的运行频率。这个参数对于 MONTHLY 计划是必需的。对于 MINUTE、HOURLY、DAILY 或 WEEKLY 计划,这个参数有效,但也可选。默认值为 1。
计划类型
修饰符
说明MINUTE
1 ~ 1439
任务每 n 分钟运行一次。HOURLY
1 ~ 23
任务每 n 小时运行一次。DAILY
1 ~ 365
任务每 n 天运行一次。WEEKLY
1 ~ 52
任务每 n 周运行一次。MONTHLY
1 ~ 12
任务每 n 月运行一次。LASTDAY
任务在月份的最后一天运行。FIRST、SECOND、THIRD、FOURTH、LAST
与 /d day 参数共同使用,并在特定的周和天运行任务。例如,在月份的第三个周三。/d dirlist 指定周或月的一天。只与 WEEKLY 或 MONTHLY 计划共同使用时有效。
计划类型
日期值WEEKLY
可选项。有效值是 MON ~ SUN 和 * (每一天)。MON 是默认值。MONTHLY
在使用 FIRST、SECOND、THIRD、FOURTH 或 LAST 修饰符 (/mo) 时,需要 MON ~ SUN 中的某个值。1 ~ 31 是可选的,只在没有修饰符或修饰符为 1 ~ 12 类型时有效。默认值是 1 (月份的第一天)。/m month[**,**month…]
指定一年中的一个月。有效值是 JAN ~ DEC 和 * (每个月)。/m 参数只对于 MONTHLY 计划有效。在使用 LASTDAY 修饰符时,这个参数是必需的。否则,它是可选的,默认值是 * (每个月)。
/i InitialPageFileSize
指定任务启动之前计算机空闲多少分钟。键入一个 1 ~ 999 之间的整数。这个参数只对于 ONIDLE 计划有效,而且是必需的。
/st StartTime
以 HH:MM:SS 24 小时格式指定时间。默认值是命令完成时的当前本地时间。/st 参数只对于 MINUTE、HOURLY、DAILY、WEEKLY、MONTHLY 和 ONCE 计划有效。它只对于 ONCE 计划是必需的。
/sd StartDate
以 MM/DD/YYYY 格式指定任务启动的日期。默认值是当前日期。/sd 参数对于所有的计划有效,但只对于 ONCE 计划是必需的。
/ed EndDate
指定任务计划运行的最后日期。此参数是可选的。它对于 ONCE、ONSTART、ONLOGON 或 ONIDLE 计划无效。默认情况下,计划没有结束日期。
/s Computer
指定远程计算机的名称或 IP 地址(带有或者没有反斜杠)。默认值是本地计算机。
/u [domain]user
使用特定用户帐户的权限运行命令。默认情况下,使用已登录到运行 SchTasks 的计算机上的用户的权限运行命令。
/p password
指定在 /u 参数中指定的用户帐户的密码。如果使用 /u 参数,则需要该参数。
/ru {[Domain]User | “System”}
使用指定用户帐户的权限运行任务。默认情况下,使用用户登录到运行 SchTasks 的计算机上的权限运行任务。
值
说明[domain}User?
指定用户帐户。“System” 或 “”
指定操作系统使用的 NT Authority\System 帐户。/p Password
指定用户帐户的密码,该用户帐户在 /u 参数中指定。如果在指定用户帐户的时候忽略了这个参数,SchTasks.exe 会提示您输入密码而且不显示键入的文本。使用 NT Authority\System 帐户权限运行的任务不需要密码,SchTasks.exe 也不会提示索要密码。
开机时间
1 |
|
用户列表
1 |
|
本地管理员信息(通常包括与用户信息)
1 |
|
在线用户
1 |
|
列出连接会话
1 |
|
端口列表
1 |
|
补丁列表
1 |
|
本机共享列表和可访问的域共享列表
1 |
|
查看路由表以及arp缓存表
1 |
|
自动收集信息
知道 Wmic、Empire工具名字即可
2.3
查询当前权限
1 |
|
三种不同的权限
- 本地普通用户,如:
win-2008\user
- 本地管理员用户,如:
win7-x64\administrator
- 域内用户,如:
hacker\administrator
,其表示在域hacker
内的管理员账户
SID
SID的全称是安全标识符(Security Identify),是为域或本地计算机中创建的每个帐户分配的唯一ID字符串
SID获取
1 |
|
指定用户详细信息(需要在域环境执行)
1 |
|
2.4
判断是否存在域
使用ipconfig
1 |
|
查看系统详细信息
1 |
|
查询当前登录域以登录用户信息
1 |
|
判断主域
1 |
|
判断方式:
- 存在域,但当前不是域用户:发生系统错误 5
- 存在域,且当前用户是域用户:显示时间
- 当前为工作组,不存在域:找不到域控
2.5
探测域内存活主机
NetBIOS探测
NetBIOS是局域网程序使用的一种API,几乎所有的局域网都是在NetBIOS协议的基础上工作的。
NetBIOS也是计算机的标识名,主要用于局域网中计算机的互访。
NetBIOS的工作流程就是正常的机器名解析査询应答过程
对应工具:nbtscan
ICMP协议探测
1 |
|
需要看懂上面命令
for /L %I in (1,1,254) do 构造了一段循环,/L指循环(loop)
前半段为固定的格式,类似于C中的for(i=1;i<=254;i=i+1)
DO后面跟着的是执行的语句
-w 1 是超时时间设置为1ms
-n 1 是只发送一个包
目的ip的最后8位被循环变量代替
最后通过管道将结果利用findstr命令过滤,只显示通的IP
@ 用于隐藏ping命令自身的回显
VBS脚本运行
1 |
|
2.6
扫描域内端口
telnet
1 |
|
可以快速的探测某个主机的常规的高危端口是否开放
Metasploit
启动:msfconsole
使用指定模块
1 |
|
显示设置:show options
设置端口:set port <端口号范围>
设置远程目的IP:set rhosts
设置线程数:set threads <线程数量>
运行:run
端口bannner信息
2.7
收集域内基础信息
查询域
1 |
|
查询域内所有计算机
1 |
|
查询域内所有用户组列表
1 |
|
查询所有域成员计算机列表
1 |
|
获取域密码信息
1 |
|
获取域信任信息
1 |
|
2.8
查看域控制器机器名
1 |
|
查看域控制器主机名
1 |
|
查看当前时间
1 |
|
查看域控制器组
1 |
|
2.9
查询域管理员用户
1 |
|
查询管理员用户组
1 |
|
2.10
定位域管理员(知道工具即可)
psloggedon.exe、PVEFindADUser.exe、NetVie、Nmap的NSE脚本(如何使用)
namp nse脚本使用:
1
2
# cmd、PowerShell
nmap -script 脚本名称 目标此处使用的为:
smb-enum-sessions.nse
来获取远程机器的登录会话,smb-os-discovery.nse
获取目标主机信息后续的信息收集使用:
1
smb-enum-<收集信息>.nse
收集信息选项包括:
1
2
3
4
5
domains(域控主机)
users(域用户信息)
shares(共享目录)
processes(系统进程,运行软件)
sessions(登录会话,登录状态)
2.11
查找域管理进程
获取域管理员列表
1 |
|
列出本机所有进程以及进程用户
1 |
|
第三章
3.1
隐藏通信隧道基础
常用隧道
网络层:IPv6隧道、ICMP隧道、GRE隧道
传输层:TCP隧道、UDP隧道、常规端口转发
应用层:SSH隧道、HTTP隧道、HTTPS隧道、DNS隧道
常用工具
ICMP协议
1 |
|
TCP协议
1 |
|
HTTP协议
1 |
|
DNS协议
1 |
|
3.2
IPv6隧道(了解)
通过 Ipv4 传递 Ipv6 数据包,可以绕开一些防火墙
ICMP隧道
PingTunnel
PingTunnel基本特点:属于网络层,可以设置密码
设置密码
1 |
|
VPS内设置隧道
1 |
|
以上图为例(VPS IP:192.168.1.10):ptunnel -p 192.168.1.4 -lp 1080 -da 1.1.1.10 -dp 3389
常见参数:
-x:指定ICMP隧道连接的验证密码
-lp:指定要监听的本地TCP端口
-da:指定要转发的目标机器的IP地址
-dp:指定要转发的目标机器的TCP端口
-p:指定ICMP隧道另一端的机器的IP地址
上述命令的含义是:在访问攻击者VPS(192.168.1.10
)的1080端口时,会把数据库服务器1.1.1.10
的3389端口的数据封装在ICMP隧道里,以 Web服务器192.168.1.4
为ICMP隧道跳板进行传送。
防范方法
- 检测同一来源的ICMP数据包的数量。一个正常的ping命令每秒最多发送两个数据包,而使用ICMP 隧道的浏览器会在很短的时间内产生上千个ICMP数据包
- 注意那些Payload大于64bit的ICMP数据包
- 寻找响应数据包中的Payload与请求数据包中的Payload不一致的ICMP数据包
- 检查ICMP数据包的协议标签。例如,icmptunnel会在所有的ICMP Payload前面添加
TUNL
标记 来标识隧道
3.3
传输层隧道
传输层技术包括TCP隧道、UDP隧道和常规端口转发等
lcx端口转发
内网端口转发
1 |
|
转发完成后可以通过访问VPS的端口2来访问目标机器所转发的端口
本地端口映射
如果目标服务器因为防火墙的限制,部分端口无法通过防火墙,则可以在目标主机上将对应端口数据通过其他防火墙允许的端口进行传递
1 |
|
netcat
常用参数:
-l 用于指定nc将处于侦听模式。指定该参数,则意味着nc被当作server,侦听并接受连接,而非向其它地址发起连接。
-p 设置通信端口
-s 指定发送数据的源IP地址,适用于多网卡机
-u 指定nc使用UDP协议,默认为TCP
-v 输出交互或出错信息,新手调试时尤为有用 (-vv 获取更详细的输出信息)
-w 超时秒数,后面跟数字
-n 直接使用IP地址(不通过域名服务器)
banner抓取
1 |
|
链接远程主机
1 |
|
端口扫描
1 |
|
端口监听
1 |
|
文件传输
1 |
|
简易聊天
1 |
|
Shell获取-正向
1 |
|
Shell获取-反向
1 |
|
无nc时反向shell
python反向shell
1 |
|
bash反向shell
1 |
|
php反向shell
1 |
|
内网代理
有如上拓扑图时想要VPS能够访问对应的数据库服务器,则需要通过web服务器进行代理
1 |
|
PowerCat
nc的PowerShell版本
正向shell获取
1 |
|
反向shell获取
1 |
|
3.4
应用层隧道
SSH协议
SSH为建⽴在应⽤层基础上的安全协议。SSH是较可靠,专为远程登录会话和其他⽹络服务提供安全性的协议
本地转发
将靶机端口数据转发到vps对应的端口上,之后可以通过访问vps的对应端口以访问靶机的对应端口
1 |
|
相关参数:
-C: 压缩传输,提高传输速度
-f: 将SSH传输转入后台执行,不占用当前的Shell
-N: 建立静默连接(建立了连接,但是看不到具体会话)
-g: 允许远程主机连接本地用于转发的端口
-L: 本地端口转发
-R: 远程端口转发
-D: 动态转发(SOCKS代理)
-P: 指定SSH端口
远程转发
用于外部vps不能访问内网的服务器,但内网可以访问外网vps
1 |
|
动态转发
1 |
|
防范思路
- SSH隧道之所以能被攻击者利用,主要是因为系统访问控制措施不够
- 在系统中配置SSH远程管理白名单
- 在ACL中限制只有特定的IP地址才能连接SSH
- 设置系统完全使用带外管理
DNS协议
dnscat2
一款使用DNS协议创建加密的C&C通道,通过预共享密钥进行身份认证的开源软件是一个命令与控制工具,客户端采用 C,服务端采用 Ruby
**特点:**支持多个会话、流量加密、使用密钥防止MiTM攻击、在内存中直接执行PowerShell脚本、隐蔽通信。
1 |
|
防范方式:
- 禁止网络中的任何人向外部服务器发送DNS请求,只允许与受信任的DNS服务器通信
- 将邮件服务器/网关列入白名单并阻止传入和传出流量中的TXT请求
- 跟踪用户的DNS査询次数。如果达到阈值,就生成相应的报告
- 阻止ICMP
3.5
SOCKS代理
特点
SOCK4只支持TCP协议,SOCK5支持TCP/UDP协议于身份验证机制
标准端口为1080,能够直接与靶机进行通信,避免多次端口转发
EarthWorm
EarthWorm是一款用于开启 SOCKS v5 代理服务的工具,基于标准 C 开发,可提供多平台间的转接通讯,用于复杂网络环境下的数据转发。
参数
1 |
|
其中链路状态有六种,使用-s
进行设置:
1 |
|
正向服务器
1 |
|
架设端口号的一个SOCKS代理
在失陷主机上运行,Kali便可以通过1.1.1.1:8888
来获取对应1.1.1.1
主机提供的代理
反向服务器
1 |
|
此时Kali可通过访问 1.1.1.1:1080
端口使用 rssocks 主机提供的 socks5 代理服务
二重网络环境搭建-A
获得目标网络内两台主机 A、B 的权限,情况描述如下:
A 主机: 存在公网 IP,且自由监听任意端口,无法访问特定资源
B 主机: 目标网络内部主机,可访问特定资源,但无法访问公网
A 主机可直连 B 主机
1 |
|
二重网络环境搭建-B
获得目标网络内两台主机 A、B 的权限,情况描述如下:
A 主机: 目标网络的边界主机,无公网 IP,无法访问特定资源。
B 主机: 目标网络内部主机,可访问特定资源,却无法回连公网。
A 主机可直连 B 主机,需要一台公网vps
1 |
|
kali 可通过访问 1.1.1.1:1080
来使用 2.2.2.3
主机提供的 socks5 代理
ProxyChains
修改配置
1 |
|
测试代理
1 |
|
启动代理浏览器
1 |
|
第四章
4.1
Windows中的四种权限
- User:普通用户权限,是系统中最安全的权限(因为分配给该组的默认权限不允许成员修改操作系统的设置或用户资料)
- Administrator:管理员权限。如果没有管理员权限,就无法进行获取散列值、安装软件、修改防 火墙规则、修改注册表等操作
- System:系统权限。可以对SAM等敏感文件进行读取,往往需要将Administrator权限提升到 System权限才可以对散列值进行Dump操作
- TrustedInstaller:Windows中的最高权限。对系统文件,即使拥有System权限也无法进行修改。只有拥有TrustedInstaller权限的用户才可以修改系统文件
系统内核溢出漏洞提权分析以及防范(了解)
使用Metasploit
发现对应缺失补丁
Windows Exploit Suggester
将系统已安装补丁和微软抖动数据库比较,识别可能导致权限提升的漏洞
Powershell中的Sherlock
脚本查找用于本地权限提升的漏洞
4.2
Windows 操作系统配置错误利用分析及防范
服务文件特点
Windows系统服务文件在操作系统启动时加载和执行,并在后台调用可执行文件
Windows服务以System权限运行,因此其文件夹,文件和注册表键值都是受强访问机制保护的
Windows Installer
Windows Installer是indows操作系统的组件之一,用于管理和配置软件服务
其分为客户端安装服务(Msiexec.exe)和MSI文件两部分,MSI文件是Windows Installer的数据包 Windows Installer 通过 Msiexec.exe 安装MSI文件包含的程序
4.3
组策略首选项提权分析及防范
- SYSVOL是活动目录里面的一个用于存储域公共文件服务器副本的共享文件夹,在域中的所有域控制器之间进行复制
- SYSVOL文件夹是在安装活动目录时自动创建的,主要用来存放登录脚本、组策略数据及其他域控 制器需要的域信息等
- 整个SYSVOL目录在所有的域控制器中是自动同步和共享的,所有的域策略均存放在
C:\Windows\SYSVOL\DOMAIN\Policies\
目录中。
4.4
绕过UAC提权分析及防范
UAC(UserAccountControl,用户账户控制)是微软为提高系统安全性在Windows Vista中引入的技术。UAC要求用户在执行可能影响计算机运行的操作或者在进行可能影响其他用户的设置之前,拥有相应的权限或者管理员密码
需要UAC的操作:
- 配置Windows Update
- 增加/删除账户
- 更改账户类型
- 更改UAC的设置
- 安装ActiveX
- 安装/卸载程序
- 安装设备驱动程序
- 将文件移动/复制到
ProgramFiles
或Windows
目录下 - 査看其他用户的文件夹
Bypassuac
在经过前期一系列的渗透测试后,拿到目标机器的meterpreter Shell
后此时为普通用户权限,现在需要尝试获取System权限
使用msf的exploit/windows/local/bypassuac
模块来进行获取一个新的meterpreter Shell
,之后执行getsystem
命令,可以看到绕过了UAC,获取到了System权限
4.5
令牌窃取分析及防范
令牌(Token)是指系统中的临时密钥,相当于账户和密码,用于决定是否允许当前请求及判断当前请求是属于哪个用户的
**特点:**随机性和不可预测性。一般的攻击者或软件都无法将令牌猜测出来
伪造令牌的核心是Kerberos
协议
Kerberos协议
个人觉得这个博客讲的非常好,建议看这个学习而不是看书:详解kerberos认证原理 | Hero (seevae.github.io)
![](https://seevae.github.io/img/kerberos6.jpg)
其中的三个角色:
- 客户端(client):发送请求的一方
- 服务端(Server):接收请求的一方
- **密钥分发中心(Key Distribution Center,KDC)**而密钥分发中心一般又分为两部分,分别是:
- AS(Authentication Server):认证服务器,专门用来认证客户端的身份并发放客户用于访问TGS的TGT(Ticket Granting Ticket 票据授予票据)
- TGS(Ticket Granting Server):票据授予服务器,用来发放整个认证过程以及客户端访问服务端时所需的服务授予票据(Ticket)
添加域管理员
添加域用户
1 |
|
把用户添加到域管理员组
1 |
|
查看域管理员组
1 |
|
防范令牌窃取
- 及时安装微软推送的补丁
- 不使用对来路不明的或者有危险的软件
- 对令牌的时效性进行限制,越敏感的数据,其令牌时效应该越短
- 对每个操作使用不同的令牌
- 对于令牌,应采取加密存储及多重验证保护
- 使用加密链路SSL/TLS传输令牌,以防止被中间人窃听
4.6
无凭证条件下的权限获取去分析及防范
LLMNR
本地链路多播名称解析(LLMNR)是一种域名系统数据包格式,当局域网中DNS服务器不可用时,DNS客户端使用LLMNR解析本地网段中机器的名称。 Windows从Vista版本开始支持LLMNR,支持IPv6
NetBIOS
NetBIOS是一种网络协议,根据NetBIOS协议广播获得计算机名称,并将其解析为相应的IP地址。(不支持IPv6)
Net-NTLM-Hash和NTLM-Hash的区别
NTLM Hash
是指Windows操作系统的Security Account Manager
中保存的用户密码散列值。通常保存在Windows的SAM文件或者NTDS.DIT数据库中,用于对访问资源的用户进行身份验证。
Net-NTLM Hash
是指在网络环境中经过NTLM认证的散列值。挑战/响应验证中的“响应”就包含Net NTLM Hash。使用Responder抓取的通常就是Net-NTLM Hash
第五章
5.1
IPC
IPC是为了实现进程间通信而开放的命名管道
建立IPC
1 |
|
查看已建立的连接
1 |
|
删除建立的IPC
1 |
|
IPC利用条件
- 开启了139、445端口
- 管理员开启了默认共享
使用Windows自带的工具获取远程主机信息
dir
列出远程主机文件
1 |
|
tasklist
显示远程主机的进程
1 |
|
计划任务
创建计划任务
1 |
|
/s:在ip为192.168.100.192的远程系统中
/tn:创建一个名为test的计划任务
/sc:开机时启动
/tr:运行的程序为C盘中的calc.bat
/ru:运行权限为System
/f:如果已经存在同名的任务则强制创建
运行远程计划任务
1 |
|
/i:指定运行一个已计划的任务之前要等待的空闲时间(上述命令中指代立即执行)
删除远程计划任务
1 |
|
/f:强制删除
5.2
LM Hash 和 NTLM Hash
Windows操作系统中的密码一般由两部分组成,一部分为LM Hash,另一部分为NTLM Hash。 结构形如:username:RID:LM-HASH:NT-HASH
从vista和2008开始默认禁用LM-HASH
**LM HASH:**DES加密,默认禁用,密码不足14字节采用 0 来补全,明文限定为14位以内
**NTLM HASH:**基于MD4
个人版从Windows Vista 以后,服务器版从Windows Server2003以后,Windows操作系统的认证方式均为NTLM Hash。
单机密码抓取与防范
要想在Windows操作系统中抓取散列值或明文密码,必须将权限提升至System
本地用户名、散列值和其他安全验证信息都保存在SAM文件中。路径位于C:\Windows\System32\config
,处于被锁定的状态,不允许复制。
isass.exe
进程用于实现安全策略,可以利用工具将散列值或明文密码从内存中的isass进程或SAM文件导出
SAM文件可以通过PE盘进入文件管理环境赋值,或用VSS等方法直接复制
常见工具
GetPass、PwDump7、QuarksPwDump
通过SAM和System文件抓取密码
导出SAM文件(需要管理员权限)
1 |
|
mimikatz获取SAM和System文件
1 |
|
在此之前需要进行提权
1 |
|
在线读取散列值
1 |
|
HashCat
包括Hashcat,oclHashcat,oclRausscrack
区别
-
Hashcat 只支持CPU破解
-
oclHashcat 和 oclGausscrack支持GPU加速破解
-
oclHashcat 分为AMD版和NIVDA版,并且需要安装官方指定版本的显卡驱动程序
参数
-
-b:测试破解基准速度
-
-m:指定散列值的类型
部分参数选项
参数 hash名 0 MD5 10 md5($pass.$salt) 20 md5($salt.$pass) 30 md5(unicode($pass).$salt) 40 md5($salt.unicode($pass)) 50 HMAC-MD5 (key) 60 HMAC-MD5 (key) 100 SHA1 110 sha1($pass.$salt) 120 sha1($salt.$pass) 130 sha1(unicode($pass).$salt) 140 sha1($salt.unicode($pass)) 150 HMAC-SHA1 (key) 160 HMAC-SHA1 (key) -
-a:指定破解模式
参数 说明 备注 0 Straight 字典 模式 1 Combination 组合字典 模式 2 Toggle-Case 大小写转换 模式 3 Brute-force 掩码暴力 模式 4 Permutation 序列 模式 5 Table-Lookup 查表 模式 6 Hybrid dict + mask 字典+掩码 模式 7 Hybrid mask + dict 掩码+字典 模式 8 Prince 王子 模式
常用命令
1 |
|
5.3
哈希传递攻击
大多数渗透测试人员都听说过哈希传递(Pass The Hash)攻击。该方法通过找到与账户相关的密码散列值(通常是NTLM Hash)来进行攻击。在域环境中,用户登录计算机时使用的大都是域账号,大量计算机在安装时会使用相同的本地管理员账号和密码,因此,如果计算机的本地管理员账号和密码也是相同的,攻击者就能使用哈希传递攻击的方法登录内网中的其他计算机。
使用NTML hash进行哈希传递
1 |
|
AES-256密钥进行哈希传递(需要安装KB2871977)
1 |
|
5.4
票据传递攻击分析与防范
mimikatz的哈希传递功能需要有本地管理员权限,但是票据传递可以不用管理员权限
票据传递是基于kerberos协议,流程为导出票据->清空内存中的票据->将票据导入内存
mimikatz票据传递
将内存的票据导出
1 |
|
清除内存中的票据
1 |
|
将票据注入内存
1 |
|
kekeo票据传递
kekeo不通过导出得到票据文件,而是通过用户名,域名,散列值生成一个
生成票据文件
1 |
|
清除内存中的票据
1 |
|
将票据注入内存
1 |
|
防范票据传递攻击
-
开启Windows Update功能,进行自动更新。
-
手动下载补丁包进行修复
-
对域内账号进行控制,禁止使用弱口令,及时、定期修改密码。
-
在服务器上安装反病毒软件,及时更新病毒库。
5.5
PsExec
**特点:**包含在PsTools工具包里面、可以在远程计算机上执行、可以将管理员权限提升到System权限以运行指定的程序
获取System权限的Shell
需要在建立了ipc$
下进行运行下面命令
1 |
|
-acceptula:第一次运行PsExec会弹出确认对话框,使用该参数就不会弹出确认框
-s:以System权限运行进程,如果不加此参数则会得到一个
Administrator
权限的Shell
攻击原理
通过管道在远程目标机器上创建一个psexec服务,并在本地磁盘中生成一个名为“PSEXESVC”的二进制文件,然后,通过psexec服务运行命令,运行结束后删除服务。
5.7
永恒之蓝漏洞利用攻击链
使用msf来对其进行攻击
启动msf
1 |
|
使用模块
1 |
|
查看参数
1 |
|
设置靶机地址段
1 |
|
设置线程数
1 |
|
设置反弹payload(在攻击时设置此参数)
1 |
|
执行
1 |
|
后续渗透
获取到靶机的meterpreter shell
下可以进一步收集信息
查看当前shell权限:getuid
获取用户散列值:hashdump
获取命令行环境的shell:shell
防御方式
- 禁用SMB协议,适用于Windows Vista及更高版本的操作系统
- 打开WindowsUpdate,或者手动安装KB2919355
- 使用防火墙阻止445端口的连接,或者使用进/岀站规则阻止445端口的连接
- 不要随意打开陌生的文件
- 安装杀毒软件,及时进行更新病毒库
5.9
DCOM
DCOM(分布式组件模型):客户端程序可以通过DCOM,向网络中的另一台计算机上的服务端程序发送请求 基于COM(组件对象模型) :同一台计算机的客户端服务端通信
5.10
SPN
微软给域内的每种资源分配不同的SPN(ServicePrincipalName),即服务主体名称
SPN是服务实例(比如:HTTP、SMB、MySQL 等服务)的唯一标识符
验证过程(参考Kerberos协议认证)
- 当用户需要访问MSSQL服务时,系统会以当前用户身份向域控制器查询SPN为”MSSQL”的记录。
- 找到该SPN记录后,用户会再次与KDC通信,将KDC发放的TGT作为身份凭据发送给KDC,并将需要访问的SPN发送给KDC。
- KDC中的身份验证服务(AS)对TGT进行解密。
- 确认无误后,由TGS将一张允许访问该SPN所对应的服务的票据和该SPN所对应的服务的地址发送给用户。
- 用户使用该票据即可访问MSSQL服务。
常用命令
注册SPN
1 |
|
将-A
改为-S
可以验证是否有重复的spn,注册SPN需要域管理员权限
查询SPN
1 |
|
kerberoast攻击防范建议
- 保证服务账号密码的长度超过25位
- 确保密码的随机性
- 定期修改服务账号的密码
- 保证默认的
AES256_HMAC
加密方式不能改为RC4_HMAC_MD5
- 强制使用
AES256_HMAC
方式对Kerberos
票据进行加密
第六章
6.1
ntdis.dit
一个二进制文件,保存了活动目录中的所有数据,包括但不限于用户名,散列值,组,GPP,OU等与活动目录相关的信息,与SAM文件一样被操作系统锁定
保存位置为%SystemRoot%\ntds\ntds.dit
提取工具
ntdsutil.exe
vssadmin
vssown.vbs
ntdsutil的IFM
diskshadow
防范方式
即监控卷影拷贝服务的使用情况
- 监控卷影拷贝服务及任何涉及活动目录数据库文件(ntds.dit)的可疑操作行为。
- 监控System Event ID 7036(卷影拷贝服务进入运行状态的标志)的可疑实例,以及创建进程的事件。
- 监控创建diskshadow.exe及相关子进程的事件。
- 监控客户端设备中的diskshadow.exe实例创建事件。
- 通过日志监控新出现的逻辑驱动器映射事件
6.3
利用dcsync获取域散列值
dcsync是mimikatz中的一个功能,作用是利用VSS读取ntds.dit文件以获取域散列值
常用命令
1 |
|
注:前两个在域内所有计算机中都能用,最后的只能在域控上,前两个需要域管理员权限,最后的需要在mimikatz中提权
6.4
利用meterpreter会话获取域账号和域散列值
msfvenom生成木马程序
1 |
|
-p:指定payload,要与
metersploit
中设置监听的payload完全一致-f:指输出文件的格式
其中 LHOST 与 LPORT 一般指向攻击机的IP与监听的端口
攻击流程
打开metasploit
后
1 |
|
防范建议
- 开启Windows Update功能,进行自动更新。
- 手动下载补丁包进行修复。
- 对域内账号进行控制,禁止使用弱口令,及时、定期修改密码。
- 在服务器上安装反病毒软件,及时更新病毒库。
第七章
7.2
域信任的作用是解决多域环境中的跨域资源共享问题
域环境不会无条件地接收来自其他域的凭证,只会接收来自受信任的域的凭证
单向双向信任关系
单向信任是指在两个域之间创建单向的信任路径,即在一个方向上是信任流,在另一个方向上是访问流。
例:若A域信任B域,那么B域内受信任的主体可以访问A域内信任B域的资源。但A域内的主体无法访问B域内的资源
双向信任是指两个单向信任的组合,信任域和受信任域彼此信任,在两个方向上都有信任流和访问流。
活动目录中的所有域信任关系都是双向可传递的
子域与父域也是双向可传递信任的
外部内部信任关系
同一域树中的两个或多个域之间的信任关系称为内部信任,该信任关系可传递
例:有三个A域的子域:BA、CA、DA,BA域信任CA域,CA域信任DA域,则BA域也信任DA域
外部信任是指两个不同林中的域的信任关系。 外部信任是不可传递的。 林信任关系可能是不可传递的,也可能是可传递的
第八章
8.1
后门概念
通过绕过安全控制措施获取对程序或系统访问权限的方法。
简单地说,后门就是一个留在目标主机上的软件,它可以使攻击者随时与目标主机进行连接
操作系统后门
**粘滞键后门:**通过替换粘滞键可执行文件,可以以System权限执行命令
**注册表注入后门:**将可执行文件写入到注册表键的启动项中,在登录时便能执行后门程序
**计划任务后门:**通过计划任务自动执行或生成后门程序
**meterpreter后门:**meterpreter自带,使用安装自启动方式的持久性后门程序
**Cymothoa后门:**将shellcode注入到现有进程中的后门程序
WMI后门
特点
只能由管理员权限的用户运行
使用powershell编写
可以直接从新的WMI属性中读取和执行后门代码,给代码加密
无文件、无进程
无文件、无进程的基本原理
无文件:将代码加密存储于WMI中,实现无文件
无进程:满足条件时,系统自动PowerShell进程执行后门程序,执行后进程消失,实现无进程
8.2
Web后门
weevely后门
python编写的针对php的webshell
1 |
|
如何连接webShell
1 |
|
webacoo后门
1 |
|
如何连接webShell
1 |
|
8.3
域控制器权限持久化分析与防范
DSRM目录恢复模式
DSRM(DirectoryServicesRestoreMode,目录服务恢复模式)是Windows域环境中域控制器的安全模式启动选项。每个域控制器都有一个本地管理员账户(也就是DSRM账户)。DSRM允许管理员在域环境中出现故障或崩溃时还原、修复、重建活动目录数据库,使域环境的运行恢复正常。
SSP
SSP(Security Support Provider)是Windows操作系统安全机制的提供者。
简单地说,SSP就是一个DLL文件,主要用来实现Windows操作系统的身份认证功能
SID History
每个用户都有自己的SID。SID的作用主要是跟踪安全主体控制用户连接资源时的访问权限。
SID History是在域迁移过程中需要使用的一个属性,用于在域迁移过程中保持域用户的访问权限。
黄金票据
原理
在Kerberos认证中,Client通过AS(身份认证服务)认证后,AS会给Client一个 Logon Session Key和TGT,而Logon Session Key并不会保存在KDC中,krbtgt的NTLM Hash又是固定的,所以只要得到krbtgt的NTLM Hash,就可以伪造TGT和Logon Session Key来进入下一步Client与TGS的交互。而已有了金票后,就跳过AS验证,不用验证账户和密码,所以也不担心域管密码修改。
需要伪造内容:
- 域管理员用户名
- 完整域名
- 域SID
- krbtgt的 NTLM Hash 或 AES-256 值
导出Krbtgt的NTML Hash
1 |
|
上面使用mimikatz
的dcsync
来转储ntds.dit
,指定/user
参数可以只导出krbtgt
账号信息
获取域SID
1 |
|
获取当前用户SID
1 |
|
获取域管理员账户
1 |
|
查询域名
1 |
|
清空票据
1 |
|
生成票据
1 |
|
传递票据
1 |
|
防御措施
管理员通常会修改域管理员的密码,但有时会忘记将krbtgt密码一并重置,所以,如果想防御Golden Ticket攻击,就需要将krbtgt密码重置两次。
使用Golden Ticket伪造的用户可以是任意用户(即使这个用户不存在)。因为TGT的加密是由krbtgt完成的,所以,只要TGT被krbtgt账户和密码正确地加密,那么任意KDC使用krbtgt将TGT解密后,TGT中的所有信息都是可信的。只有在如下两种情况下才能修改krbtgt密码。
- 域功能级别从Windows2000或Windows Server 2003提升至Windows Server 2008或WindowsServer 2012。在提升域功能的过程中,krbtgt 的密码会被自动修改。
- 用户自行进行安全检查和相关服务加固时会修改krbtgt的密码。
白银票据
原理
黄金票据是伪造的TGT,那么白银票据就是伪造的ST。在Kerberos认证的第三步,Client带着ST和Authenticator向Server上的某个服务进行请求,Server接收到Client的请求之后,通过自己的Master Key 解密ST,从而获得 Session Key。通过 Session Key 解密 Authenticator,进而验证对方的身份,验证成功就让 Client 访问server上的指定服务了。所以我们只需要知道Server用户的Hash就可以伪造出一个ST,且不会经过KDC,但是伪造的门票只对部分服务起作用。
所需要条件:
- 域名
- 域SID
- 目标服务器名
- 可利用的服务
- 服务账号的NTML HASH
- 需要伪造的用户名
攻击方式与黄金票据相似
获取服务账号名 & 服务账号Hash
1 |
|
票据制作
1 |
|
黄金票据和白银票据区别
获取的权限不同
金票:伪造的TGT,可以获取任意Kerberos的访问权限
银票:伪造的ST,只能访问指定的服务,如CIFS
认证流程不同
金票:与KDC交互,但不与AS交互
银票:不与KDC交互,直接访问Server
加密方式不同
金票:由krbtgt NTLM Hash 加密
银票:由服务账号 NTLM Hash 加密
万能密码
了解可以生成万能密码与域控建立IPC$