Sqli-labs之Less:42-45

                                              Less-42

基于存储_POST_单引号_字符型_堆叠注入

这一关看起来和Less-24是一样的界面,实际上是不同的,我们点击 New User click here?可以看到如下:

翻译:你需要创建帐户然后侵入

通过这一关我们了解到了,我们无法进行注册和忘记密码的操作。

我们在Less-24做这种界面的关卡的时候是二次注入,通过越权修改别人的密码,我们这里还是一样,只是改为使用堆叠注入。还要注意的一点是,这里的数据是Post数据,所以我们的注释符需要使用#,而不是--+。(输入框中不要用--+是因为+不会进行url编码,因为他不在url地址栏中,可以使用 #  %23  -- #)

分析源代码:

主要分析login.php

嗯,竟然输出报错信息,那妥妥的报错注入也可以,但这不是我们这一关想要表达的注入:

这里我们试一下报错注入:

-1' union select 1,database(),3#

当然我们看到有个update_password 是否可以像less-24那样实现越权修改别人的密码,当然是不可以的,上源码

看到没有都进行过滤了。

Update 更新数据后,经过 mysql_real_escape_string()处理后的数据,存入到数据库当中后不会发生变化。在 select 调用的时候才能发挥作用。所以不用考虑在更新密码处进行注入,这关和二次注入的思路是不一样的。

最重要的是二次注入是需要把注释符保存到数据表中,虽然堆叠注入能插入用户名和密码,但是注释符的是没办法进行保存的,会注释掉后面的语句导致该语句不完整而出错。

开始我们的注入:

这里网上的大部分包括《注入天书》只写了如何创建与删除一个表,只能说存在堆叠注入,然而好像没什么用处。
这里仍像 Less 38 - Less 41 一样,创建新的用户信息(即插入数据 / 注册)。
因有 MySQL 报错信息,可以看出是单引号闭合。

1';insert into users(id,username,password) values(42,'Less42','Less42')#

可以简写:1';insert into users values(42,'Less42','Less42')#

返回这个页面不用管它:

直接查看数据表:

OK,成功创建了我们的用户

当然使用:

1';update users set password='hello' where username='Dumb' #

作为登录密码,修改Dumb密码。

顺便说一下我为什么不修改用户Less-42的密码是因为,php的过滤函数会过滤掉字符 

还有一点需要注意的是,但对这一关而言,这条语句很重要,注释掉这条语句,那么你就得通过其他方法来判断这一关是什么类型的注入,然后需要得到users数据表,过程会比较繁琐。最后才能进行堆叠注入。

----------------------------------------------------------------------

                                                        Less-43

基于存储_POST_单引号_小括号_字符型_堆叠注入

本关与 42 关的原理基本一致,我们还是定位在 login.php 中的 password。看一下 sql 语句为:

还有有 MySQL 报错信息的代码:


登录:username:admin
Password:1');insert into users values(43,'Less43','Less43')#

可以看到添加了 less43 这一项数据:

-----------------------------------------------------------------

                                                        Less-44

基于存储_POST_单引号_字符型_盲注_堆叠注入

本关是基于盲注的,这里盲注主要是要没有报错信息,所以要采用盲注。这关与 42 关的区
别就在于没有报错信息,当 POST 没有报错回显时,判断查询语句就需要构造永真条件同化登录失败与查询出错,通过返回的图片不同来确定是否符合查询语句闭合的条件:

如果登录失败,可以看到这样的页面:

登录成功是这样的页面:

(这里我使用的是万能密码: 1' or 1=1#)----这里对用户名进行了过滤,为了方便我使用了后台已有的用户名,当然我们也可以利用前面学到的宽字节注入来绕过,具体看前面的文章。

即:用户名:Dumb

        密码   :1' or 1=1#

那么我们可以在Burpsuite中进行测试来判断字符类型:(具体步骤可参考Less-15)

(ps:不知道为什么下面的单引号测试语句无法在火狐插件HackBar中执行成功,哪怕换了注释符也不行,特意用Burpsuite看了下提交的数据没什么问题,但就是不成功,使用Burpsuite提交一点问题都没有,看来插件的功能有限啊,怀疑是插件版本的问题,该升级了。。。)

login_user=admin&login_password=1 or 1=1--+
login_user=admin&login_password=1' or 1=1--+
login_user=admin&login_password=1" or 1=1--+
login_user=admin&login_password=1') or 1=1--+
login_user=admin&login_password=1") or 1=1--+

经过测试我们知道是单引号字符类型,然后获取到数据表,

接着,我们使用同样方式的 payload:

1';insert into users values ('44','less44','hello')#

---------------------------------------------------------------

                                                     Less-45

(PS:现在翻译越来越不准确了)

基于存储_POST_单引号_小括号_字符型_盲注_堆叠注入

同样的,45 关与 43 关的 payload 是一样的,只不过 45 关依旧没有报错信息。

1');insert into users(id,username,password) values(45,'Less45','Less45')#

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值