SQL注入系统学习——(1)预科

9 篇文章 0 订阅
5 篇文章 0 订阅

SQL注入系统学习——(1)预科

什么是SQL注入:

SQL注入就是把构造好的SQL语句放入WEB数据中提交给服务器,并返回数据时返回的是构造好的SQL语句的执行内容

注入分类:

基于服务器接收到的响应:

  • 基于错误的SQL注入
  • 联合查询的类型
  • 堆查询注射
  • SQL盲注
    • 基于布尔SQL盲注
    • 基于时间的SQL盲注
    • 基于报错的SQL盲注

基于如何处理输入的SQL查询(数据类型)

  • 基于字符串
  • 数字或整数为基础的

基于程度和顺序的注入(哪里发生了影响)

  • 一阶注入
  • 二阶注入

一阶注入指输入的注射语句对WEB直接产生了影响,出现了结果;

二阶注入类似存储性XSS,是指输入提交的语句,无法直接对WEB应用程序产生影响,通过其他的辅助间接的对WEB产生危害,这样的就被称为是二阶注入。

基于注入点的位置上的

  • 通过用户输入的表单域的注入
  • 通过cookie注入
  • 通过服务器变量注入

系统函数

常用函数

1. version()——MySQL版本

2. user()——数据库用户名

3. database()——数据库名

4. @@datadir——数据库路径

5. @@version_compile_os——操作系统版本

字符串连接函数

1. concat(str1,str2,…)——没有分隔符地连接字符串

2. concat_ws(separator,str1,str2,…)——含有分隔符地连接字符串

3. group_concat(str1,str2,…)——连接一个组的所有字符串,并以逗号分隔每一条数据

一般用于尝试的语句

PS:–+可以用 # 代替,url提交过程中 url 编码后的 # 为 %23

or 1=1 --+

’ or 1=1 --+

) or 1=1 --+

') or 1=1 --+

") or 1=1 --+

")) or 1=1 --+

一般代码为:

	$id=$_GET['id'];
	$sql="SELECT * FROM users WHERE id ='$id' LIMIT 0,1"

union 操作符

union 操作符用于合并两个或多个 SELECT 语句的结果集。注意, UNION 内部的 SELECT 语句必须拥有相数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

SQL UNION 语法

select column_name(s) from table_name1
union
select column_name(s) from table_name2;

如果允许不同的值,就要使用 union all

SQL UNION ALL 语法

select column_name(s) from table_name1
union all
select column_name(s) from table_name2;

SQL 中的逻辑运算

在使用万能密码时会用到:

select * from admin where username='admin' and password='admin';

在这个语句中其实在密码部分可以用 ‘ or 1=1 # 作为密码输入

原因如下:

当使用 ‘ or 1=1 # 后,sql语句为:

select * from admin where username='admin' and password='' or 1=1 #';

使用这个语句就可以在不知道密码的情况下登录 admin 账户。原因是因为在使用 where 语句后面的 username=‘admin’ and password=‘’ or 1=1 #

这三个条件用 and 和 or 连接起来。

因为 and 运算符比 or 运算符优先级高
所以

username='admin' --------> Turn
password=''--------------> Flase
所以
username='admin' and password='' -------------->Flase

1=1 ------------------->Turn

所以
Flase or Turn ----------------> Turn

终上所述:
username='admin' and password='' or 1=1 ------------>Turn

注入流程

image-20221127182516025

结语:

最后,我们一起来学习探讨 SQL注入 的问题,一起加油一起学习,欢迎评论留言。有不足的地方多多指正,在下抱拳了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

visionkiwi

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

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

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

打赏作者

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

抵扣说明:

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

余额充值