SQL注入教程——(二)常用语法基础

本文使用的数据库为hijack89
该数据库中存在名为user 的表
表中存在idusernamepassword 三个列
具体数据内容如下:
这里写图片描述

注意:该数据表第一条数据项为id为2,username为user02,password为pass02的数据项

1.select 查询语句

select是基本的查询语句,用于从数据库中查找匹配条件的数据项;
常用语法如下:

select [列名称] from [表名称] (where 条件句)
select * from [表名称] (where 条件句)

select原理:
分析器先找到关键字SELECT,然后跳到FROM关键字将所查的表导入内存,并通过指针p1找到表中第一条数据项,接着找到WHERE关键字,根据当前数据项计算它的条件表达式,如果为真那么执行select语句,并把执行结果插入到新建的虚表中,p1再指向下一条记录;如果为假那么p1直接指向下一条数据项,而不进行其它操作。一直检索完整个表,并把虚表返回给用户。

即:select语句是根据条件对比数据表中的每一条数据项,每当遇到一个条件为真时的数据项,就执行一次select后面紧跟的语句。

为什么条件为真时说是执行select语句,而不是将该条数据项插入到虚表中?
因为select后面不仅可以跟列名称或者通配符* ,还可以跟函数

e.g.-1.1
这里写图片描述

e.g.-1.2
这里写图片描述

e.g.-1.3
这里写图片描述

e.g.-1.4
这里写图片描述

concat()是连接字符的函数,0x21、0x3a 分别是!、: 的16进制表示

思考,为什么该语句返回结果会有10条?

2.order by

order by 语句用于根据指定的列对结果集进行排序。默认按照升序对记录进行排序。
常用语法如下:

order by [列名称]
order by [第几列]

常见作用:
该语句在SQL注入中常用于测试当前数据表的列数。当数据表只存在3列时,order by 1/2/3 将正常返回结果,但当order by 4 时将报错,因为数据表中没有第4列,即可得知该表存在3列。

e.g.-2.1
这里写图片描述

e.g.-2.2
这里写图片描述

这里写图片描述

e.g.-2.3
这里写图片描述

3.limit

limit 是用于限定返回结果的数量
常用语法如下:

limit [偏移量],[数量]

偏移量也是从0开始(和c语言数组是一个道理),数量是选取多少个数据项。

常见作用:
当某些页面只能回显特定个数的数据时,可以用limit进行限制。

e.g.-3.1
这里写图片描述

4.union 联合查询

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
常用语法如下:

select id from user where id=1 union select username from user where id=3

请注意,列也必须拥有相似(兼容的)的数据类型。UNION 内部的 SELECT 语句必须拥有相同数量的列,否则会报错。
常见作用:
union不仅可以用来联合查询数据,还可以用来确定数据表列数。

e.g.-4.1
这里写图片描述

e.g.-4.2
这里写图片描述

e.g.-4.3
这里写图片描述

这里写图片描述

此处注意与order by 有什么不同。

5.and和or

andor 可在 WHERE 子语句中把两个或多个条件结合起来,且前者优先级高于后者优先级。
常见语法:

where [条件1] and [条件2]   条件1和条件2都为真时,该条件才为真
where [条件1] or [条件2]    条件1和条件2有一个为真时,该条件为真

常见作用:
可以利用andor 进行是否存在注入点的判断,还可以构造万能密码(永真条件),文章《浅析SQL注入(一)》中有提到。

6.其他常用语法

insert into 语句用于插入指定数据项
常见语法:

INSERT INTO 表名称 VALUES (值1, 值2,....)
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)

update 语句用于修改表中的数据。
常见语法:

UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 旧值

DELETE 语句用于删除表中的行。
常见语法:

DELETE FROM 表名称 WHERE 列名称 = 某值





SQL语法是进行SQL注入攻击的基础,还需平时的学习和积累。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值