【SQL注入-13】利用SQL注入漏洞读写文件案例

1 读写文件的前提条件

我们也可以利用SQL注入漏洞读写文件。但是读写文件需要一定的条件。

1.1 secure-file-priv参数

利用SQL注入漏洞进行文件读写,需要后台数据库开启一定的设置。

1.1.1 作用

secure-file-priv参数是用来限制LOAD DATA, SELECT … OUTFILE, and LOAD_FILE()传到哪个指定目录的。
secure_file_priv参数配置及含义如下:

secure_file_priv参数配置含义
secure_file_priv=null表示限制mysqld 不允许导入或导出
secure_file_priv='/tmp/ ’表示限制mysqld 的导入或导出只能发生在/tmp/目录下
secure_file_priv=表示不对mysqld 的导入或导出做限制

1.1.2 secure-file-priv参数值的查看

1.1.2.1 远程查看

该参数可以 远程登录数据库后台管理页面中查看(在phpMyAdmin)。

  • 浏览器中访问数据库后台管理页面(phpMyAdmin)并登录。
  • 点击变量,在搜索框中查找(输入sec并回车),就可以搜索出secure-file-priv参数,我们看到这里参数的值是null,也就是说不允许导入导出。
    在这里插入图片描述
    在这里插入图片描述
1.1.2.2 本地查看

在安装有数据库的系统上登录数据库后,通过命令查看

  • 在cmd窗口登录数据库。先cd到安装mysql的文件夹中cd C:\phpStudy\PHPTutorial\MySQL\bin,再使用命令mysql -u root -proot回车(用的是phpstudy默认的账号密码登录)。
  • 查找secure-file-priv参数。输入命令:show global variables like '%secure%',可以看到secure-file-priv参数的值是null,也就是说不允许导入导出。
    在这里插入图片描述

1.1.3 secure-file-priv参数值的更改

该参数无法通过远程方式进行更改,只能通过修改配置文件进行更改。具体操作步骤如下:
(1)打开my.ini配置文件。进入mysql的安装文件夹,找到里面的my.ini配置文件,以记事本或VS code等方式打开编辑。
在这里插入图片描述
(2)在[mysqld]内增加secure_file_priv =,保存文件退出,并重启phpstudy。
在这里插入图片描述
在这里插入图片描述

(3)刷新后再次查看,可以看到secure-file-priv参数为空,表示允许导入导出操作。
在这里插入图片描述

1.2 当前用户具有文件权限

注意,想要完成导入导出操作,需要当前用户具有相应文件权限。
使用命令select file_priv from mysql.user where user="root" and host="localhost";查询当前用户是否具有文件权限。在这里插入图片描述

1.3 需要知道文件的绝对路径

读取和写入文件时需要知道文件的绝对路径。

2 读取和写入文件

2.1 读取文件

使用load_file()函数读取文件,需要使用绝对路径。

不同系统的绝对路径示意:

  • windows路径:C:\Windows\System32\config\SAM
  • Linux路径:C:/Windows/System32/config/SAM

注入命令例如:?id=1 union select 1,load_file(‘C:\Windows\System32\config\SAM’),3。读取文件时采用联合查询的方式。

2.2 写入文件

使用select……into_outfile'绝对路径'导入数据到pc的指定目录下。
注入命令例如:?id=-5 union select 1,'<?php phpinfo();?>',3 into_outfile 'C:\\phpStudy\\PHPTutorial\\WWW\\test.php'。网页可能会报错,不过可能成功了,可以访问试试。

3 读取和写入文件具体实例

3.1 操作环境

实验靶场——虚拟机(IP为172.16.1.1):本节实验靶场是在win2008系统上基于phpstudy搭建的一个简单网站,win2008及phpstudy的安装过程可以参考《【语言环境】WAMP环境部署及优化—以win2008R2SP1为操作系统》,网站的搭建过程可以参考《【(SQL+HTML+PHP)综合】一个简单论坛网站的综合开发案例

注入工具——真实机:本实验利用火狐浏览器来实现union注入,为方便注入过程的编码,建议安装一个扩展插件harkbar,安装过程参考《HackBar免费版安装方法》由于该教程中的2.1.3harkbar我安装后无法正常使用,就安装了HackBar Quantum来代替。安装后出现下图左侧的东西。
在这里插入图片描述

3.2 操作步骤

3.2.1 判断注入点与注入类型

在该阶段主要是尝试不同的输入参数,根据网页反馈信息来判断是否存在注入点以及注入类型,如是否是字符型还是数值型。
(1)用浏览器访问我们的留言论坛,并点击第一条留言进入测试界面。

在这里插入图片描述
在这里插入图片描述
(2)将参数修改为?id=5,并刷新,看到页面变化如下,弹出第5条留言内容,由此可推测见后台是根据id参数的不同来反馈不同信息,因此推测留言内容极有可能是存在数据库中,可控参数id与数据库存在交互,很可能存在sql注入。
在这里插入图片描述
(3) 当参数为?id=5 and 1=1;返回页面与原页面一致 。通过该参数我们可以分析得到该注入数据类型为数值型,原因如下:

  • 猜测为数值型,则后台SQL语句为 select * from table where id=5 and 1=1,where语句判断条件为真且id=5,语句正常执行。
  • 猜测为字符型,则后台SQL语句为 select * from table where id=‘5 and 1=1’,where语句将找不到id为‘5 and 1=1’的参数,语句执行失败。
    在这里插入图片描述

3.2.2 判断回显列数和回显位置

(1)修改参数为 ?id=5 union select 1,2,3,4 ,说明原参数回显数据有4列,也可以根据传统方法先用order进行尝试。
在这里插入图片描述
(2)修改参数为?id=-5 union select 1,2,3,4,回显结果如下,说明有第2、3、4显示位,可以利用为union联合查询注入。
在这里插入图片描述

(3)结论

  • 因为id参数是用户可控的,会随请求带入到数据库中执行并回显相应内容,是一个注入点。
  • 根据第3步说明参数为数值型。
  • 利用union联合查询有4列数据,其中第2、3、4位能回显。

3.2.3 获取数据库路径

参改参数为?id=-1 union select 1,2,3,@@datadir,通过该命令获取后台数据库的绝对路径,如下:
在这里插入图片描述

3.3 读取数据库文件配置

修改参数为?id=-5 union select 1,2,3,load_file('C:\\phpStudy\\PHPTutorial\\MySQL\\my.ini')获取数据库配置文件,并回显到网页上。问题关键转变为如何获取想要文件的路径
在这里插入图片描述

3.4 写入文件

假设我们通过某些方式知道了网站的根目录路径为C:\phpStudy\PHPTutorial\WWW。以后得学学怎么获取到根目录路径。
利用写入文件函数,以后可以写入一句话木马或者PHP探针。此处以PHP探针为例。修改参数注入参数为 ?id=-1 union select 1,2,3,'<?php phpinfo();?>' into outfile "C:\\phpStudy\\PHPTutorial\\WWW\\test.php",出现页面如下,虽然出现警告,但是我们文件已经成功写入了。
在这里插入图片描述
验证下是否写入成功。在浏览器访问目标IP下的文件test.php,成功执行该文件并返回PHP探针信息。
在这里插入图片描述

4 总结

(1)利用SQL注入漏洞读写文件既受到数据库secure-file-priv参数设置的制约,又受到用户权限的制约,同时还得知道文件的绝对路径。
(2)掌握利用SQL漏洞进行文件读写的方法。
(3)后续需要进一步了解如何获取网站根目录路径的方法。

参考文章

[1] 《【SQL注入16】SQL漏洞利用之读写文件

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值