0
点赞
收藏
分享

微信扫一扫

SQL注入 - sql数据库操作基础

归零者245号 2022-02-16 阅读 91

本章目的

熟悉 MySQL( MariaDB)薮据库的基础与进阶语法,加深对SQL命令语句的理解,

为后续SQL注入攻击与防护实验打下坚实的基础。

操作环境

(1)操作系统: Centos7

(2)安装的应用软件: Apache、 MySQL( MariaDB)、PHP;DWA、 SQLi-Labs

Debug3.0漏洞网站环境

MySQL( MariaDB)数据库帐号root,密码为空

实验原理

MySQL( MariaDB)数据库基本命令的功能

实验步骤

第一部分: MySQL( MariaDB)基础操作

1.连接数据库

(1)本地连接

输入命令:

mysql -u root -p
mysql -hlocalhost -u root -p
mysql -h127.0.0.1 -u root -p
mysql -h ip(本地)-u root -p

若其因ip未授权而登不上mysql则报错'FPPP'

只需添加上即可:

grant all privileges on *.* to root@"需登ip" identified by "666666";

密码666

flush privileges;

立刻生效

select user,password,host from user;

  查看:

(2)kali远程链接

mysql -h ip(目标ip)-u root -p

若报错:

grant all privileges on *.* to root@"%" identified by "666666";

同上即可。

或直接打开

之后出现“ Enter password:"的提示,,输入密码即可登录一般为root。

若密码为空,则直接按下回车键登录。——cmd的字体颜色永久改变

成功登录数据库后,会出现“ MariaDB[(none)]"的提示符。

注意:绝大部分SQL命令都以分号作为结束符,请不要遗漏!

3.新建数据库 studenta

命令

create database student;

新建成功后,可再次使用下列命令查看结果:

show databases;

 4.使用数据库 studenta

命令:

use studenta;

5.在数据库 studenta中创建表 result

命令:

create table result(id int(8), name varchar(20), city varchar (20), score int(5));

6.在表 result中增加数据

本步骤在 result中插入如下5行数据:

命令:

insert into result(id, name, city, score) values(1,"wang","beijing",75);

insert into result(id, name, city, score)values(3, "11","shanghai",80);

insert into result(id, name, city, score) values(5, "chen","fuzhou",70);

insert into result(id, name, city, score) values(2,"zhou","xian",90);

insert into result(id, name, city, score) values(7,"han","guangzhou",65);

注意:如果数据是字符型( varchar),必须使用单引号或者双引号包裹!

插入成功后,可用如下命令查询 result表中的全部内容:

select from result;

7.在表 result中删除1条数据

例如,删除id=7的数据,可使用以下命令:

delete from result where id=7;

删除成功后,仍然可以用以下命令查看结果:

select from result;

8.修改表 result中的1条数据

例如,修改id=5的数据,将其 score设置为666,可使用以下命令:

update result set score=666 where id=5;

 

修改成功后,仍然可以用以下命令查看结果:

select *from result;

9.查询表 result中的数据

例如

select *from result;

查询表中所有字段:

select name, score from result;

查询表中的name和 score字段

select score from result where name="11";

//查询name为1的学生的分数

第二部分: My SQL( MariaDB)进阶操作

1. order by的用法

(1)将 result表中的数据按照分数( score)从高到低进行排序:

select *from result order by score desc;

其中,desc表示降序(递减);如果从低到高(升序)进行排列,则可以将desc

换成asc;如果不加此参数,默认情况下按升序方式排列。

 分别尝试:

select id, name, score from result order by 1;
select id, name, score from result order by 2;

 

正常显示以name升序排列的结果:

select id, name, score from result order by 3;

正常显示以 score升序排列的结果:

select id, name, score from result order by 4;

报错。

从以上结果可以总结出,对于以下命令:

select cl, c2,..., cn from result order by M;

order by后面的数字(M)必须小于或等于n(数据库查询的字段数),才能正

常显示。如果M>n,数据库就会报错。可以利用这个特点判断数据库查询的字段数。

2.imit的用法:

基本格式为

limit MN

//表示从第M1条数据开始,顺序往下查询N条数据

limit

//表示查询前M条数据

尝试执行以下两条命令:

select *from result limit 0,2;

//查询表中的前2条数据

select *from result limit 1,3;

//从第2条数据起,往下查询3条数据的id、name和score字段

3.unionselect的用法
(1)分别尝试:

select * from result union select 1,2,3,4;

此语句的查询结果,即是select *from result和select 1.2,3.4查询结果的拼接。

 (2)分别尝试:

select id,name,score from result union select 1,2,3;
select id,name,score from result union select 1,2;
select id,name,score from result union select 1,2,3,4;

从以上结果可以总结

对于以select c1,c2,...cn from result union select d1,d2,...dm;
后半句union select查询的字段数(m)必须与前半句select查询的字段数(n)
相等,数据库才能正常显示结果。与order by相似,可以利用这个特点判断数
据库查询的字段数。

(3)尝试:

select id,city from result where id=1 and 1=2 union select name,score from result;

前部否定,后部 则显示

从以上结果可以总结,在已知字段名的情况下,攻击者只要将该字段置于任何能够显示的位置,就可以暴露该字段的值。

4.union select结合information_schema数据库
MySQL(MariaDB)5.5以上版本自带information_schema数据库,其中保存着
关于MySQL服务器所维护的所有其他数据库的信息,如数据库名、数据库的表、
表栏的数据类型与访问权限等。可以把information_schema数据库看作MySQL
(MariaDB)的”目录”!
(1)尝试执行以下两条语句:

show databases;

 

select schema_name from  information_schema.schemata;

 结果相同

(2)尝试执行以下两组语句:
第一组:

use studenta;
show tables;

 

第二组:

select table_name from information_schema.tables where table_schema='studenta';

 依然相同

MySQL中的“骚操作”

举报

相关推荐

0 条评论