权限提升
windows

信息收集
- 当前权限 -> 提权方法
- 操作系统版本/位数 -> 提权方法
- 漏洞补丁 -> 溢出漏洞
- 杀软防护 -> 当前进程服务,免杀
- 网络情况 -> 无法反弹shell?
| 命令 | 描述 |
|---|---|
| systeminfo | 打印系统信息 |
| whoami | 获得当前用户名 |
| whoami /priv | 当前帐户权限 |
| hostname | 主机名 |
| net user | 列出用户 |
| net user UserName | 关于用户的信息 |
| netsh firewall show config | 显示防火墙配置 |
| tasklist | 列出进程 |
| tasklist /svc | 列出服务任务 |
| net start | 列出启动的服务 |
| sc query | 列出所有服务 |
溢出漏洞
1.利用
使用范围:windows全版本,主要根据补丁情况决定
使用权限:web服务器权限即可
利用流程:
- 信息收集
- 筛选EXP
- 下载EXP
- 上传EXP
- EXP利用
实战中最常用的本地溢出提权有 CVE-2018-8120、MS16-032、MS15-051 和MS14-058
1.信息收集
systeminfo
根据系统版本、补丁信息,筛选可用EXP。
2.筛选EXP
筛选EXP -> 根据系统类型、补丁情况寻找未打补丁的漏洞
在线网站:
辅助工具:
- https://github.com/bitsadmin/wesng
- https://github.com/SecWiki/windows-kernel-exploits/tree/master/win-exp-suggester
- https://github.com/chroblert/WindowsVulnScan
- MSF
wesng:复制systeminfo保持为txt,在本地执行wes.py
1 | |
MSF
1 | |
3.下载EXP
EXP可能有很多都无法成功,原因很多,所以一定要看一些EXP的介绍,了解一下漏洞成因(比如是根据某服务进行提权,但是目标根本就没有,所以自然无法提权成功),使用方式(直接提权/可以提权执行命令)….
- https://github.com/Ascotbe/Kernelhub
- https://github.com/nomi-sec/PoC-in-GitHub
- https://github.com/SecWiki/windows-kernel-exploits
- MSF
4.上传并执行EXP
上传 -> webshell,msf upload…
5.流程
手工提权
webshell -> systeminfo -> wesng -> 网上寻找EXP -> 上传EXP -> EXP利用 -> systeminfo
MSF提权
webshell -> 上传msf后门 -> msf监听 -> 执行后门 -> post/multi/recon/local_exploit_suggester(自动筛选exp) -> bg -> info … -> use …(使用…模块) -> show options -> set session … … -> run -> systeminfo
2.实操
1.MSF
1 | |

1 | |

1 | |


2.手工
使用MSF进行EXP枚举动静较大,且一些新的漏洞exp msf中可能未集成,所以这里熟悉一下手工提权的流程。
信息收集 -> 筛选EXP -> 下载EXP -> 上传并执行EXP
1 | |

复制systeminfo信息,并使用wesng筛选未打补丁的漏洞编号。
1 | |

查找存在的EXP的漏洞,这个是因为github上的比较慢,还要一个一个搜,就把 Kernelhub、PoC-in-GitHub、WindowsVulnScan 全部克隆下来到本地,然后写了个脚本解析csv文件,提取权限提升的漏洞编号,批量使用find命令进行查找exp路径。exp的项目可以使用crontab命令定时进行克隆。

然后就是看每个EXP的介绍,寻找适合的EXP,这里使用 CVE-2019-1458。
使用MSF上传EXP:
1 | |

这个exp可以以system权限执行命令,不能直接反弹shell,这里使用exp执行msf的后门,然后再启动一个msf进行监听:

得到一个system权限的shell:

get_windows_exp.go
1 | |
AT&SC&PS
AT&SC&PS命令提权的原理大致相同,系统执行一些任务、服务…时,会默认调用system权限,从而导致权限提升。
| 命令 | 作用 | 使用版本 |
|---|---|---|
| at | 计划任务 | 2000/2003/XP |
| sc | 服务控制 | 7/8/2003/2012/2016/2019 |
| psexec | 远程执行进程 | 同上 |
注:交互式的cmd窗口无法生成时,可以执行后门来反弹shell,可能只是无法执行交互式的任务,而不是无法执行。
1.利用
1.at
计划命令,默认调用system权限
1 | |
2.sc
用于服务控制管理器和服务进行通信的命令行程序,功能类似于控制面板中管理工具项中的服务
1 | |
3.psexec
pstools:微软官方的一个工具包
pstools:https://learn.microsoft.com/zh-cn/sysinternals/downloads/pstools
psexec:pstools 中一个可以执行进程的工具

利用 psexec 进行提权。
1 | |
2.实操
1.sc
目标:windows server 2012
执行交互式的cmd服务失败,根据警告发现可能是交互式的问题:

那么就利用sc执行msf后门,成功:
1 | |


2.psexec
下载pstools,将psexec上传到目标。
弹cmd窗口:

弹shell:


进程注入
1.利用
适用版本:2008/2012/2016/2019
原理:将后门注入到system权限进程下,线程继承了system进程的权限,实现权限提升。
使用工具:MSF、pinjector(仅适用于2008之前的版本,这里就不使用了)
1 | |
2.实操
1 | |

令牌窃取
令牌窃取一般使用于本地用户,不过在于烂土豆漏洞配合的情况下,可以从服务权限 (仅适用于服务权限) 进行提权。
1.利用
适用版本:2003/2008/2012/2016/2019
使用工具:MSF
1 | |
烂土豆配合令牌窃取提权:
烂土豆是溢出漏洞,令牌窃取适用于本地权限提升,可以使用烂土豆和令牌窃取进行配合实现webshell的权限提升。
适用条件:
- 烂土豆未打补丁
- 当前权限为服务权限,而非本地用户
MS16-075 RottenPotato原理:
- 欺骗 “NT AUTHORITY\SYSTEM”账户通过NTLM认证到我们控制的TCP终端。
- 对这个认证过程使用中间人攻击(NTLM重放),为“NT AUTHORITY\SYSTEM”账户本地协商一个安全令牌。这个过程是通过一系列的Windows API调用实现的。
- 模仿这个令牌。只有具有“模仿安全令牌权限”的账户才能去模仿别人的令牌。一般大多数的服务型账户(IIS、MSSQL等)有这个权限,大多数用户级的账户没有这个权限。
RottenPotato下载:
- https://github.com/SecWiki/windows-kernel-exploits/blob/master/MS16-075/potato.exe
- https://github.com/breenmachine/RottenPotatoNG/blob/master/RottenPotatoEXE/x64/Release/MSFRottenPotato.exe
- https://github.com/foxglovesec/RottenPotato
1 | |
2.实操
1 | |

getsystem
1.利用
getsystem 是MSF中针对windows管理员组用户的一个自动提权模块,其使用条件为:
- 管理员组的成员
- UAC:
- 非最高等级:MSF内置模块,UACME 进行绕过
- 最高等级:使用MSF ask模块,会给目标弹出一个UAC的框,用户确定后,即可绕过UAC提权
查看当前用户是否属于管理员组:
1 | |

UAC -> 用户账户控制

BypassUAC:
- MSF 内置模块
- UACME 工具
MSF:

1 | |
UACME:https://github.com/hfiref0x/UACME
1 | |
2.实操
1.无UAC
查看当前用户是否属于管理员组:
1 | |

当前用户 admin 在管理员组中,可以使用 getsystem 进行提权,直接提权成功。

2.BypassUAC
UAC -> 默认,第三级

提权尝试 -> 失败

1 | |

1 | |

DLL劫持
1.利用
DLL介绍:
- DLL:动态链接库
- DLL 是一个包含可由多个程序同时使用的代码和数据的库。
DLL劫持提权:
在程序运行后,就需要从DLL中加载其需要使用的代码,根据这个特性,我们将某个DLL替换为一个包含后门的DLL文件,在这个程序运行时,就会自动加载这个DLL文件,从而触发后门代码,使我们成功得到一个shell。
DLL劫持具体获取的权限一般取决于运行此程序时用户的权限,一般是管理员组的用户,这时再使用MSF的
getsystem或者其他方式继续提升到system权限。
使用工具:
- DLL分析:WinDbg、火绒剑
- DLL劫持验证:ChkDllHijack
- DLL后门生成:MSF
工具下载:
- WinDebug:http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKDebuggingTools_amd64/dbg_amd64.msi
- ChkDllHijack:https://github.com/anhkgg/anhkgg-tools
工具使用:
WinDebug:




ChkDllHijack:
把WinDebug的dll复制到这里,再选择好目标exe文件。

这个工具会一直测试dll文件(一直启动目标程序),最后会显示出可以替换的dll文件:

MSF生成DLL后门:
1 | |
2.实操
目标机器上有flashfxp,本地安装一下。
使用WinDebuy启动软件,查看其dll调用情况。



这里使用libeay32.dll:
1 | |
这个测试没有成功,的确调用了dll文件,但是无法反弹shell。
服务路径
1.利用
其根本原理还是系统调用服务时默认会以system权限去运行,导致权限提升。
原理:当服务路径 不带引号 且 路径中存在空格 时,可以将其看作 [命令][空格][参数] 的形式,上传一个与 [命令] 同名的exe文件,当服务启动后,会运行 [命令],而在windows中exe文件可以不加后缀就执行,导致服务启动时执行了我们上传的EXE文件,实现了权限提升。
带引号和不带引号的区别:
"C:\Program Files\Everything\Everything.exe":表示的是一个命令整体
C:\Program Files\Everything\Everything.exe:由于 C:\Program 后有空格,则表示为 C:\Program 是命令,而Files\Everything\Everything.exe 是 C:\Program 命令的参数
运行后如下:

使用 wmic 检查不带引号的服务路径:
1 | |
使用 sc 命令启动服务:
1 | |
利用流程:
- 使用wmic寻找不安全的服务路径
- 制作同名的后门,上传到指定位置
- 启动监听,重启服务
2.实操
1 | |

发现phpStudySrv服务路径不带引号且路径中存在空格,那么就修改后门名为 Program.exe,上传到 C:\
1 | |

启动新的MSF监听,启动服务,提权成功:
1 | |

服务权限
1.利用
原理:某些服务可以权限设置不恰当,导致可以被低权限的用户修改其服务路径,从而直接将服务路径指向后门文件,导致权限提升。
使用工具:accesschk
工具介绍:微软官方的 windows系统配置检查工具,用于查看文件、注册表项、服务、进程、内核对象等的有效权限。**该工具将有助于识别当前用户是否可以修改某个服务目录中的文件。**我们可以使用该工具查看当前用户可以修改的服务。
accesschk:https://learn.microsoft.com/zh-cn/sysinternals/downloads/accesschk
1 | |

RW 就代表着可以读写。RW后面跟的就是是服务名。
之后就是修改服务路径,启动服务。
1 | |
2.实操
上传 accesschk:
1 | |

运行 accesschk,查看是否可以修改服务路径:
1 | |

查看当前用户可以修改的服务:
1 | |

替换服务指向路径,路径设置为MSF的后门程序:
1 | |
修改后,启动MSF监听,启动服务,提权成功。

数据库
使用工具:
- MSF
- Navicat
1.MySql
前提条件:
- root 用户 -> 文件写入的权限
- secure_file_priv 为空 -> 文件写入位置不受限制
1.udf提权
1.简介
udf -> user defined function -> 用户自定义函数
udf 提权就是用户定义了一个执行命令的函数从而实现系统命令的执行。
udf 文件后缀在windows与linux系统下分别为dll与so,即动态链接库文件,由C、C++编写。
udf 在mysql5.1以后的版本中,存放于’mysql/lib/plugin’目录下。5.1 之前 c:\windows\system32 。
2.条件
- root账户
- secure_file_priv为空
3.开启外连
MySql默认情况下是不允许外部远程连接root用户的,所以需要先使用webshell、Navicat HTTP通道、phpmyadmin等方式开启外连。
1 | |
4.MSF_UDF
MSF中有udf模块,dll中包含sys_exec()和sys_eval()两个函数,MSF只创建sys_exec(),sys_exec()不回显,所以还需要手工创建sys_eval()。
1 | |
1 | |
5.反弹shell
MSF中的dll自定义的函数是用来执行命令的,还可以其他dll来创建用来反弹shell的函数。
可用使用暗月MYSQL高版本提权工具进行反弹shell。
https://blog.csdn.net/weixin_43801718/article/details/105493042?spm=1001.2014.3001.5501
https://www.sqlsec.com/2020/11/mysql.html#%E5%8F%8D%E5%BC%B9%E7%AB%AF%E5%8F%A3%E6%8F%90%E6%9D%83
2.启动项提权
MySql的文件写入功能 -> 写入后门到启动项目录中 -> 目标机器重启,执行后门,反弹shell
1 | |
3.MOF提权
MOF -> 成功几率很小 2003
原理:C:/Windows/system32/wbem/mof/ 目录下的 mof 文件每 隔一段时间(几秒钟左右)都会被系统执行,因为这个 MOF 里面有一部分是 VBS 脚本,所以可以利用这个 VBS 脚本来调用 CMD 来执行系统命令,如果 MySQL 有权限操作 mof 目录的话,就可以来执行任意命令了。
1 | |
4.总结
MySQL提权共3种方法,其实还是一种方法 -> 利用MySQL文件写入的功能,所以限制就比较明显 -> 文件写入的权限&写入任意路径的权限。
5.实操
1.UDF
1.信息收集
webshell连接数据库:

查看是否可写入文件?
1 | |
可以看到 secure_file_priv 为空,满足条件,可以提权。

2.开启外连
1 | |

3.MSF
use exploit/multi/mysql/mysql_udf_payload
set RHOSTS 43.139.185.135
set PASSWORD root
run
No such file or directory,需要手工创建。使用MSF报错出路径再创建比较方便。

webshell创建文件夹:

run


创建sys_eval:
create function sys_eval returns string soname “nqCFiHBv.dll”; # 创建sys_eval函数
select sys_eval(“whoami”); # 命令执行


由于是phpstudy搭建的环境,所以权限是phpstudy获得的权限 -> administrator,而不是system权限。
4.反弹shell
dll文件中存在反弹shell的函数,从而实现反弹。
https://www.sqlsec.com/2020/11/mysql.html#%E5%8F%8D%E5%BC%B9%E7%AB%AF%E5%8F%A3%E6%8F%90%E6%9D%83
工具:暗月MYSQL高版本提权工具

2.启动项
use exploit/windows/mysql/mysql_start_up
set USERNAME root
set PASSWORD root
set RHOSTS 43.139.185.135
set DISABLEPAYLOADHANDLER false
run


2.MSSQL
https://github.com/uknowsec/SharpSQLTools/
前提条件:sa 用户
1.xp_cmdshell
xp_cmdshell -> 可以执行系统命令
开启xp_cmdshell:
1 | |
执行命令:
1 | |
2.sp_oacreate
sp_oacreate可以删除、复制、移动文件,还能配合sp_oamethod来写文件执行cmd。
sp_oacreate和sp_oamethod两个过程分别用来创建和执行脚本语言,换言之就是xp_cmdshell能执行的sp_oacreate+sp_oamethod同样能胜任。但是使用此方法时sp_oacreate没有回显,所以一般用于xp_cmdshell无法使用时。
开启组件:
1 | |
调用cmd.exe执行命令并写入到test.txt
1 | |
3.沙盒
原理:本质是修改注册表,默认情况下,注册表中mdb数据库不允许执行系统命令,但是开启沙盒模式,就准许mdb文件执行数据库,通过查询方式调用mdb文件,执行参数,绕过系统本身自己的执行命令,实现mdb文件执行
1 | |
clr
Microsoft SQL Server 2005之后,实现了对 Microsoft .NET Framework 的公共语言运行时(CLR)的集成
CLR 集成使得现在可以使用 .NET Framework 语言编写代码,从而能够在 SQL Server 上运行,现在就可以通过 C# 来编写 SQL Server 自定义函数、存储过程、触发器等
大概意思就是,利用CRL组件我们可以在SQ Server数据库上执行任意C#代码
1 | |
https://www.cmdhack.com/archives/224.html
4.JOB
原理是创建一个任务x,并执行命令,命令执行后的结果,将返回给文档q.txt
首先需要启动sqlagent服务:
1 | |
然后创建任务X,这里x为任务名称,并执行命令,命令执行后的结果,将返回给文本文档q.txt
1 | |
5.映像劫持
利用regwrite函数修改注册表,起到劫持作用:
1 | |
6.实操
1.xp_cmdshell
Navicat连接,默认开启外连:

EXEC sp_configure ‘show advanced options’, 1RECONFIGURE;
EXEC sp_configure ‘xp_cmdshell’, 1;
RECONFIGURE;

EXEC master.dbo.xp_cmdshell ‘whoami /all’;

2.sp_oacreate
EXEC sp_configure ‘show advanced options’,1;
RECONFIGURE;EXEC sp_configure ‘Ole Automation Procedures’,1;
RECONFIGURE;

declare @shell int exec sp_oacreate ‘wscript.shell’,@shell output exec sp_oamethod
@shell,’run’,null,’c:\windows\system32\cmd.exe /c whoami >d:/test.txt’

3.其他
其他方法无法成功,可能是安装出了问题或者没有权限。
3.oracle
java一般是system权限运行,所以oracle一般直接得到最高权限。
工具:oracleShell
地址:https://github.com/jas502n/oracleShell

4.PostgreSQL
PostgreSQL提权主要是靠2个Nday:
- CVE-2018-1058 PostgreSQL 提权漏洞 -> 普通用户连接到数据库—>注入危险代码—>等待超级用户登录触发后门—>收到敏感信息
- CVE-2019-9193 高级权限命令执行漏洞
登录:psql –host your-ip –username vulhub
1.CVE-2018-1058
影响版本:9.3到10
普通用户连接到数据库—>注入危险代码—>等待超级用户登录触发后门—>收到敏感信息
1 | |
1 | |
https://vulhub.org/#/environments/postgres/CVE-2018-1058/
https://blog.csdn.net/q943111495/article/details/121032338
2.CVE-2019-9193
从9.3版本开始,Postgres新增了一个COPY TO/FROM PROGRAM功能,允许数据库的超级用户以及pg_read_server_files组中的任何用户执行操作系统命令。
1 | |
https://vulhub.org/#/environments/postgres/CVE-2019-9193/
https://cloud.tencent.com/developer/article/1472565
3.实操
1.CVE-2018-1058
1 | |

1 | |

2.CVE-2019-9193

linux
Linux 中权限提升方式不过多赘述,通过 SUID、提权漏洞、服务等方式,可以使用各种工具直接全面检测,很简单。
直接下载执行就能收集信息和检测提权漏洞。