Administrator
发布于 2025-09-13 / 46 阅读
2
0

SQL注入之基

MYSQL基础:

MYSQL分级:数据库 --> 数据表 --> 列

基础连接语句和注释:

MySQL
mysql -u用户名 -p密码 -P端口 -h主机名

注释:

show databases;#这是单行注释,不会被执行。下面笔记会使用这个作为注释符

show databases;-- 这是单行注释,杠后面必须跟一个空格

show databases;/*这是
多行
注释*/

一些增删改查的基础语句,不会就没办法查询相关信息构造payload

MySQL
CREATE DATABASE 数据库名;		#创建数据库

SHOW DATABASES;		#显示现有数据库

DROP DATABASE 数据库名;		#删除数据库

use 数据库名;		#操作数据库

create 表名;		#创建表

show tables;		#显示数据库下的表

drop 表名;		#删除表

DESC 表名;		#查看表的结构

alter table 表名 add 列名 类型(长度) ;		#为表增加一个新字段

alter table 表名 drop 列名;		#删除列

insert into 表名 (列1,列2,...) values (值1,值2,值3,...),(值1,值2,值3,...),...,...;		#创建列并写入值

insert into 表名 values (值1,值2,值3,...),(),...;		#为所有列添加值

update 表名 SET 列名 = '值' WHERE 值 = 修改值;		#修改列对应数据

delete from 表名 where 条件;		#删除符合条件的数据

select 列名 from 表名;			#基础查询,列名=*则全部查询,后可跟where查询符合条件的语句

select distinct * from 表;		#查询数据并去重

select 列名1,分组列名 from 表名 group by 分组列名;		#根据分组列名分组查询

select 列名1,列名2 from 表名 order by 排序方式;		#ASC升序(默认),DESC降序,排序方式可为数字,且必须与前面列名数量一致,可根据这一特性构造payload反推开发者写的sql语句,确定列数

select * from 表名 limit 1;		#仅查询第一条数据

select * from 表名 limit 5,10;		#查询第5条数据之后的10条数据,即跳过前5条数据,查询第6-15条数据

select * from 表 where 字段 like %1;		#模糊查询,查询结尾为1的数据,'1%'查询开头为1,'%1%'查询包含1,'_n%'查询第二个字母为n,'a__'查询以a开头并且为3位的字符串,以此类推,若查询的数据本身就是带%则使用_或\进行转义%\%%

select * from 表名 as 别名			#如果表名很长则可使用as起一个短别名,后续条件判断则可使用别名

select * from 表名 where 列名 in (select 列名 from 表名 where 条件);		#where子查询,把内层查询结果当作外层查询的比较条件

一些基本参数在mysql中的存储位置:

库名:information_schema --> TABLES --> TABLE_SCHEMA

MySQL
select table_schema from information_schema.tables;		#查询所有库名,从中提取想要哪个数据库,通常可以使用database()来查询

表名:information_schema -->COLUMNS --> TABLE_NAME

MySQL
select table_name from information.columns where table_schema = '想要查询的库名';		#查询表

列名:information_schema -->COLUMNS--> COLUMN_NAME

修复后的MySQL代码块
MySQL
select column_name from information.columns where table_name = '想要查询的表名';		#查询列

这3个位置记录了整个mysql的结构,可逐级查询,构造出目标的数据库结构,从而找到关键价值目标

寻找注入点:

分析网站功能结构,思考哪些参数可能会存储在数据库中,并且哪里可以让我们自定义修改,以此来构造payload尝试注入

常见可能存在注入点的位置:

用户名,密码等输入框

经典的需要查询数据库进行比对的位置

User-Agent报头

部分网站可能会往数据库中存储用户ua头来识别用户客户端等

X-Forwarded-For报头(也可能是其他报头)

网站为了记录日志或限制用户ip会把这个报头的内容存储到数据库中

Cookie

开发者根据用户id对应相关信息查询数据库

Referer报头

开发者希望必须通过某个页面访问指定页面,把页面地址存储到数据库,可能存在sql注入



评论