SQL注入总结

        又到了期末时间段,此文章是自己总结所学,仅供参考。

目录:

一、原理

        一般流程

二、分类

        按照请求分类

        盲注分类

        按照头部字段

        其他类型

三、防御

        代码层面

        网络层面

一、原理:

        后端web服务器对用户输入的恶意字符过滤不严,导致带入到后端数据库去执行,造成数据泄露。

一般流程:

寻找注入点

        ?id=1

判断闭合方式

        ','','),')),"),"))

判断当前数据库字段个数

        order by+二分法

判断数据回显位置
获取数据库的基本信息

        union,版本,当前用户,当前数据库

获取数据库名
select group_concat(schema_name) from infromation_schema.schemata
获取数据库指定的表名
select group_concat(table_name) from infromation_schema.schemata.tables where table_schema="dbname"

获取数据库指定表的字段名

select group_concat(column_name) from infromation_schema.schemata.columns where table_schema=database() and table_name="tbname"

获取指定数据表的数据

database()            获取当前数据库名         

user()                  获取用户名

version()                获取数据库版本信息

重要的3个表:

        存库名的表:schemata

        存表名的表:tables

        存列名的表:columns

二、分类

        按照请求分类

                GET注入

                POST注入

        盲注分类

                布尔盲注

                布尔盲注相关函数

                left-返回字符串string最左边的n个字符串 (字符串,截取的长度)       

left(string,n)
参数:string为操作字符串,n为开始位置$ret = left(“redhat”,3);  //red
left(database(),2)='sa'  #判断数据库名前2个字符是否位sa;再查看其他位进行判断

                right-返回字符串string最右边的n个字符串 (字符串,截取的长度)
 

right(string,n)
参数:string为操作字符串,n为开始位置$ret = right(“redhat”,3);  //hat
right(database(),1)>’a’  #判断数据库名最后一个字符是否大于a;再查看其他位进行判断

                ord- char为字符,用于返回字符的ascii码,有时候服务器会对单引号进行转义,使用ASCII码就不用使用单引号参数: (单个字符);返回ASCII值
 

ord(char)
参数:char为操作$ret = char('a'); # 97
ord(mid(database(),1,1))>114  #意为检测database()的第一位ASCII码是否大于114,也即是'r'

                ascii- 返回字符char的ascii码 ( 和ord是别名关系 ) (单个字符); 返回ASCII值

ascii(char)
参数:char为操作$ret = ascii('a'); # 97
ascii(mid(database(),1,1))>114  #意为检测database()的第一位ASCII码是否大于114,也即是'r'

                lenght - 获取字符串的长度

length(string)
参数及返回值:string为操作字符串,返回字符串string的长度举例1:
$ret = length(“hello”); // 5
举例2:
length(database())>5  #判断数据库名长度大于5
需要的条件是:页面数据显示或不显示  (真和假的条件)注入流程:1 找注入点2 判断数据类型3 判断闭合方式4 验证漏洞id=1 and 1  或  id=1 and 05 猜数据库的长度id=1 and length(database())>106 猜数据库名称的第一个字符方式1id=1 and substr(database(),1,1)>='a' and substr(database(),1,1)<='z'方式2id=1 and ascii(substr(database(),1,1))>=97 and ascii(substr(database(),1,1))<=1227 猜数据表名的长度id=1 and length((查表的SQL语句))>10查表的SQL语句select table_name from information_schema.tables where table_schema=database() limit 0,18 猜数据库名称的第一个字符id=1 and substr((查表的SQL语句),1,1)>='a' and substr((查表的SQL语句),1,1)<='z'查表的SQL语句select table_name from information_schema.tables where table_schema=database() limit 0,1
                 时间盲注

                时间盲注相关函数:

                          sleep();

                          if(条件, 真执行这里, 假执行这里);

需要的条件是:页面没有任何变化注入流程:1 判断闭合方式id=1' and if(true, sleep(5), 'ok') --+id=1" and if(true, sleep(5), 'ok') --+id=1') and if(true, sleep(5), 'ok') --+id=1") and if(true, sleep(5), 'ok') --+id=1')) and if(true, sleep(5), 'ok') --+id=1")) and if(true, sleep(5), 'ok') --+
                 报错注入               
   需要的条件是:需要显示报错报错注入的方式:extractvalue(1, 2)  操作2的位置语法 and extractvalue(1, 2)updatexml(1, 2, 3)  操作2的位置语法 and updatexml(1, 2, 3)floor()语法 需要联合查询(*注意列数*)

        按照头部字段

                UA注入
    User Agent 中文名为用户代理,简称 UA,它是一个特殊字符串头,
使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器
渲染引擎、浏览器语言、浏览器插件等 
                Referer 注入
HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,
一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,
服务器因此可以获得一些信息用于处理 。
                XFF注入
X-Forwarded-For:简称XFF头,代表了HTTP的请求端真实的IP是客户端通过HTTP代理或者负载均衡器连接到web服务端获取源IP地址的一个标准
(通常一些网站的防注入功能会记录请求端真实IP地址并写入数据库或某文件,通过修改XXF头可以实现伪造IP)
                Cookie注入
HTTP协议本身是无状态的,什么是无状态呢?即服务器无法判断用户身份Cookie实际上是一小段的文本信息(key-value格式),用于记录用户状态Cookie注入,一般是因为后台程序,读取了cookie中的数据,并带入到数据库中执行了

        其他类型

                联合注入
                JSON注入
JSON(JavaScript Object Notation, JS 对象记法) 是一种轻量级的数据交换格式。
它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。
易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率 。
                编码注入

        利用编码工具进行编码

                二次注入
后端代码对用户输入的数据进行了转义保存到数据库时没有转义再次读取数据库的数据时,没有对数据中的特殊字符转义,可形成闭合,导致二次注入
                堆叠注入
堆叠注入概念:在 SQL语句 中, 分号(;) 用来表示一条 sql 语句的结束,
如果在 ; 结束一个 sql语句后,继续构造下一条语句, 分号之后的sql语句也会执行,
这个类型的注入称为堆叠注入 。
                宽字节注入
                DNSLog注入
    DNSlog就是日志,如何利用DNSlog进行注入并回显信息呢。需要了解多级域名的概念。
域名分级与域名解析过程(DNS)因特网采用层次树状结构命名方法。域是名字空间中一个可被管理的划分(按机构组织划分),
域可被划分为子域,子域可再被划分,即形成了顶级域名.二级域名、三级域名等。
从右向左为顶级域名、二级域名、三级域名等,用点隔开。如: tieba.baidu.com它由三个标号组成, com即为顶级域名,baidu为二级域名,tieba即为三级域名。且域名不分区大小写
推荐DNSlog平台DNSLog Platformhttp://admin.dnslog.linkCEYE - Monitor service for security testing

 

推荐DNSlog平台

  • DNSLog Platform

  • http://admin.dnslog.link

  • CEYE - Monitor service for security testing

三、防御

代码层面:

        对用户输入的字符进行关键字过滤和转意

        命令的预处理和参数化

网络层面:

        开启WAF对sQL特征进行过滤处理
        日云湍眠务对SGL注入拦截(阿里云盾)

此文章是自己总结所学,仅供参考。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构和算法-交换排序中的快速排序(演示过程 算法实现 算法效率 稳定性)

文章目录 总览快速排序&#xff08;超级重要&#xff09;啥是快速排序演示过程算法实现第一次quicksort函数第一次partion函数到第一次quicksort的第一个quicksort到第二次quicksort的第一个quicksort到第二次quicksort的第二个quicksort到第一次quicksort的第二个quicksort到第…

Java反射和动态代理

文章目录 1、反射1.1 反射的概述1.2 反射作用1.3 获取字节码文件对象的方式1.4 字节码文件和字节码文件对象1.5 获取构造方法1.6 获取构造方法并创建对象1.7 获取成员变量并获取值和修改值1.8 获取成员方法1.9 获取成员方法并运行1.10 反射练习1.10.1 泛型擦除1.10.2 修改字符串…

uniapp 创建组件组件

组件&#xff1a;用于将某个功能的 HTML、CSS、JS 封装到一个文件中&#xff0c;提高代码的复用性和可维护性。 创建组件 一、在根目录中创建 components 文件夹&#xff0c;右键点击新建组件。 二、输入组件名称、选择默认模板、点击创建组件。 三、在组件中正常编写内容即可…

动态编译 - Dynamically Compile and Load External Java Classes

文章目录 概述Code 概述 动态编译和加载外部Java类的核心流程可以概括为以下几个步骤&#xff1a; 读取源代码: 首先&#xff0c;需要获取到外部的Java源代码。这通常是通过读取文件、网络资源或者数据库中的源代码字符串来实现的。编译源代码: 接下来&#xff0c;需要使用Ja…

计算机网络(8):因特网上的音频/视频服务

概述 计算机网络最初是为传送数据设计的。因特网 IP 层提供的 “尽最大努力交付” 服务以及每一个分组独立交付的策略&#xff0c;对传送数据信息十分合适。因特网使用的 TCP 协议可以很好地解决P层不能提供可靠交付这一问题。 音频/视频常称为多媒体信息 多媒体信息&#xff…

unity 安卓 TCP可以连接别人,但是作为服务器无法被连接

现象非常的奇特&#xff0c;电脑ping手机没问题&#xff0c;用手机的socket调试助手也没问题&#xff0c;手机还能向外连接tcp服务器&#xff0c;但是电脑连手机tcp服务器连不上。更有趣的是&#xff0c;有些手机做tcp服务器可以被连接&#xff0c;有些手机做tcp服务器不能被连…

容器相关笔记

1.容器 1.什么是容器 容器就是存放对象的集合 2.java中的容器 容器就是一系列的类或接口&#xff0c;用来存储一系列对象的地址 3.容器里存放的是引用数据类型&#xff08;存对象的地址&#xff0c;不是对象本身&#xff09;&#xff0c;不能存基本数据类型 4.容器存放的两种格…

【BIAI】lecture 3 - GD BP CNN Hands-on

GD & BP & CNN & Hands-on 专业术语 gradient descent (GD) 梯度下降 back propagation (BP) 向传播 Convolutional Neural Network (CNN) 卷积神经网络 forward propagation 前向传播 biologically symmetry 生物对称性 synaptic 突触 axon 轴突 课程大纲 The go…

BUUCTF crypto做题记录(6)新手向

一、Unencode 得到的密文&#xff1a;89FQA9WMD<V1A<V1S83DY.#<W3$Q,2TM] 看题目名字&#xff0c;我们可以知道这是一个解码的题目&#xff0c;但是unencode 好像是不可解码的意思&#xff0c;我们可以对照着解码方式看一下哪个更适合&#xff0c;可以进行尝试一下C…

Linux系统操作——重启oracle服务:监听器和实例

目录 一、重启Oracle数据库及监听器 【方法一】 【方法二】 【方法三】 二、查看oracle监听状态 三、重启实例 一、重启Oracle数据库及监听器 【方法一】 获取root权限 su root 进入oracle的安装目录 cd $ORACLE_HOME 重启数据库 dbstart 重启监听器 lsnrctl st…

RocketMQ 投递消息方式以及消息体结构分析:Message、MessageQueueSelector

&#x1f52d; 嗨&#xff0c;您好 &#x1f44b; 我是 vnjohn&#xff0c;在互联网企业担任 Java 开发&#xff0c;CSDN 优质创作者 &#x1f4d6; 推荐专栏&#xff1a;Spring、MySQL、Nacos、Java&#xff0c;后续其他专栏会持续优化更新迭代 &#x1f332;文章所在专栏&…

H5的3D游戏开源框架

在H5的3D游戏框架中&#xff0c;Three.js、Babylon.js和Turbulenz是比较受欢迎的选择。 Three.js是一个广泛应用并且功能强大的JavaScript 3D库&#xff0c;可以创建简单的3D动画到创建交互的3D游戏。 Babylon.js是David Catuhe对3D游戏引擎热爱的结果&#xff0c;是最好的Jav…

腾讯云取消免费10G CDN流量包:免费CDN时代结束

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 免费送了7-8年的腾讯云10G免费流量包&#xff0c;从2024年开始&#xff0c;停止赠送了!自此&#xff0c;国内绝大多数互联网大厂的CDN都开收费了! 大概从2016年开始&#xff0c;腾讯云为了抢夺CDN客户&#xff0…

基于Spring-boot-websocket的聊天应用开发总结

目录 1.概述 1.1 Websocket 1.2 STOMP 1.3 源码 2.Springboot集成WS 2.1 添加依赖 2.2 ws配置 2.2.1 WebSocketMessageBrokerConfigurer 2.2.2 ChatController 2.2.3 ChatInRoomController 2.2.4 ChatToUserController 2.3 前端聊天配置 2.3.1 index.html和main.j…

从0开始python学习-43.通过yaml实现不同文件之间参数的关联

目的&#xff1a; 1. 统一管理接口关联的中间变量 2. 解决多个py文件中间的中间变量关联的问题 新建一个yaml_util.py进行封装读写清空yaml方法 # 读取 def read_yaml(key): with open("extract.yaml",encoding"utf-8") as f: #这里的文件如果没有会自…

mnn-llm: 大语言模型端侧CPU推理优化

在大语言模型(LLM)端侧部署上&#xff0c;基于 MNN 实现的 mnn-llm 项目已经展现出业界领先的性能&#xff0c;特别是在 ARM 架构的 CPU 上。目前利用 mnn-llm 的推理能力&#xff0c;qwen-1.8b在mnn-llm的驱动下能够在移动端达到端侧实时会话的能力&#xff0c;能够在较低内存…

MySQL之视图外连接、内连接和子查询的使用

一、视图 1.1 含义 虚拟表&#xff0c;和普通表一样使用 1.2 操作 创建视图 create view 视图名 as 修改视图 方式一&#xff1a; create or replace view 视图名 as 【查看视图相关字段】 方式二&#xff1a; alter view 视图名 as 【查看的SQL语句】 查看视图 方式一&…

Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现相机图像转换为AVI视频格式(C#)

Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现相机图像转换为视频格式&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机的图像转换为OpenCV的图像的技术背景在NEOAPI SDK里实现相机图像转换为视频格式 工业相机通过OpenCV实现相机图像转换为视频格式的优…

Docker Zookeeper 安装 简单教程

现在各种组件大部分都能找到Docker的镜像了&#xff0c;Docker容器化安装很多复杂中间件都变得非常轻松了。 1.拉取镜像 以下命令默认是拉取最新版本 zookeeper:latest docker pull zookeeper 注: 若要拉取指定版本如3.7&#xff0c;则可以执行命令 docker pull zookeeper:…

Nginx快速入门:Nginx实现高可用|结合keepalived实现主备节点(九)

0. 引言 在生产中我们要尽可能避免单点故障&#xff0c;nginx也不例外&#xff0c;因此搭建主备节点必不可少&#xff0c;今天我们来学习下如何利用keepalived实现主备 1. keepalived简介 keepalived 是一个LINUX系统中开源的负载均衡和故障转移软件&#xff0c;它主要用于高…