• 14 WEB漏洞:SQL注入之类型及提交注入


    1.参数类型:

    a.数字
    b.字符
    c.搜索符
    4.json

    2.请求方式:

    HTTP头
    GET
    POST
    COOKIE
    REQUEST
    JSON注入相关知识
    $_SERVER(php内置变量,可查询数据包或浏览器信息,可以将查询信息改为sql语句)

    3.JSON基础

    a. 简介
    JSON 是存储和交换文本信息的语法,是轻量级的文本数据交换格式。类似xml,但JSON 比 XML 更小、更快,更易解析。所以现在接口数据传输都采用json方式进行。JSON 文本的 MIME 类型是 “application/json”

    b. JSON语法
    ■ 数据在名称/值对中
    ■ 数据由逗号分隔
    ■ 大括号保存对象
    ■ 中括号保存数组

    c. JSON值
    ■ 数字(整数或浮点数) {“age”:30 }
    ■ 字符串(在双引号中) {“uname”:“yang”}
    ■ 逻辑值(true 或 false) {“flag”:true }
    ■ 数组(在中括号中){“sites”:[{“name”:“yang”},{“name”:“ming”}]}
    ■ 对象(在大括号中)JSON 对象在大括号({})中书写:
    ■ null { “runoob”:null }

    d. JSON代码格式
    在这里插入图片描述

    JSON注入

    JSON注入是指应用程序所解析的JSON数据来源于不可信赖的数据源,程序没有对这些不可信赖的数据进行验证、过滤,如果应用程序使用未经验证的输入构造 JSON,则可以更改 JSON 数据的语义。在相对理想的情况下,攻击者可能会插入无关的元素,导致应用程序在解析 JSON数据时抛出异常。

    <?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();
      }
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46


    5.实践上手

    最开始学的时候,可以结合源码看看,会有收获哦

    sqlilabs Less-5(单引号报错注入)

    爆库名:
    ?id=1’ and updatexml(1,concat(0x7e,(SELECT database()),0x7e),1)-- -
    爆表名:
    ?id=1’ and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=“security”),0x7e),1)-- -
    爆字段名:
    ?id=1’ and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=“security” and table_name=“users”),0x7e),1)-- -
    爆字段内容:
    1’ and updatexml(1,concat(0x7e,(select concat(0x23,id,0x3a,username,0x3a,password,0x23) from security.users limit 0,1),0x7e),1)-- -

    sqlilabs Less-6 (双引号报错注入)

    与Less-5差不多,将单引号换双引号就可以了

    sqlilabs Less-11(单引号报错或union注入)

    在Username:和Password :两个框任意一个框注入都可以

    sqlilabs Less-18(User-Agent单引号报错注入)

    分析源码
    check_input()函数, 较强的过滤,所以考虑从其他地方入手
    在这里插入图片描述


    在这里插入图片描述


    a.说明要输入的uname和passwd要是数据库里的(可以用mysql看一下)当然也可以自己猜
    在这里插入图片描述



    b.有一个insert函数,说明在User-Agent:里的内容会被插入到uagents表里,说明有交互,可以尝试注入
    在这里插入图片描述


    c.能够看到会报错,所以可以试一下报错注入


    sqlilabs Less-20(cookie单引号报错注入)

    对其中有疑惑的可以看源码(开始学习的过程多看源码,多理解)

    在这里插入图片描述



    在这里插入图片描述
    intval( )函数 :获取变量的整数值,允许以使用特定的进制返回。默认10进制
    echo intval(“0x1a”, 0), “\n”; // 使用16进制。 结果 “26”
    echo intval(“057”, 0), “\n”; // 使用8进制。 结果 “47”
    echo intval(“57”),“\n”; // 使用10进制。结果57
    echo intval(“42”, 0), “\n”; // 结果 “42”

    ctype_digit(string):检查字符串里的字符是不是都是数字,是返回true,不是返回false

    mysql_real_escape_string():函数转义sql语句中使用的字符串中的特殊字符。

    magic_quotes_gpc 打开时,所有的 ‘ (单引号), ” (双引号), (反斜线) and 空字符会自动转为含有反斜线的溢出字符。 addslashes() 函数
    get_magic_quotes_gpc函数:是一个用来判断是否为用户提供的数据增加斜线(是否开魔术引号)
    stripslashes() 函数:删除由函数添加的反斜杠。

  • 相关阅读:
    RecursionError: maximum recursion depth exceeded while calling a Python object
    小程序:model:value不生效
    十六、代码校验(2)
    数据结构与算法(二)树形结构篇
    [C++] 哈希的模拟实现---闭散列法(中)
    SpringBoot动态定时任务(完整版)
    排序第三节——交换排序(冒泡排序+快速排序+快排的优化)(5个视频讲解)
    ubuntu安装Chrome浏览器
    【计算机网络】-基础知识
    C语言小常识大杂烩
  • 原文地址:https://blog.csdn.net/qq_52718293/article/details/125534066