网安学习日志(通过数据库提权)

1. 操作前提以及思路

想要进行数据库的提权首先要满足两个条件:

1.获取目标数据库的最高权限的账号以及密码;

2.目标数据库没有进行目录限制,也就是我们得有读写权限,如下图所圈位置应为空;

在获得目标数据库权限之后,我们可以通过其漏洞进行相应操作来提权以获得目标的命令执行权限进而控制目标。

2. 如何获取目标数据库的最高权限账号密码

2.1  通过sql注入来获取账号密码 

首先,模拟对方数据库存在sql注入点“sql.php”:

随后我们启动我们的kali,使用sqlmap工具通过这个注入点来1获取目标数据库的版本等等信息:

然后我们使用“-- dbs”的后缀去查看该数据库中包含那几个库: 

 

 

锁定目标,寻找名为mysql数据库中存在哪些表 :

sqlmap -u "http://192.168.3.69:90/sql.php?id=1" -D mysql --tables

我们都知道,一般存放用户账号数据的表叫“user”,那我们就怀着目的去仔细看看有没有我们需要的表,很幸运,我们发现确实存在一个名为“user”的表:

  

那我们使用命令去查看这个表中存在哪些数据,SQL注入攻击中,“--columns”参数通常用于获取目标数据表的列信息。通过列出数据表的列名,攻击者可以更精确地获取所需的敏感数据,或者执行更加高级的SQL注入攻击。而“--dump”参数则用于输出整个数据表的内容,包括每一条记录的具体数值。这可以帮助攻击者更全面地了解数据库中存储的数据内容,从而进行更深入的攻击或者数据窃取操作:

sqlmap -u "http://10.0.0.5:90/sql.php?id=1" -D mysql -T user --columns --dump

我们很快就可以发现包含root的字段,后面跟着的就是加密过的root密码,我们使用解码工具来翻译一下就可以得到密码为“root” 

 

 

2.2 通过下载数据库的存储文件(.MYD结尾)或数据库的备份文件 

MyISAM是MySQL 3.23到MariaDB和MySQL 5.5替换为InnoDB之前的默认存储引擎。在这个默认的存储引擎中有着三类文件:

(1)*.frm--表定义,是描述表结构的文件。
(2)*.MYD--"D"数据信息文件,是表的数据文件。
(3)*.MYI--"I"索引信息文件,是表数据文件中任何索引的数据树。

我们的目标就是寻找一个user的“MYD”结尾的文件。

我们下面使用一个网站来进行模拟,首先我们在该网站上创建一个账户,然后在社区评论区发表带图片的评论使用图片木马来上传一句话木马到目标的服务器中:

在完成上述准备工作之后我们使用菜刀连接我们刚刚上传的木马:

 

可以看到我们现在已经可以对目标的文件进行读取以及下载了,我们接着去寻找我们的目标,很快,我们找到了目标:

 

 

通过对加密密码的破解,我们也能成功过去目标数据库的最高管理员账号密码。

2.3 其他一些获取账号密码的方法

 我们其实还可以通过翻阅一些数据库产生的配置文件去寻找我们所需要的东西,比如在我们通过木马获取到了目标数据库的读取权限的时候,我们就可以去找一些配置文件,如下图所示,我们有时候也会有意外的收获:

 

我们还可以通过爆破的方式来获取账号密码,不过就有点看脸了。

 3. 如何提权

3.1 UDF提权

3.1.1 数据库不拒绝远程连接的提权方法

UDF:User Defined Function 用户自定义函数,mysql数据库开发这个功能的本意是想让用户可以自定义自己想要的操作去完成一些复杂的工作,然而这也给了攻击者可乘之机,攻击者在获取了目标数据库的最高权限账户后就可以通过自定义函数去定义一些函数去执行系统命令,从而间接提升权限至操作系统级别。

我们在上一步以及完成了获取目标数据库最高权限账号的操作,所以我们现在通过工具来远程连接该数据库:

 

接着我们来创建动态链接库也就是“udf.dll”文件,它的作用是为数据库提供更高的灵活性和可扩展性。动态链接库是一种存储过程、函数和存储类型的插件,可以动态加载到数据库中,以提供额外的功能和功能。

MySQL版本大于5.1,扩展文件必须放在MySQL安装目录的lib\plugin文件夹下。(plugin目录下存放的是扩展文件,plugin文件夹默认不存在,需要自己创建)

mysql版本<5.1 需要将扩展文件放在 C:\windows\或C:\windows\system32。

这里我们的版本高于5.1,所以我们得先通过菜刀在目标服务器指定位置新建文件夹“plugin”再进行导入文件。

 

 

        这里我们要注意在Windows系统中,路径通常使用反斜杠“\”来分隔文件夹和文件的名称。然而,在某些情况下,反斜杠可能会被转义,这意味着它不再被视为路径分隔符,而是被视为特殊字符。这种情况通常发生在编程语言或命令行中。例如,在C++或Java中,反斜杠通常用作转义字符,用于表示特殊字符或值。因此,如果想要在路径字符串中包含反斜杠,则需要使用双反斜杠“\”来表示一个普通的反斜杠。这样可以避免编译器将反斜杠解释为转义字符。

      这里也是一样,我们需要使用双反斜杠避免被转义:

 

然后我们利用udf.dll创建一个函数名叫“cmdshell”,也就是系统命令行得执行函数,此时我们的权限其实已经转化为系统system权限了; 

Create Function cmdshell returns string soname 'udf.dll';

我们可以通过调用这个函数来执行各种命令,包括创建用户等;  

 

这里我们创建一个名叫“ikun”密码为“123456”的账户: 

 

可以看到创建成功了。 

 

 

 我们甚至可以打开目标计算机的远程功能,可以看到现在目标的远程桌面功能处于关闭状态:

 

我们执行相关命令打开目标的远程端口,看到已经成功了:

 

 

3.1.2 遇到拒绝远程连接的数据库的提权方法 

 我们可以通过一些工具脚本上传到目标数据库,使用反向连接的方法,让目标数据库来主动连接我们从而再进行提权,我们下面上传了一个“udf1.php”的文件到目标主机中,随后使用浏览器去连接对应的地址:

输入获取到的账号密码和你要攻击的数据库名: 

 

然后我们通过该脚本也可以达到相应的提权效果; 

 

3.2 MOF提权 

mof文件是一种用于描述Windows系统管理对象的文件,其中包含了WMI(Windows Management Instrumentation)的相关信息,可以被WMI识别和解析。 通常,mof文件是由开发人员或系统管理员编写的。在Windows系统中,通过mof文件可以管理系统的各 种属性、设置、状态等,包括但不限于硬件、软件、网络连接、用户账户等。在mof文件中,包含了对象的属 性、方法和事件等信息,以及对象之间的关系。通过WMI,系统可以根据mof文件中的描述创建和管理相应的对象。

提权的原理是: C:/Windows/system32/wbem/mof/目录下的mof文件每隔一段时间(几秒钟左右)都会被系统执行, 因为这个MOF里面有一部分是VBS脚本,所以可以利用这个VBS脚本来调用 系统的CMD命令行来执行系统命 令,如果MySQL有权限操作mof目录的话,就可以来执行任意命令了。

在数据库允许远程连接的情况下,操作方法如上面的UDF所示,可以通过对应脚本来进行提权,

当目标数据库不允许远程连接的话,我们就可以先用菜刀上传一个脚本到目标网站上,让我们看一下它的代码内容:

这两个圈起来的地方代表以上这段脚本每5分钟执行一次,每次执行创建一个账号密码为“admin”的用户,当受害者察觉到有异常账号进行删除的时候,过一会这个账号就又会再次出现,十分顽强,当然,想让这段代码跑起来我们还得再做一件事,那就是把它导入到“ c:/windows/system32/”的目录下,应为在这个目录下的文件大都是一些系统文件,而且是系统每隔一段时间就得运行一次的文件,可以很好激活我们的恶意脚本,我们在菜刀的数据库命令执行中运行以下代码,目标完成:

select load_file('C:\\phpStudy\\WWW\\moon.mof') into dumpfile
'c:/windows/system32/wbem/mof/moon.mof';

4. 如何进行预防

1.关闭数据库远程连接功能;

2.不要给网站配置root权限和一些危险的权限;

3.及时更新数据库,打漏洞补丁;

4.对数据库进行安全审计等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值