Web渗透之SQL注入-联合查询注入-注入点数据类型判断

目录

一、概念

1.SQL注入的概念

2.SQL注入的目的

二、注入点的数据类型

三、注释

四、注入步骤

[(1) 方式一](#(1) 方式一)

原理:

[(2) 方式二](#(2) 方式二)

原理:

(3)方式三:


一、概念

1.SQL注入的概念

SQL注入是一种常见的网络安全漏洞,指攻击者通过在Web表单输入、URL参数或请求头等用户可控的位置,恶意插入SQL代码片段,从而欺骗后端数据库执行非预期的SQL命令。

核心原理 :当应用程序动态构造SQL查询语句且未对用户输入进行充分过滤或参数化时,攻击者可以改变原SQL语句的逻辑结构。例如,将登录验证的SQL: SELECT * FROM users WHERE name = '输入的用户名' AND pwd = '输入的密码' 通过输入 admin' --(恒真条件并注释后续语句)变成: SELECT * FROM users WHERE name = 'admin' --' AND pwd = 'xxx' 从而无需正确密码即可绕过认证。

2.SQL注入的目的

SQL注入攻击的主要目的通常分为以下几类,攻击者根据自身意图选择不同的利用方式:

  1. 绕过认证机制 在登录、权限校验等场景中,通过注入恒真条件(如 ' OR '1'='1)或注释掉后续密码检查,无需有效凭证即可冒充其他用户(尤其是管理员)。

  2. 获取敏感数据(数据泄露)

    • 窃取用户表:账号、密码(可能哈希)、个人身份信息、支付信息

    • 提取业务数据:订单、交易记录、内部文档

    • 联合查询获取数据库元数据:如所有表名、字段结构,为后续攻击铺路

  3. 篡改数据 利用 UPDATE、INSERT、DELETE 语句修改数据库内容,例如:

    • 提升自身权限等级

    • 篡改商品价格、投票结果

    • 删除日志以掩盖入侵痕迹

  4. 拒绝服务或破坏数据

    • 批量删除表或行(如 DROP TABLE 或 DELETE)

    • 执行耗时查询(笛卡尔积、递归调用)耗尽数据库资源

  5. 提权与命令执行

    • 在特定数据库(如MySQL的 INTO OUTFILE)中写入Webshell,获取服务器控制权

    • 利用存储过程或函数执行操作系统命令(如 xp_cmdshell)

  6. 持久化隐蔽后门 通过 UNION 或时间盲注等技术,长期从数据库中批量外发数据到攻击者控制的服务器。

简单总结:核心目的就是"让数据库执行原本不被允许的操作",最终实现信息窃取、身份冒用、权限提升或破坏系统。 防御上需以参数化查询为根本,并配合权限最小化原则。

二、注入点的数据类型

  1. 数字型(Integer/Float)

    • 特征:SQL中直接拼接数字,无需引号包围。

    • 示例:SELECT * FROM products WHERE id = 1 → 注入 id=1 OR 1=1

    • 测试:输入 1 AND 1=1 与 1 AND 1=2 看响应差异。

  2. 字符型(String)

    • 特征:使用单引号 ' 或双引号 " 包围用户输入。

    • 示例:SELECT * FROM users WHERE name = 'admin' → 注入 admin' OR '1'='1

    • 需闭合或注释掉多余的引号。

  3. 搜索型(LIKE 查询)

    • 特征:与 LIKE 操作符组合,通常带有 % 通配符。

    • 示例:SELECT * FROM articles WHERE title LIKE '%{keyword}%' → 注入 %' OR 1=1 --

    • 需处理通配符及引号。

  4. JSON/XML 字段

    • 特征:数据库支持JSON/XML类型,应用程序可能直接拼接查询路径。

    • 示例:MySQL中 SELECT data->>'$.name' FROM users WHERE id = 1,注入点可能在JSON键值或XPath中。

  5. 日期/时间类型

    • 特征:与日期函数结合,如 WHERE create_date = '2025-01-01'。

    • 注入方式类似字符型,但有时数据库会隐式转换,需测试特定函数(如 '2025-01-01' OR 1=1 --)。

  6. 布尔/枚举型

    • 特征:值限定为少数几个选项(如 0/1、'active')。

    • 注入时可能需要基于布尔盲注(如 AND 1=1 与 AND 1=2 导致页面变化)。

三、注释

复制代码
#  (url编码为%23)
​
-- -(空格编码为%20)
​
/**/

四、注入步骤

(1) 方式一

复制代码
在url中输入单引号,页面报错,再加上 -- -,页面还是报错,可以确定注入点数据类型为数字型,反之就是字符型

1的后面输入单引号

发现页面报错

再加-- -

发现不报错

所以判断是字符型

原理:

让我们看一下这个靶场的源代码,可以看到这个id有单引号包裹,所以这个靶场是字符型注入

如果我们加了个单引号,这个语法是错误的,所以会报错

如果加个-- - 语法正确,回显正常

(2) 方式二

复制代码
在url中输入 and 1=1,页面的结果不发生变化,再输入 and 1=2,页面的结果发生变化,可以确定注入点数据类型为数字型,反之就是字符型

输入1=1,页面不发生变化

输入1=2,页面还是不发生变化

判断是字符型

原理:

1=1回显正常,自动取前面的1,后面的丢弃

1=2,还是不变

但是数字型1=1是回显正常,1=2就找不到了

字符型无论后面写什么,它都会把后面的自动丢弃

(3)方式三:

在url输入转义符,通过观察页面的报错情况来判断注入的数据类型

可以看到把最外面引号去掉之后,里面的1\由引号包裹,所以判断是字符型,如果没有引号包裹,那就是数字型

相关推荐
MicrosoftCloud5 小时前
用户权限 04|/etc/sudoers 安全配置:从最小授权到「别把 ALL 随便给人」
运维·安全·ubuntu·sudo·sudoers
福兮说6 小时前
设计稿是 #4A7C6F,页面量出来是 #4B7C6F:HEX、HSL、透明度、canvas 来回转的七个坑
前端·javascript·css·canvas
郑州光合科技余经理7 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
小呆呆6668 小时前
副业搞起来,小说,漫画,漫剧的成本优化思路
前端·后端·面试
Dovis(誓平步青云)8 小时前
浇水提醒刚弹出又消失,植物状态别只存一个百分比
开发语言·前端·javascript·pdf·ecmascript·电脑
码艺-Alimjan8 小时前
Vben Admin 新增维吾尔语 Vben-Modal的关键坑之一
前端·javascript·vue.js
可乐鸡翅yeah_9 小时前
hls.js 手动自定义 http 请求 loader,修改请求头实战
开发语言·前端·javascript·网络协议·http·ecmascript·m3u8在线
IT_陈寒9 小时前
Vite静态资源导入这个坑我帮你们踩过了
前端·人工智能·后端
广州华水科技9 小时前
大坝安全监测解决方案:单北斗GNSS形变监测系统应用与维护
前端
yivifu10 小时前
中文古籍电子书注释集成
前端·javascript·python·beautifulsoup·epub