简单的SQL注入---id和万能密码

一个从web入门ctf小白,最开始接触的肯定是简单的SQL注入。但即便是简单至此的注入题目,对于一个新人来说也是让人望而却步。下面是有关万能密码相关的知识。

下面是一个常见的表单注入题目

在这里插入图片描述
—————————————————————————————————————————

在这个题目里面,我们需要对用户名和密码进行绕过,从而得到里面的flag。
首先我们需要了解数据库查询的一些原理。一般来说,在网站对单引号没有进行过滤的情况下,用户登录时,后台执行的数据库查询操作(SQL语句)是:【Selectuser_id,user_type,email From users Where user_id=’用户名’ And password=’密码’】。常规的查询里面,我们需要输入的地方都是有用单引号括起来的。由于我们不知道用户名和密码,所以我们必须想办法使查询语句恒为true(真)才能成功绕过。如果是上面这种模式,我们直接在用户名处尝试输入admin(随意字符),在密码处输入1’ or '1,上面的语句会变成【Selectuser_id,user_type,email From users Where user_id=’admin’ And password=’1 or '1’】。在SQL里面,“=”的优先级大于“and”大于“or”,于是该语句变成了
Select user_id,user_type,email From users Where user_id=’admin’ And password=’2’】和【’1’】这两句语句由“or”连接的的布尔运算。毫无疑问语句的值恒为真,所以我们可以成功登陆进入数据库。这就是万能密码的原理。

—————————————————————————————————————————

还有一种方法是在“用户名”处输入1’ or 1–+ 。输入之后上面的语句会变成这样:【Selectuser_id,user_type,email From users Where user_id=’1’ or 1 --+’ And password=’密码’】。包括"–+" , “– -”,"#"等的符号都代表注释的意思,这意味着And password=’密码’语句不再执行。而前面只剩下一个 user_id=’1’ or 1的布尔运算,显然布尔值为true。通过这种方法我们可以不用输入密码就可以成功绕过。

—————————————————————————————————————————

但是万能密码并不是万能的

下面是一个从url进行注入的题目,只能通过id传参

在这我们里插入图片描述显而易见,题目要求我们输入id进行绕过。虽然大概率是通过url的get方法传参,但保险起见我们还是验证一下,抓个包
在这里插入图片描述毫无疑问就是get传参,所以我们开始对id进行传值。所以我们采用第二种方法绕过,在url输入1’ or 1–+
在这里插入图片描述之后我们就可以获取flag
—————————————————————————————————————————

在这里插入图片描述—————————————————————————————————————————

再说说关于url传参注释符号的问题

注释的方式有多种,包括 #,–+,-- -,- -(后面两个中间有空格)。
如果是get请求,即在url里面进行传参,解释执行的时候,url中#号是用来指导浏览器动作的,对服务器端无用。所以,HTTP请求中不包括#,因此使用“#”闭合无法注释,会报错;而使用- - ,在传输过程中空格会被忽略,同样导致无法注释,所以在get请求传参注入时才会使用**–+**的方式来闭合,因为+会被解释成空格。为了防止出现意外的bug,请不要在url里面使用#。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值