1、SQL注入

SQL注入漏洞主要形成的原因是,前端的数据传入到后台处理时,没有做严格的判断和过滤,导致其传入的数据拼接到SQL语句中后,被当作SQL语句的一部分执行。

2、搭建环境

github上适配php7的靶场

  • 下载后直接放入小皮面板www目录下

2.1、配置

  • 在sql-connections下的db-creds.inc中将小皮面板中的密码填入

在这里插入图片描述

在这里插入图片描述

3、必备Sql语句

3.1、基本语句

#创建数据库
create database test1;
#展示所有数据库
show databases;
#使用test1数据库
use test1;
#查看当前数据库中的表
show tables;
#获取当前使用的数据库
select database();
#删除数据表
drop table table1;
#查询当前的用户
select user();
#获取当前数据库版本
select version();
#查看schemata这个表的结构
DESC schemata;

3.2、常用关键字

  1. order by
    • 给查询结果排序,指定一个或多个字段,指定升序 ASC / 降序 DESC
    • 常用于通过报错临界点测试出该表有多少列
#按SELECT出来的id列进行排序,ASC=升序(默认),DESC=降序
select * from member order by id;
#按SELECT出来的第4列进行排序
select * from member order by 4;
  1. union
    • 常用于联合查询,左右两个表列数一致
select id,username from users union select id,content from message;
  1. where
    • 过滤数据
SELECT username,password from users where username="root"
  1. limit
    • 返回查询结果的前 n 条记录
#返回查询结果中的前 4 条记录
select content from message limit 4;
#跳过查询结果中的前 1 条记录,返回接下来的 4 条记录
select content from message limit 1,4;

2.3、常用函数

  • 截断
select substr('root',1,1); #执行结果——r
select substring('root',2,2);#执行结果——oo
#以上两个函数作用类似
select left('root',2);#执行结果——ro
select right('root',2);#执行结果——ot
select mid('root',1,1); #执行结果——r
  • 字符转换
# ASCII函数用来返回给定字符串的第一个字符的ASCII码
select ascii('root'); #执行结果——114
#将 ASCII码转换成字符
select char(65);#执行结果——A
  • 获取数据长度
select length(database());
  • 时间
now()#返回当前的日期和时间
sysdate()#返回当前的日期和时间
  • 控制流
#参数1为真,执行参数2
select if(now()=sysdate(),database(),user());

2.4、sql注释

  1. 注释
--空格——在url编码时+会被编码成空格
#
/**/
  1. 单双引号必须成对出现

4、靶场相关信息

  1. information_schema 数据库中的TABLES表

    • TABLES表中的TABLE_NAME记录所有的表名
      在这里插入图片描述
  2. information_schema 数据库中的COLUMNS表

    • COLUMNS表中的COLIUMN_NAME记录所有的列名
      在这里插入图片描述
  3. information_schema 数据库中的SCHEMATA表

    • SCHEMATA表中的SCHEMA_NAME列记录所有数据库名
      在这里插入图片描述

更多推荐