前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >sql-labs-less5/6|SQL注入

sql-labs-less5/6|SQL注入

作者头像
TenG
发布2020-10-28 17:47:21
6340
发布2020-10-28 17:47:21
举报

前言:

本篇为sql-labs系列文章,本文用到前面章节所用语法部分不在详细说明,可以参考第一篇sql-labs-less1|2,我在网上看到这一关注入方法有很多,个人感觉这一关要比前四关难很多,思路不通了,这一关我也困住了很久,本文所讲的函数也都是在这两天刚学的,所以不要着急,在这里讲一下我认为比较简单省事的,如有分析错误的地方欢迎指正!

工具:

hackbar免费版

关卡:

Less5、Less6

正文:

涉及函数:

extractvalue、updatexml、rand()、floor()、concat_ws()、left()

tip: 不是每个函数都要用到,extractvalue和updatexml任意一个函数都可以完成本关注入,下面会讲解几种方法,所以涉及函数比较多,extractvalue函数和updatexml函数可以参考此篇文章学习extractvalue()、updatexml()报错注入,其他几个函数比较简单,请自行百度。

闯关:

less5

方法1:

测试结果显示You are in……,经过多次注入后发现注入成功就只显示You are in……,那么我们就从报错信息得到有用的数据,比如还可以使用前面的order by测试,当测试到第四字段的时候就会报错:

这里不在讲解语句,做过前面几关的都知道,我们开始爆数据库名:

正常显示说明语句正确,得到数据库的第一个字母,图中字母s可以从a开始试,使用burpsuite工具爆破,后面的字母可以根据字母数量一次增加取到left的值即可,这个方法比较麻烦,本人不推荐使用,当然也可以写脚本爆破,不过像我这个菜鸟还没有那个能力,所以就找简单的方法。

方法2:

使用联合查询,这个方法使用的函数比较多,请看图:

sql语句为:

http://localhost/sql-labs/Less-5/ ?id=-1’ union select 1,count(*),concat_ws(’~’,(select database()),floor(rand()2)) as a from information_schema.tables group by a–+(rand()和2中间有一个乘号,浏览器页面显示不出来)

这么长的语句是不是看着就头疼,这里大致说一下各个函数的作用,count() 函数是统计查询出来的结果,相同结果统计到一条,concat_ws函数是连接字符串的,*floor(rand()2) 是双查询语句,执行顺序从内到外,先执行rand函数,rand函数是生成0~1的随机数,floor() 函数是取小于等于数字的整数位,所以里面的rand随机数乘上2再由floor函数取整后结果就只能是0或1,group by是让查询结果分组,后面爆表,爆字段名只需要改一下concat里面的语句就行,这个方法很多大佬写的都有,这里不再赘述。提醒一点: 我的数据库里面加了一个flag表,最后是得到flag信息(flag表里只有一个字段),测试之后发现这条语句不能查询一个字段的表数据(也可能是我比较菜),这里也不再详细讲解,下面讲一下推荐的两种方法:

方法3(推荐):

语法: extractvalue(目标xml文档,xml路径)

函数的第二个参数是可以进行操作的地方,xml文件中查询使用的是/xx/xx/的格式,如果我们写成其他的格式,就会报错,并且会返回我们写入的非法格式内容,而这个非法格式的内容就是我们想要查询的内容。

如果是正常的格式,即查询不到也不会报错,下面进行测试:

extractvalue()括号里面第一个参数可以是任何东西,只要不是正确的格式就行,这样造成函数格式错误然后以报错的形式让里面的sql语句显示出来,想了解更多方法可以参考前面的链接,接下来爆表名:

concat语句里面的参数就是第一关使用的语句,sql语句为

http://localhost/sql-labs/Less-5/?id=1’ and extractvalue(1,concat(’~’,(select group_concat(table_name) from information_schema.tables where table_schema=‘security’)))–+

继续爆字段名:

sql语句:

http://localhost/sql-labs/Less-5/?id=1’ and extractvalue(1,concat(’~’,(select group_concat(column_name) from information_schema.columns where table_name=‘flag’)))–+

我这里查询的是flag表里面的数据,当然也可以查询其他表,得到字段信息最后只需要查询里面的数据就可以了:

完成!

方法4(推荐)

updatexml函数: updatexml()函数与extractvalue()函数类似,都是对xml文档进行操作。只不过updatexml()从英文字面上来看就知道是更新的意思。即updatexml()是更新文档的函数(具体方法看链接)。

语法: updatexml(目标xml文档,xml路径,更新的内容)

和extractvalue()相同的是都是对第二个参数进行操作的,通过构造非法格式的查询语句,来使其返回错误的信息,并将其更新出来。

注入测试:

sql语句:

http://localhost/sql-labs/Less-5/?id=1’ and updatexml(1,concat(’~’,(select database()),’~’),1) –+

个人觉得用法跟extractvalue函数大同小异,所以下面不再讲解,只需要换下格式就可以了。

Less6

让less5里面的单引号换成双引号就可以了。

结语:

我刚开始接触到第5关根本无从下手,很多大佬的博客都看不懂,那就从具体的函数一个一个看,只是这一关就学了很久,而且方法有很多,比如如果updatexml不能用就用extractvalue函数,一个一个的去试,就是要在试炼中成长,写的不好的地方欢迎指正,再次感谢,各位加油!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言:
    • 工具:
      • 关卡:
      • 正文:
        • 涉及函数:
        • 闯关:
        • less5
          • 方法1:
            • 方法2:
              • 方法3(推荐):
                • 方法4(推荐)
                • Less6
                  • 结语:
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档