mysql渗透测试笔记小结

一.写webshell

1.select into outfile

限制:

  1. root用户才能执行

  2. 受secure_file_priv限制

1
2
3
4
5
1.secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出

2.当secure_file_priv的值为/tmp/ ,表示限制mysql 的导入|导出只能发生在/tmp/目录下

3.当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制

2. general_log写shell

限制:

1
2
3
1.root权限

2. linux下默认不允许general_log设置为www目录下,无法getshell

3.在表里写shell,然后包含这个表的文件

load_file

1
select load_file("文件路径");

限制

  1. 依然受到权限的限制以及 secure_file_Priv 的限制
  2. 在mysql5.7.26,secure_file_priv收到限制,只能通过配置文件才能修改

信息收集

1
2
3
4
5
6
7
show variables like '%compile%';\也可以

select @@basedir;//获取当前路径

select * from mysql.user where user = substring_index(user(), '@', 1) ;//获取当前用户权限

show variables like '%plugin%';//获取当前用户权限

配置文件

data/common.inc.php

config/config_global_default.php
config /config_ucenter.php
config.inc.php
/WEB-INF/config/config.properties

UDF提权

window中是dll文件,linux中是so文件。sqlmap中有源码

mysql5.0.67以上是在plugin目录下生效

select @@plugin_dir;可以找到安装目录

如果为空或者低于5.0.67,就要在系统动态链接器的搜索目录下才能被加载。

如何写入:

  1. select load_file() into dumpfile(‘plugn目录下’);

  2. hex写入

    1
    select hex(load_file('dll文件')) into outfile "plugin目录下";

可以用一些编码但是都要有dumpfile。

前提是secure_file_priv允许。要不然都是扯淡。

3.如果没有lib没有plugin,则可以

1
echo 'xxx' >'(路径)/plugin::$INDEX_ALLOCATION'

利用NTFS ADS流来创建文件夹。

接下里的就是创建函数了,只能用dll文件里面的函数。

参考链接

https://www.k0rz3n.com/2018/10/21/Mysql%20%E5%9C%A8%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95%E4%B8%AD%E7%9A%84%E5%88%A9%E7%94%A8/#3-%E4%BD%BF%E7%94%A8-echo-%E5%91%BD%E4%BB%A4%E7%9B%B4%E6%8E%A5%E5%86%99-shell-%E5%9F%BA%E4%BA%8EUDF-%E6%8F%90%E6%9D%83

https://www.jianshu.com/p/5b34c1b6dee7