SQL注入之-MYSQL基础

MYSQL基础

1、简介

MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

  • MySQL 是开源的,所以你不需要支付额外的费用。
  • MySQL 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
  • MySQL 使用标准的 SQL 数据语言形式。
  • MySQL 可以运行于多个系统上,并且支持多种语言。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby 和 Tcl 等。
  • MySQL 对PHP有很好的支持,PHP 是目前最流行的 Web 开发语言。
  • MySQL 支持大型数据库,支持 5000 万条记录的数据仓库,32 位系统表文件最大可支持 4GB,64 位系统支持最大的表文件为8TB。
  • MySQL 是可以定制的,采用了 GPL 协议,你可以修改源码来开发自己的 MySQL 系统。

 

 

2、MYSQL基础语法

2.1 注释

MYSQL 有三种注释方法,分别是# 、/**/、--
单行注释,#
多行注释,/**/  
单行注释 --  后面必须加空格
 

2.2 内联注释

内联注释是MySQL数据库为了保持与其他数据库兼容,特意新添加的功能。 为了避免从MySQL中导出的SQL语句不能被其他数据库使用,它把一些MySQL 特有的语句放在 /*! ... */ 中,这些语句在不兼容的数据库中使用时便不会执行。 而MySQL自身却能识别、执行。

/*50001 */表示数据库版本>=5.00.01时中间的语句才会执行。 在SQL注入中,内联注释常用来绕过waf。

2.3 注释在SQL注入用法

 

 

例子:select user from student where id = 1 limit 0,1;
注入:select user from student where id = 1 and 1=2 union select user() # limit 0,1;
攻击者注入一段包含注释符的SQL语句,将原来的语句的一部分注释,注 释掉的部分语句不会被执行

2.4 MYSQL基础语法

渗透测试中对一些基础语法了解就可以了,毕竟不是开发,
注意:每一句命令后要加上 分号;
数据库操作:
进入mysql 命令行:mysql -uroot -p;
查看所有数据库:show databases;
创建数据库:create database niu charset utf8;
删除数据库:drop database niu;
选择数据库:use databases;
查看所有表:show tables;
查看创建数据库的语句:show create database databasename;
查看创建表的语句:show create table tablename;
查看表结构:desc tablenmae;
查询表数据
查询表中所有学生的信息:select id,name,chinese,english,math from student;
查询表中所有学生的姓名和对应的英语成绩:select name,english from student;
查询姓名为wu的学生成绩:select * from student where name=‘张三‘;
查询英语成绩大于90分的同学:select * from student where english>‘90‘;
查询英语分数在 80-90之间的同学:select * from student where english>=80 and english=<90;
脱裤
    使用SELECT ... INTO OUTFILE

mysql> SELECT * FROM runoob_tbl 
    -> INTO OUTFILE '/tmp/runoob.txt';

    或者mysqldump 

$ mysqldump -u root -p RUNOOB runoob_tbl > dump.txt
password ******
    或者使用sqlmap进行脱裤
    还有其他脱裤工具等,不说了。
    其他语法可以去菜鸟教程上自己看。

2.5  SQL 注入函数、语句

union联合查询
1. union 操作符用于拼接两个或者多select查询语句 
2. union中的每个查询必须拥有相同的列数
SQL函数如下

 

 

SQL注入读写文件要求:
1. 数据库允许导入导出(secure_file_priv)
 2. 当前用户用户文件操作权限(File_priv)
文件操作
load_file() 读文件
into outfile/ into dumpfile 写文件
条件:
1.对web目录具有读写权限
2. 知道文件绝对路径
3. 能够使用联合查询(sql注入时)
命令:
    select load_file(‘d:/phpstudy/www/anyun.php’);
    select ‘anyun’ into outfile ‘d:/phpstudy/www/anyun.php
 
    outfile与dumpfile的区别: dumpfile适用于二进制文件,它会将目标文件 吸入同一行内;
  outfile则更适用于文本文件
 
   CONCAT函数
  
CONCAT(s1,s2...sn) 字符串 s1,s2 等多个字符串合并为一个字符串

合并多个字符串

SELECT CONCAT("SQL ", "Runoob ", "Gooogle ", "Facebook") AS ConcatenatedString;
CONCAT_WS(x, s1,s2...sn) 同 CONCAT(s1,s2,...) 函数,但是每个字符串之间要加上 x,x 可以是分隔符

合并多个字符串,并添加分隔符:

SELECT CONCAT_WS("-", "SQL", "Tutorial", "is", "fun!")AS ConcatenatedString;

 

posted @ 2020-09-13 15:36  m0rn00  阅读(271)  评论(0)    收藏  举报