从题目inget的解决到注释符#和--的区别及用法

**

从题目inget的解决到注释符#和–的区别及用法

**

一起来看一道攻防世界的web题:inget

题目:

在这里插入图片描述

使用本题的核心工具——翻译器(bushi):
在这里插入图片描述根据提示,明确了方向:sql注入
ID传参方式一般是GET(如果不是就用hackbar给url传参)
接着尝试一下符号是否闭合:
在这里插入图片描述
猜测闭合,接着尝试万能钥匙:
在这里插入图片描述
成功获得flag。

题目本身简单,但做对且看过其他大佬的wp后,我们不妨问自己一下:为什么这么构造?别的构造行不行?

首先是为什么这么构造?

:对用户提交的表单进行验证时,网站需要查询数据库。而查询数据库就是在执行SQL语句。用户登录时,不妨假定后台执行的数据库查询操作(SQL语句)是:Select ID From users Where ID=’用户名’ 。又由于网站后台在进行数据库查询的时候没有对单引号进行过滤,当输入万能密码1’or’1时,执行的SQL语句为:Select ID From users Where ID=’1’or’1’。由于SQL语句中逻辑运算符具有优先级,=优先于or,因此,该SQL语句在后台解析时,被分成两句:Select ID From users Where ID=’1’和’1’,两句bool值进行逻辑or运算,恒为TRUE。SQL语句的查询结果为TRUE,就意味着认证成功,也可以登录到系统中。

接着是别的构造行不行?

:了解了以上构造的原理后其实很容易知道还有无数种可行的构造,只要让整个语句的bool值为TRUE便能成功绕过。

其次就是看到一些wp中在句末加了注释符来消掉后台sql语句的’的影响(不消肯定会多个后单引号对嘛qwq),我们之前的方法是在or后面加 '(前引号)和它凑对。

说半天不如举个栗子:

在这里插入图片描述

可以看到id=1’ or 1 - - +的构造也是成立的。
既然想到这里了,那么不妨再多问自己一句:用#来注释可不可以?
在这里插入图片描述

答案是否定的。这是因为url中#是用来指导浏览器动作的(如锚点),对服务器端完全无用,所以http请求不包括#。所以只要将#改成url编码23%就可以了。
在这里插入图片描述

可能在看到- - +后有人想说sql的注释语法不应该是- -吗?为什么会多个+?
了解原理后便知道了:- -无法使用的原因是它和后面的单引号会连在一起,导致无法形成有效的spl语句,而这个+号在加到语句中后就会变成空格,将- -与后面的语句分隔开,从而达到注释的目的。

那么问题又来了,可不可以把+号直接写成空格?(byd这编者怎么这么多问题 =_=)
答:显然这是不行的,因为url并不读空格。这里就又轮到url编码出场了,将空格替换成20%后发现也可以成功。
在这里插入图片描述

至此关于这道题我能想到的问题就结束了(完结撒花AWA),剩下就是编者的废话了。


写在最后:从一个问题中出发,不断向自己提问,这是一种很好的学习方法,帮助我们发散性地、全面的了解一个问题。这也是编者想通过本文传达的一个算是学习建议吧,也希望大家都能找到适合的学习方法。那么最后的最后还是真诚地感谢阅读本文qwq。

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值