当前位置: 首页 > article >正文

HTB 笔记 | SQL 注入基础 + 实操小练习 P2

在这里插入图片描述

1. 数据库类型

数据库分为两类:

  • 关系型数据库(Relational Databases)

    • 使用表格存储数据(行和列)。
    • 数据通过“键”连接,形成逻辑关系。
    • 示例:MySQL、PostgreSQL、SQL Server。
    • 特点:结构化、高效、适合清晰的数据模型。
  • 非关系型数据库(NoSQL Databases)

    • 不使用表格,而是以灵活的格式存储数据(如 JSON、XML)。
    • 示例:MongoDB。
    • 特点:灵活、适合非结构化数据。

2. 关系型数据库的核心概念
  • 表格(Tables)
    表格是数据存储的基本单位,类似于电子表格。每一列表示一个字段(如 idusername),每一行表示一条记录。

  • 键(Keys)

    • 主键(Primary Key):唯一标识每条记录(如 id 列)。
    • 外键(Foreign Key):用于连接不同表格(如 user_id 连接到 users 表)。
  • 模式(Schema)
    数据库的设计蓝图,定义了表格之间的关系。

  • 查询语言(SQL)
    用于与数据库交互的语言。例如:

    SELECT * FROM users WHERE id = 1;
    

    查询 users 表中 id 为 1 的所有记录。


3. SQL 注入是什么?

SQL 注入是一种攻击手段,黑客通过在输入字段中插入恶意代码,欺骗数据库执行未经授权的操作。

  • 常见场景
    假设有一个登录表单:
    <input type="text" name="username">
    <input type="password" name="password">
    
    后端代码可能如下:
    SELECT * FROM users WHERE username = '$username' AND password = '$password';
    
    如果用户输入以下内容:
    username: admin' --
    password: [任意值]
    
    最终生成的 SQL 查询会变成:
    SELECT * FROM users WHERE username = 'admin' --' AND password = '[任意值]';
    
    这会导致绕过密码验证,直接登录为 admin 用户。

4. 非关系型数据库(NoSQL)注入
  • NoSQL 数据库不使用 SQL 语言,但也有类似的漏洞。
  • 示例(MongoDB):
    db.users.find({ username: req.body.username, password: req.body.password });
    
    如果用户输入:
    username: {"$ne": null}
    password: {"$ne": null}
    
    查询会变成:
    db.users.find({ username: { "$ne": null }, password: { "$ne": null } });
    
    这会匹配所有用户,导致绕过认证。

解题思路


1. 理解目标
  • 目标:找到 SQL 注入漏洞并利用它获取敏感信息(如管理员账户、隐藏数据)。
  • 步骤
    1. 分析输入字段是否被正确过滤。
    2. 尝试构造恶意输入,观察数据库的行为。
    3. 根据返回结果调整输入,逐步深入。

2. 常见测试方法
  • 布尔盲注(Boolean-based Blind Injection)
    测试数据库是否对特定条件返回不同的结果。例如:

    SELECT * FROM users WHERE id = 1 AND 1=1;
    SELECT * FROM users WHERE id = 1 AND 1=2;
    

    如果第一个查询成功,第二个失败,则可能存在漏洞。

  • 时间盲注(Time-based Blind Injection)
    测试数据库是否会因特定条件延迟响应。例如:

    SELECT * FROM users WHERE id = 1 AND SLEEP(5);
    

    如果页面加载延迟了 5 秒,则可能存在漏洞。

  • 联合查询(Union-based Injection)
    尝试将恶意查询结果附加到正常查询中。例如:

    SELECT * FROM users WHERE id = 1 UNION SELECT username, password FROM users;
    

实操练习

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


http://www.kler.cn/a/600597.html

相关文章:

  • 【从零实现Json-Rpc框架】- 第三方库介绍 - fature篇
  • vue2拦截器 拦截后端返回的数据,并判断是否需要登录
  • MCP协议生态重构AI开发范式:从工具碎片化到系统整合的革命性跨越
  • 【C++11】智能指针:std::shared_ptr
  • MySQL基础语法
  • 文字也能生成视频?【蓝耘实践】:通义万相2.1文生视频
  • cursor安装
  • 生成式媒介革命已至,搜索如何借力DeepSeek破局?
  • DeepSeek加持Excel,探索办公自动化的无限可能
  • Deepseek API+Python 测试用例一键生成与导出 V1.0.3
  • Julia语言的二进制与编码
  • 画秒杀系统流程图
  • 中级消防设施操作员(维保)考试的重点内容有哪些?
  • jeecgboot-vue3使用a-select placeholder不显示
  • 【AI神经网络】深度神经网络(DNN)技术解析:从原理到实践
  • 【动态规划】-- 第N个泰波拉契数
  • Redmi Note 11 T pro + 刷入 LinegaOs 22.1 记录 手机已经解锁bl.
  • 基于web的家政服务网站
  • 记一次线上程序宕机问题分析【写 GC 日志导致进程挂起】
  • 【Linux线程】——线程同步线程互斥