Bootstrap

sql注入前期准备(相关函数和原理)

一、SQL注入原理

SQL注入是一种常见的网络攻击技术,攻击者通过在正常的SQL语句中插入恶意的参数,从而控制数据库执行非法操作。以下是一个简单的示例:

正常SQL语句:
select * from news_users where username='admin' and password='123456';
恶意构造的SQL语句:
select * from news_users where username='' or 1=1 -- and password='12';

在上述恶意构造的语句中,'-- '后的内容被注释,导致密码验证部分失效,从而实现万能密码登录。

二、SQL常用语句

  1. 查看服务器数据库
show databases;
  1. 查看数据库表名
show tables;
  1. 查看数据库内容
select * from table_name;
  1. 查看数据库字段
desc table_name;

三、特殊运算符

  1. in(x,y,z):在xyz中
  2. not in(x,y,z):不在xyz中

四、字符串函数

  1. 统计字符串长度
select length('qwe王'); -- 结果:6(中文长度为3)
  1. 截取字符
select substr('hello世界',6,2); -- 结果:世界
  1. 左/右截取
select left('hello世界',5); -- 结果:hello
select right('hello世界',2); -- 结果:世界
  1. 字符连接
select concat('hello',' ','world!'); -- 结果:hello world!
  1. 同字段所有数据拼接
select group_concat(username) from pikachu.member;
-- 结果:vince,allen,kobe,grady,kevin,lucy,lili
  1. 将字符串第一个字符转换成ascii码
select ascii(substr('12as王',1,1)); -- 结果:49
  1. 十进制转换十六进制
select hex(ord(substr('12as王',1,1))); -- 结果:31

五、数据库信息函数

  1. 返回当前数据库版本
select version();
  1. 查看当前工作数据库
use pikachu;
select database(); -- 结果:pikachu
  1. 查看当前使用用户
select user();
  1. 查看数据库存储路径
select @@datadir;

六、高级函数

  1. IF函数
select IF(1>2,1,2); -- 结果:2
  1. 休眠函数
select sleep(5);
  1. 随机数函数
select rand();
  1. 读取服务器中的文件
select load_file('C:/phpStudy/hello.txt');

注意:使用load_file函数需要配置文件secure_file_priv=''

七、元数据库(information_schema)

tables 表:table_schema存放数据库名        table_name存放表名

columns表:table_schema存放数据库名        table_name存放表名        conlumn_name存放字段

使用例子:

use information_schema;

//查找拥有的库
select distinct table_schema from tables;

//查找拥有库中的表
select table_name from tables where table_schema='pikachu';

//查找表中拥有的字段
select column_name from columns where table_schema='pikachu' and table_name='users';

查询结果重复字段过多可使用:distinct进行过滤

;