SQL注入 ——sql数据库操作基础(一)

本章目的

普及MySQL( MariaDB)薮据库的基础与进阶语法,加深对SQL命令语句的理解,为后续SQL注入攻击与防护实验打下坚实的基础。

基本概念

数据库分类

关系型数据库

●关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)。通过SQL结构化査询语句存储数据,保持数据一致性,遵循ACID理论。关系型数据库的典型产品: MySQL、PostgreSQL、IBM DB2、 Accesss、 Microsoft SQL Server、 Oracle、

非关系型数据库

●非关系型数据库也被成为 NOSQL数据库, NOSQLI的本意是“ Not Only SQL”指的是非关系型数据库,而不是“ NO SQL的意思。因此, NOSQL的产生并不是要彻底地否定关系型数据库,而是作为传统关系型数据库的一个有效补充,NoSQL数据库在特定的场景下可以发挥出难以想象的高效率和高性能。非关系型数据库的典型产品: Memcached、 Redis、 mongo DB等

数据库是典型web应用的核心,通过各种web应用保持联系,相互配合,构成web服务器与web客户端以http,https等协议相互交流。

常见名词

■数据库( Data Base,DB):存储在磁带、磁盘、光盘或其他外存介质上、按一定结构组织在一起的相关数据的集合。

■数据库管理系统( DataBase Management System,DBMs):一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库。

■数据库系统( Data Base System,DBs):通常由软件、数据库(DB)和数据库管理员组成。软件主要包括操作系统、各种宿主语言、实用程序以及数据库管理系统(DBMS)

■数据库(DB)由数据库管理系统(DBMS)统一管理,数据的插入、修改和检索均要通过数据库管理系统(DBMS)进行。数据库管理员负责创建、监控和维护整个数据库,使数据能被任何有权使用的人有效使用

■ACID理论

>原子性( Atomicity):事务是一个不可分割的单位,事务中的操作要么都发生,要么都不发生。

>一致性( Consistency):事务前后数据的完整性必须保持一致。

>隔离性( Isolation):多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离

>持久性( Durability):一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

按排名简单介绍下各大数据库

Oracle
甲骨文公司的一款关系型数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle是目前世界上功能最强大、最复杂、市场占比最高的商业数据库产品,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的适应高吞吐量的数据库解决方案。从架构到运维,可以说是最难的数据库,学习和使用难度较高

 MySQL
MySQL是当今最受欢迎的开源SQL数据库管理系统,它由瑞典MySQLAB开发发布和支持。MySQLAB是一家基于MySQL开发人员的商业公司,它是一家使用了一种成功的商业模式来结合开源价值和方法论的第二代开源公司。MySQL是现在非常流行的关系型数据库管理系统,尤其在Web应用方面,是最好的关系型数据库管理系统应用软件之一。

Microsoft SaL Server (MSSQL)
SQLServer是Microsoft推出的关系型数据库管理系统,具有使用方便可伸缩性好与相关软件集成程度高等优点,从旧版本的个人电脑到运行MicrosoftWindowsserver的大型多处理器的服务器都可以使用。老版本只能在Windows上运行,从SQLServer2017版本起可以在Linux上运行。

PostgresQL

PostgresQL是加州大学伯克利分校计算机系开发的开源对象关系型数据库管理系统(ORDBMS),稳定性极强,用于安全地存储数据。

还有 Memcached(Memcached之反射拒绝服务攻击技术)、Redis(Redis未授权访问漏洞)、mongoDB(MongoDB远程代码注入漏洞)。。。

国内自主研发的关系型数据库
>达梦(DM):由华中理工冯玉才教授创办,完全自主研发,以Oracle为参照、追赶
对象。
>人大金仓(Kingbase):由人民大学王珊教授创办,自主研发。普通的关系型数据
库。
>神舟通用(OSCAR):神舟集团与南大通用合作开发的关系型数据库,更多地用于
数据分析领域。
>南大通用(GBase):南开大学的背景,2010年左右自主研发的基于列式存储、面
向数据分析、数据仓库的数据库系统。

■识别数据库方法
>盲跟踪
Web应用技术
不同数据库SQL语句差异
>非盲跟踪
报错、直接查询

■各大数据库默认端口号
Oracle: 1521
MySQL:3306
SQL Server: 1433
PostgresQL:5432
mongoDB:27017
Redis: 6379
DM:5236

MemcacheDB: 11211

■常见数据库的版本查询方法区别
> MSSQL
select @@version
> MySQL
select version() / select @@version
> Oracle
select banner from v$version
> PostgreSQL
select version()

■注意:不同数据库处理包括而不限于长度、各部位截取、以及字符串链接都是不同的

各数据库与网页编程语言的搭配
常见的搭配:
ASP和.NET: Microsoft SQL Server
PHP: MySQL、 PostgreSQL
Java: Oracle、 MySOL

■SQL语法基础
用于与关系型数据库交互的标准SQL命令有
CREATE、SELECT、INSERT、UPDATE、DELETE和DROP
分为三组
1.数据定义(Create、Drop)
2数据操纵(Select、Insert、Update、Delete)
3.数据控制(Grant、Revoke)

基础命令(CUD)
CREATE
创建新的表、视图或其他数据库中的对象
ALTER
修改现存数据库对象,比如一张表
DROP
删除表、视图或者数据库中的其他对象
SELECT
从一张或者多张表中检索特定的数据
INSERT
创建一条新记录
UPDATE
修改记录
DELETE
删除记录
GRANT
赋予用户特权
REVOKE
收回赋予用户的特权

操作环境

(1)操作系统: win10

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

Webug3.0漏洞网站环境

MySQL( MariaDB)数据库帐号root,密码为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)远程链接

(第三方软件链接)php远程链接

mysql_connect(host,usemame,password,dbname,port,socket);

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';

 依然相同

SQL高级操作:排序,分组,限定条数
排序order by
SELECT * FROM test_table ORDER BY userid;
分组group by
SELECT name,COUNT(+) FROM test_table GROUP BY name;
限定条数limit
SELECT*FROM test_tablelimit 0,10;
SELECT*FROM test_tablelimit1,5;
联合查询union select
SELECT*FROM test_table UNION SELECT1.2,3;

SOL注入-基干联合查询的POST注入

SQL注入-基于联合查询的字符型GET注入

SOL注入-基于联合查询的数字型GET注入_Gjqhs的博客-CSDN博客

MySQL中的“骚操作”

Notice: Undefined variable解决

...

关注我即刻查看其他包括而不限于SQL注入的文章[]~( ̄▽ ̄)~*

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值