内网渗透学习(三)
权限分类
- User:普通用户权限
- Administrator:管理员权限。
- System:系统权限。可以对SAM等敏感文件进行读取
- TrustedInstaller:Windows中的最高权限
系统内核溢出漏洞
查看补丁
systeminfo
或者用wmic命令
wmic qfe get Caption,Description,HotFixID,InstallOn
发现缺失补丁
- 手动比对
- Metasploit的
post/windows/gather/enum_patches
模块 - Windows Exploit Suggester工具
- Powershell中的Sherlock脚本
Windows操作系统配置错误
系统服务权限配置错误
如果一个低权限的用户对此类系统服务调用的可执行文件拥有写权限,就可以将该文件替换成任意可执行文件,并随着系统服务的启动获得系统权限。
系统服务权限配置错误(可写目录漏洞)有如下两种可能:
- 服务未运行:攻击者会使用任意服务替换原来的服务,然后重启服务
- 服务正在运行且无法被终止:攻击者通常会利用DLL劫持技术并尝试重启服务来提权
利用工具:
- PowerUp脚本(Powershell使用)
- Metasploit的service_permissions模块(选择AGGRESSIVE选项)
注册表键AlwaysInstallElevated
注册表键AlwaysInstallElevated是一个策略设置项。Windows允许低权限用户以System权限运行安装文件。
PathsAlwaysInstallElevated漏洞产生原因是用户开启了Windows Installer特权安装功能
在组策略编辑器中选择:
组策略-计算机配置-管理模块-Windows组件-Windows Installer-永远以高特权进行安装:选择启用
组策略-用户配置-管理模块-Windows组件-Windows Installer-永远以高特权进行安装:选择启用
设置完后注册表的两个位置自动创建键值”1”
- HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated
- HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated
Windows Installer是Windows操作系统的组件之一,专门用来管理和配置软件服务。除了安装程序,还用于管理软件的安装、组件的添加和删除、监视文件还原、通过回滚进行灾难恢复。
分为客户端安装服务(Msiexec.exe)和MSI文件两部分,他们是一起工作的。Windows Installer通过Msiexec.exe安装MSI文件包含的程序。MSI文件是Windows Installer的数据包,包含了安装和卸载软件需要用到的大量指令和数据。
工具使用:
- PowerUp脚本
Get-Registry AlwaysInstallElevated模块用来检测
Write-UserAddMSI模块用来添加用户
可信任服务路径漏洞
可信任服务路径(包含空格且没有引号的路径)漏洞利用了Windows文件路径解析的特性并涉及服务路径的文件/文件夹权限(存在缺陷的服务程序利用了属于可执行文件的文件/文件夹的权限)。如果一个服务的可执行文件的路径没有被双引号引起来且包含空格,那么这个服务就存在漏洞。
该漏洞存在以下情况:
- 如果路径与服务有关,就任意创建一个服务或者编译Service模板
- 如果路径与可执行文件有关,就任意创建一个可执行文件。
Trusted Service Paths 漏洞产生的原因:
因为Windows服务通常都是以System权限运行的,所以系统在解析服务所对应的文件路径中的空格时,也会以系统权限进行。
例如:,有一个文件路径”C:\Program Files\Some Folder\Service.exe”。对于该路径的每一个空格,Windows都会尝试寻找并执行与空格前面的名字相匹配的程序。
Windows会依次尝试确定和执行下列程序:
- C:\Program.exe
- C:\Program Files\Some.exe
- C:\Program Files\Some Folder\Service.exe
如果一个被恶意命名的可执行程序被上传到受影响的目录中,服务一旦重启,该程序就会以System权限运行。
漏洞利用:
- 手动利用
wmic service get name,displayname,pathname,startmdoe | findstr /i "Auto" | findstr /i /v "C:\Windows\\" | findstr /i /v """
icacls {filepath}
sc stop service_name
sc start service_name
- Metasploit的Windows Service Trusted Path Privilege Escalation模块
在中止载荷进程之前将它迁移到其他进程中:set AutoRunScript migrate -f
自动安装配置文件
在内网给多台机器配置同一环境时不会逐台配置,而是会使用脚本化批量部署。在这一过程中会使用安装配置文件。这些文件中包含所有的安装配置信息,其中的一些还可能包含本地管理员账号和密码等信息。
# 搜索 Unatted.xml文件
dir /b /s c:\Unatted.xml
# 接着打开查看是否含密码
- Metasploit 的 post/windows/gather/enum_unattend模块
计划任务
查看计算机计划任务:
schtasks /query /fo LIST /v
工具利用:
- accesschk.exe
组策略首选项提权
SYSVOL 是活动目录里面的一个用于存储公共文件服务器副本的共享文件夹,在域中的所有域控制器之间进行复制。
SYSVOL文件夹是在安装活动目录时自动创建的,主要用来存放登录脚本、组策略数据及其他域控制器需要的域信息等。
整个SYSVOL 目录在所有的域控制器中是自动同步和共享的,所有的域策略均存放在C:\Windows\SYSVOL\DOMAIN\Policies\ 目录中
常见的组策略首选项:
- 映射驱动器
- 创建本地用户
- 数据源
- 打印机配置
- 创建/更新服务
- 计划任务
组策略首选项提权分析
创建组策略
- 在Group Policy Management Editor 中打开计算机配置界面,新建一个组策略,更新本地计算机用户的组策略首选项密码
- 将Domain Computer组添加到验证组策略对象列表中。然后将新建的组策略应用到域中所有的非域控制器中
- 手动更新组策略
gupdate
获取组策略的凭据
在SYSVOL 中搜索,可以找到包含cpassword的XML文件
- 手动查找cpassword(浏览SYSVOL文件夹获取相关文件)
- 使用powershell获取cpassword(Get-GPPPassword.ps1)
- 使用Metasploit获取cpassword(post/windows/gather/credentials/gpp)
- 使用Empire获取cpassword(usemodule privesc/gpp)
除了Group.xml,还有以下几个组策略首选项文件中有可选的Cpassword属性:
- Services/Services.xml
- ScheduledTasks\ScheduledTasks.xml
- Printers\Printers.xml
- Drives\Drives.xml
- DataSources\DataSources.xml
绕过UAC提权分析
如果操作系统是Windows Vista或更高,访问一些敏感的目录都需要经过UAC的认证
UAC
UAC(User Account Control,用户账户控制)要求用户在执行可能影响计算机运行的操作或者在进行可能影响其他用户的设置之前,拥有相对应的权限或者管理员密码。
UAC的四种设置要求:
- 始终通知
- 仅在程序试图更改我的计算机时通知我
- 仅在程序试图更改我的计算机时通知我(不降低桌面亮度)
- 从不提示
漏洞利用:
- Metesploit的exploit/windows/local/bypassuac模块
- Metesploit的exploit/windows/local/ask模块
- Nishang的Invoke-PsUACme
- Empire中的bypassuac模块和bypassuac_wscript模块
令牌窃取分析
令牌(Token)是指系统中的临时密钥。其具有随机性和不可预测性。
- 访问令牌(Access Token)代表访问控制操作主体的系统对象
- 密保令牌(Security Token)是一种用于实现计算机身份校验的物理设备
- 会话令牌(Session Token)是交互会话中唯一的身份标识符
伪造令牌攻击的核心是Kerberos协议。
令牌窃取
前提:已经获得了目标机器的metepreter Shell。
metepreter> use incognito
metepreter> list_tokens -u
# 列出可用令牌
两种类型令牌:
- Delegation Tokens:授权令牌,支持交互式登录
- Impersonation Tokens:模拟令牌,支持非交互式会话
metepreter> impersonate_token 令牌名
metepreter> shell
Rotten Potato本地提权
metepreter> use incognito
metepreter> list_tokens -u
# 列出可用令牌
下载RottenPotato.exe
上传并执行
metepreter> upload /root/RottenPotato/rottenpotato.exe
metepreter> execute -HC -f rottenpotato.exe
metepreter> impersonate_token "令牌名"
metepreter> getuid
添加域管理员
在meterpreter会话窗口中输入’ps’,查看系统进程。找到域管理进程,并使用migrate命令迁移到该进程。接着添加域用户:
metepreter> shell
net user shuteer test /ad /domain
把添加的用户添加到域管理员组中:
net group "domain admins" shuteer /ad /domain
查看域管理员组:
net group "domain admins" /domain
在metepreter中可使用incognito来模拟域管理员,然后迭代系统中所有可用的身份验证令牌来添加域管理员。
metepreter> add_user shuteer test -h 1.1.1.2
metepreter> add_group_user "Domain Admins" shuteer -h 1.1.1.2
Empire
使用Empire内置的==mimikatz==工具
无凭证条件下的权限获取
LLMNR和NetBIOS
LLMNR:本地链路多播名称解析,是一种域名系统数据包格式。当局域网中的DNS服务器不可用时,DNS客户端会使用LLMNR解析本地网段中机器的名称,知道DNS服务器恢复
LLMNR的工作流程:
- DNS客户端在自己的内部名称缓存中查询名称
- 如果没找到,主机将向DNS发送名称查询请求
- 如果主DNS没有回应或者收到了错误的信息,主机会向备DNS发送查询请求
- 如果备DNS没有回应或者收到了错误的信息,将使用LLMNR进行解析
- 主机通过UDP协议向组播地址224.0.0.252的5355端口发送多播查询请求,以获取主机名所对应的IP地址。查询范围仅限本地子网
- 本地子网中所有支持LLMNR的主机在收到请求后,会比对自己的主机名,如果不同则丢弃;如果相同,就向查询主机发送包含自己的IP地址的单播信息。
NetBIOS:一种网络协议,一般用在由十几台计算机组成的局域网中(根据NetBIOS协议广播获得计算机名称,并将其解析为相应的IP地址)。NetBIOS不支持IPv6
NetBIOS提供的三种服务:
- NetBIOS-NS(名称服务):主要用于名称的注册和解析,以启动会话和分发数据报。该服务需要使用域名服务器来注册NetBIOS的名称。默认监听UDP 137端口,也可用使用TCP 137端口
- Datagram Distribution Service(数据报分发服务):无连接服务。该服务负责进行错误检测和恢复,默认监听UDP 138端口
- Session Service(会话服务):允许两台计算机建立连接,允许电子邮件跨越多个数据包进行传输,提供错误检测和恢复机制。默认使用TCP 139端口。
Net-NTLM Hash:
NTLM Hash是指Windows操作系统的Security Account Manager中保存的用户密码散列值。NTLM Hash通常保存在Windows的SAM文件或者NTDS.DIT数据库中,用于对访问资源的用户进行身份验证。
Net-NTLM Hash是指网络环境中经过NTLM认证的散列值。挑战/响应验证中的“响应”就包含Net-NTLM Hash。使用Responder抓取的通常就是Net-NTLM Hash。
LLMNR和NetBIOS欺骗攻击
目标网络的DNS服务器因发生故障而无法提供服务时,会退回LLMNR和NBT-NS进行计算机名解析。
所用工具:==Responder==
若没有获得任何目标系统的相关信息和重要凭据,可先开启Responder的监听模式
之后利用SMB协议获取目标网络计算机的Net-NTLM Hash
参考:内网安全攻防渗透测试实战指南