SQL注入笔记(一)

目录

SQL语言解析

数据类型:

数据表的管理:

创建数据表,表名称hack:

查看表的结构:

删除表:

 向hack表中添加记录:

数据查询

基本查询语句

组合条件查询:

order by 排序

union select 联合查询

注释

单行注释

多行注释


SQL注入的基本过程图

平常我们说MySQL、SQL Server、Oracle等等,都是数据库系统,它不是数据库,数据库是数据库系统里的database。

★数据库里有:库(database)、表(table)、列(current)

查看全部database才加"s" = databases (表和列同理)

SQL语言解析

select:查询语句

show:查看语句;显示

create:创建

drop:删除

use:使用

mysql里的函数后面要加括号“()”

mysql的指令后面一定要加一个分号“;”结束,否则mysql它并不承认你的语句结束了

select version();         #查看mysql版本

select user();             #查看当前用户

select nuw();             #查看当前日期和时间

select database();     #查看当前打开的数据库

show database;        #查看mysql中共包含了哪些数据库

show columns;          #查看表中字段信息,即表结构

use test;                    #打开test数据库表中字段信息,即表结构

show tables;             #显示数据库中的表

create database database_name;          #创建数据库

create table table_name;                        #创建表

drop database datavase_name;            #删除数据库

drop table table_name;                          #删除表

 说明1

@localhost:限制了root在哪里登录,只能通过本地或本机登录,不能够远程
如果是%号的话,就可以远程。所有都可以远程。
 

说明2

 (none):是没有的意思,use security 库后,那就会显示是security,告诉你你正在使用security库。

一张完整的表包含了哪些?(字段名称,各字段数据类型)

如:创建表 (字段 空格隔开 数字类型 逗号 字段 空格隔开 数据类型);

数据类型:

int   #整形(非浮点的数值)

char(#)    #字符型

varchar    #可以变化的字符型

数据表的管理:

  • 创建数据表,表名称hack:

create table hack (id int,username varchar(30),password varchar(30));

  • 查看表的结构:

desc table_name;

  • 删除表:

drop table table_name;

  •  向hack表中添加记录:

insert into hack values(1,'admin','456');
insert into hack values(2,'boss','123');

数据查询

  • 基本查询语句

select * from users;                 #显示hack表中的所有记录

  * :所有 查找的字段,例如:id

  from :从哪个表里进行查询

select id,username from hack;               #指定字段查看

id,username :指定id和username字段来查看

select * from hack where id=1;       #从hack表中查找满足条件id=1的记录

where :条件是什么  (这里是id=1,查询users表里id=1的)

select id,username from from hack where id=1;

id,username:指定字段

where  id=1:where指定条件 id=1

所以说,条件这些有两个位置:

1.满足条件的显示,不满足条件的记录不显示。

2.要看的哪些字段。

组合条件查询:

and        #与         满足两个条件才为真

or           #或         满足一个条件为真

not         #非         非真就假,非假就真,取反

select * from hack where username="admin" and password="456";     #两个条件为真,才为真

两个条件为真就返回信息

例:在网站上登录,提交了用户名和密码,数据库就查询username=“admin”和password=“456”,两者都存在,则登录成功。

一真一假不返回信息,如下图:

 存在这个用户,但密码不正确,所以不返回信息。

select * from hack where username="admin" or password="547";    #满足一个条件为真

or 满足一个条件为真,用户名为真,所以返回信息。

select * from users where id=1 and exists(select * from hack);

order by 排序

select * from hack order by id;

id:按照id来罗列,排序

默认升序:从小到大

select * from hack order by 3;

 3:按照password来进行从小到大排序,因为password在第三列,所以是3

select * from hack order by 4;

超过列数就报错,第四列是不存在的没有的,所以报错。

select * from order by id desc;

desc:降序排序,从大到小

select username,password from hack order by 2;

#按照查询结果中的第二列(即password列)升序排序

        order by 在注入时通常用来拆解字段。你指定字段的话,就字段排序。如果你指定数字,那么它就对应数字的字段来进行排序。

        所以,在SQL注入时通常来判断它的字段数是多少。

union select 联合查询

        union 联合查询,可以一次性执行两个或多个查询操作,并将结果输出。

注:union在查询的过程中,字段数量必须要相同,否则出错。

select * from news union select * from hack;

#字段数不匹配,查询报错

select * from news union select username,password from hack;

#查询正常

select * from hack union select 1,id,title from news;

 #news表只有两个字段,hack表有3个字段,news就补一个空位上去,使查询正常

注释

单行注释

# :以“#”号开头,直到该行行尾,全部都是注释内容;

--空格 :以“-- ”开头,直到该行行尾,全部都是注释内容。

           (“-- ”与注释内容之间要加空格)

多行注释

/*... ...*/ :“/*”用于注释文字的开头,“*/”用于注释文字的结尾。

select * from hack; --  union select 1,id,title from news;

--空格,注释掉了后面union的部分,只显示了hack表

 不注释的话就是下图,两个表的内容一起显示出来。

select * from hack; # union select 1,id,title from news;

#号的注释,和--空格一样的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

腿没发霉的霉腿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值