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

【SQL注入系列】JSON注入

 什么是JSON?

​JSON​​(JavaScript Object Notation)是一种​​轻量级的数据交换格式​​。它基于 ​​ECMAScript​​ 规范的一个子集,但采用​​独立于编程语言的文本格式​​来存储和表示数据。它易于人阅读和编写,同时也易于机器解析和生成,常用于Web前端与后端服务器之间的数据传输。声明:本篇内容基于网络安全知识体系,所学用途皆不可用于法律之外的攻击与入侵

什么是JSON注入?

JSON注入是一种安全漏洞,当应用程序​​将用户输入未经安全处理就直接拼接到一个JSON数据结构或JSON字符串中​​时,攻击者可以通过构造特殊的输入来破坏JSON的结构,从而注入恶意代码或改变数据的语义。

JSON注入的常见场景

场景​​:主要发生在Web应用程序前后端通过JSON格式进行数据交互时。例如:后端根据用户请求,动态生成一段JSON数据返回给前端。前端将用户输入的数据以JSON格式提交给后端,后端直接解析并使用(例如用于数据库查询)。

注入恶意数据​​:通过破坏结构,攻击者可以插入任意JSON数据,这些数据可能会被后端程序信任并使用,从而导致其他安全问题(如XSS、权限绕过等)。

与SQL注入结合​​:在某些情况下,后端程序可能会将JSON数据中的某个值取出,并​​不加过滤地拼接到SQL查询语句中​​。这就导致了“JSON注入”最终引发了“SQL注入”。

​攻击方式​​:破坏JSON结构​​:如果用户输入的值中包含未转义的双引号 "或花括号 }等特殊字符,攻击者可以提前终止字符串或键值对,并注入新的键值对。

前端与后端API交互时的核心数据转换过程:接收到的JSON字符串 → 转换为对象进行操作 → 处理完毕后可能再转换为字符串发送回去。下图是json的一般格式。

JSON.parse()​: 用于将一个 JSON 字符串转换为 JavaScript 对象。

JSON.stringify()​: 用于将 JavaScript 对象转换为 JSON 字符串。

Object.keys()​: 返回一个给定对象自身的所有可枚举属性名的数组。

.forEach()​: 数组的迭代方法,用于遍历数组的每个元素。

接下来进入到实战模式,首先源代码必须放在php/www文件下。新建文本文件,把代码放进去,并把文件扩展名改为.php

打开火狐,输入网址http://localhost/json1.php,按f12打开开发者模式,点击hackbar。输入:json={"username":"admin"}   点击execute显示出用户名和密码。

然后用单引号闭合,添加and,返回结果

由于 and 1=2导致查询条件永远不成立,数据库返回了空结果集。后端程序拿到空结果后,就在页面上显示了“查询结果为空”。

如果系统是安全的​​:特殊输入会被转义或拒绝,页面可能会返回错误,或者统一返回“登录失败”等模糊信息。​现在系统返回“查询结果为空”​​:这清晰地表明注入的SQL代码 and 1=2#​被数据库成功执行了​​,您已经能够通过输入来控制数据库的查询逻辑。

输入:json={"username":"admin' and 1=2 union select 1,2#"}

admin'​:用于闭合SQL语句中字符串的引号。

and 1=2​:制造一个永假条件,使得原本查询用户 admin的部分失败并返回空结果。

union select 1,2​:这是攻击的核心。UNION操作符用于合并两个SELECT语句的结果集。select 1,2是攻击者自定义的查询,目的是探测数据库返回结果的位置(即页面的哪个部分会显示查询结果的第一列和第二列)。

#​:注释符,用于注释掉后续所有SQL代码,避免语法错误。

这证明攻击成功。数字 1和 2来自攻击者自定义的 union select 1,2。这个结果清晰地指明了​​回显位​​:查询结果的第一列(1)的值会显示在“用户名”的位置,第二列(2)的值会显示在“密码”的位置。

接下来

获取真实信息​​:将 1, 2替换为数据库函数,从而窃取敏感信息。例如:

{"username":"admin' and 1=2 union select database(), version()#"}

返回 用户名:数据库名,密码:数据库版本

窃取所有数据​​:在摸清数据库结构(表名、列名)后,构造Payload直接dump出所有用户和密码:

{"username":"admin' and 1=2 union select group_concat(username), group_concat(password) from users#"}

此处看到用户名和密码已经全部获取

如何防御?根本的解决方案是:​​使用参数化查询(预编译语句)​​。

以PHP(PDO)为例,安全的写法应该是:

$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username"); $stmt->execute(['username' => $username]); // 用户输入会被安全地处理为数据,而非代码 $results = $stmt->fetchAll();

这种方法从原理上杜绝了SQL注入的可能。

感谢大家的观看,小编呆呆羊与大家一同学习一同成长


文章转载自:

http://hCWTIQze.bmpjp.cn
http://mTnbyLJe.bmpjp.cn
http://0nHJ5t1o.bmpjp.cn
http://sFXn5alW.bmpjp.cn
http://xA7nAHf3.bmpjp.cn
http://QJ13jHnZ.bmpjp.cn
http://8uo8D6el.bmpjp.cn
http://U4BcYmsp.bmpjp.cn
http://6zWXEinU.bmpjp.cn
http://gGuMhkwV.bmpjp.cn
http://sS9k30Fw.bmpjp.cn
http://hysuqiVV.bmpjp.cn
http://fKWnrZ2q.bmpjp.cn
http://O68gg9cJ.bmpjp.cn
http://sXnIRG7H.bmpjp.cn
http://7709Jd3f.bmpjp.cn
http://IxHaA4GI.bmpjp.cn
http://FI4hJz9P.bmpjp.cn
http://1ukzZHXD.bmpjp.cn
http://pQ8tFo0S.bmpjp.cn
http://lnmfJsA7.bmpjp.cn
http://2dZJ5f0M.bmpjp.cn
http://A4rPxuy7.bmpjp.cn
http://f3A8miKF.bmpjp.cn
http://P0Z58GQI.bmpjp.cn
http://z3BRemNb.bmpjp.cn
http://Nt9HAhIZ.bmpjp.cn
http://LIBxbevm.bmpjp.cn
http://MHqxlGdS.bmpjp.cn
http://CPM95cUt.bmpjp.cn
http://www.dtcms.com/a/378540.html

相关文章:

  • 盲盒抽卡机小程序:从0到1的蜕变之路
  • 设计模式(C++)详解—工厂方法模式(1)
  • 【Proteus仿真】【51单片机】教室灯光控制器设计
  • java语言中,list<String>转成字符串,逗号分割;List<Integer>转字符串,逗号分割
  • Jenkins运维之路(Jenkins流水线改造Day01)
  • 9月11日星期四今日早报简报微语报早读
  • 阿里兵临城下,美团迎来至暗时刻?
  • 学习笔记:Javascript(5)——事件监听(用户交互)
  • window显示驱动开发—为头装载和专用监视器生成自定义合成器应用(二)
  • [K8S学习笔记] Service和Ingress的关系
  • YOLO11实战 第018期-基于yolo11的水果甜瓜目标检测实战文档(详细教程)
  • 【已解决】mongoose在mongodb中添加数据,数据库默认复数问题
  • 借助自动化GPO报表增强AD域安全性
  • decentralized英文单词学习
  • 响应式布局
  • Vue基础知识-Vue集成 Element UI全量引入与按需引入
  • 《UE5_C++多人TPS完整教程》学习笔记52 ——《P53 FABRIK 算法(FABRIK IK)》
  • 网络编程套接字(UDP)
  • Git子模块(Submodule)合并冲突的原理与解决方案
  • 谷粒商城项目-P16快速开发-人人开源搭建后台管理系统
  • 记一次nginx服务器安全防护实战之“恶意目录探测攻击”防护
  • 突破多模态极限!InstructBLIP携指令微调革新视觉语言模型,X-InstructBLIP实现跨模态推理新高度
  • 如何在实际应用中平衡YOLOv12的算力需求和检测精度?
  • MySQL 主键约束:表的 “身份证”,数据完整性的核心保障
  • 分布式事务性能优化:从故障现场到方案落地的实战手记(二)
  • 本地生活服务平台创新模式观察:积分体系如何重塑消费生态?
  • 内存传输速率MT/s
  • ThinkPHP8学习篇(六):数据库(二)
  • Synchronized原理解析
  • Cesium深入浅出之shadertoy篇