[BT]小迪安全2023学习笔记(第24天:Web攻防-SQL注入)

第24天

SQL注入原理

基于攻击者向应用程序输入字段中插入恶意的SQL代码,这些输入最终会被应用程序未经适当清洁或验证直接传递给数据库执行。当这些恶意输入与应用程序的原始SQL语句结合时,它们可以修改原始SQL查询的意图,允许攻击者执行未授权的数据库操作。

常见的Payload示例
假设一个网站有一个登录表单,后端代码直接将用户输入的用户名和密码拼接到SQL查询中,以验证用户。在没有适当防护的情况下,攻击者可以尝试以下payload:

' OR '1'='1

后端代码:

SELECT * FROM users WHERE username = '$username' AND password = '$password';

攻击者将上述payload作为用户名或密码输入时,最终的SQL查询可能变为:

SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '';

这里的 ‘1’=‘1’ 总是为真,导致这个查询条件忽略了原始的用户名和密码检查,可能返回数据库中的所有用户信息。

经常在能够输入数据的地方进行SQL注入,包括url传参与表单等

SQL注入攻击流程

  1. 分析网站数据库类型
  2. 根据数据库类型选择对应思路

Access数据库

字典猜解

payload示例

UNION SELECT 1,2, admin, 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 FROM admin

UNION操作符在SQL中用于合并两个或多个SELECT语句的结果集,并且删除重复的记录。每个SELECT语句内部必须有相同数量的选取列,列也必须有相似的数据类型。同时,每个SELECT语句中的列的顺序也必须一致。

这里的意图是将原查询的结果集与一个新的SELECT查询的结果集合并。新的SELECT查询尝试从admin表中选取admin列以及一系列数字作为填充数据,以确保列的数量与原查询匹配。这种技巧常用于探测或抽取特定表的数据。

注意:这里需要存在admin表,确定数据库的表名和列名通常通过字典猜解获得

偏移注入

偏移注入适用于知道表名,但不知道列名的时候。字段就是列

  1. 首先是order by查询字段数,
  2. 再确定表名
  3. 再select 1,2,4,5,admin.* from admin查询字段数

payload示例:

127.0.0.1/asp/index.asp?id=1513 union select 1,2,3,4,5,6,7,8,9,10,*from(admin as a inner join admin as b on a.id = b.id)

MySQL

MYSQL5.o以上版本:自带的数据库名information schema
information_schema:存储数据库下的数据库名及表名,列名信息的数据库

获取相关数据:

  1. 数据库版本-看是否符合information_schema查询-version ()
  2. 数据库用户-看是否符合RooT型注入攻击-user ()
  3. 当前操作系统-看是否支持大小写或文件路径选择-@@version compile_os-win
  4. 数据库名字-为后期猜解指定数据库下的表,列做准备-database ( )

payload示例:

?id=-2 UNION SELECT version(), 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17

version() 是一个数据库函数,用于返回数据库的版本信息。
后面跟随的数字2, 3, …, 17是为了匹配原查询中的列数,以确保UNION操作可以成功执行。这些数字本身通常不重要,只是占位符,用于满足UNION查询要求的列数一致性。
攻击目的
攻击者的目的是绕过正常的应用逻辑,通过注入UNION SELECT查询来获取数据库的版本信息,这可能是进一步攻击的跳板,因为知道了数据库的具体版本后,攻击者可以针对该版本已知的漏洞进行定向攻击。

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

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

相关文章

搭建Docker私有仓库registry

下载registry registry是Docker官方提供的仓库镜像 拉取镜像,不指定版本默认拉取最新版本镜像。 docker pull registry Using default tag: latest latest: Pulling from library/registry 79e9f2f55bf5: Pull complete 0d96da54f60b: Pull complete 5b27040df4…

ZooKeeper命令和监控详解

ZooKeeper监控命令详解 在分布式系统中,ZooKeeper作为一个非常重要的协调服务,它的健康状态直接影响到整个系统的可靠性和稳定性。因此,对ZooKeeper进行有效监控是非常必要的。本文将详细介绍ZooKeeper提供的命令行工具zkCli.sh,…

vue2之过滤器

过滤器 过滤器的实现类似Django的过滤器。 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>过…

Redis的过期键是如何处理的?过期键的删除策略有哪些?请解释Redis的内存淘汰策略是什么?有哪些可选的淘汰策略?

Redis的过期键是如何处理的&#xff1f;过期键的删除策略有哪些&#xff1f; Redis的过期键处理是一个重要的内存管理机制&#xff0c;它确保在键过期后能够释放相应的内存空间。Redis对过期键的处理主要依赖于其删除策略&#xff0c;这些策略包括被动删除&#xff08;惰性删除…

Mysql---库表操作

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.Mysql数据库简介 MySQL是一种关系型数据库管理系统&#xff0c;是最流行的开源数据库之一。它是由瑞典MySQL AB公司开发的&#xff0c;后来被Sun Microsystems收购&#xff0c;之后又被Oracl…

企业架构设计方法与实践中的架构治理演进、架构评估方法、架构成熟度模型

企业架构设计方法与实践中的架构治理演进、架构评估方法、架构成熟度模型。 架构治理演进: 架构治理是指通过设立和执行一套政策和程序,来管理和控制一个组织的架构活动。架构治理演进是一个持续的过程,需要根据组织的实际情况进行定期审查和调整。 在演进过程中,重点需要…

1 redis7概述

Redis7 1 Redis简介 Redis之所以称之为字典服务&#xff0c; 是因为 Redis 是一个 key-value存储系统。 支持存储的 value类型很多&#xff0c; 包括 String(字符串)、List(链表)、Set(集合)、Zset(sorted set --有序集合)和 Hash&#xff08;哈希类型&#xff09;等。 Redis…

[java基础揉碎]多态数组

介绍: 多态数组就是有一个父类数组, 数组含有不同多个父类子类对象 解析: 新建一个person类, 有名字,年龄属性, 同时有个say方法 新建一个子类, 有一个成绩的属性,并重写了say方法, 加上了成绩 新建一个子类老师, 并有工资这个属性, 一样重写了say方法加上了这个属性 要求创…

efcore事务

在 Entity Framework Core (EF Core) 中&#xff0c;事务用于确保一系列数据库操作要么全部成功&#xff0c;要么全部失败&#xff0c;这对于保持数据的一致性非常重要。以下是使用 EF Core 实现事务的一个简单示例&#xff1a; 首先&#xff0c;请确保安装了 EF Core。如果你…

PyTorch学习笔记之基础函数篇(八)

6 线性代数运算 6.1 torch.mm()函数 torch.mm() 是 PyTorch 中的一个函数&#xff0c;用于执行矩阵乘法操作。这个函数会接受两个张量作为输入&#xff0c;并返回它们的矩阵乘积。 函数的基本语法如下&#xff1a; torch.mm(mat1, mat2) → Tensor参数说明&#xff1a; ma…

根据服务器系统选择对应的MySQL版本

1. 根据服务器系统选择对应的MySQL版本 MySQL有多个版本&#xff0c;选择对应的版本&#xff0c;重点信息是Linux的GLIBC版本号&#xff0c;Linux的版本、系统位数。 1.1 查看Linux的GLIBC版本号 通常libc.so会支持多个版本&#xff0c;即向前兼容&#xff0c;查看该文件中…

Linux lsattr命令教程:如何查看和理解文件属性(附实例详解和注意事项)

Linux lsattr命令介绍 lsattr命令是list attributes的缩写&#xff0c;主要用于列出Linux系统文件的属性。这个命令可以帮助我们了解文件的各种属性&#xff0c;比如是否可以被修改、删除等。 Linux lsattr命令适用的Linux版本 lsattr命令在大多数Linux发行版中都可以使用&a…

LLM预备知识、工具篇——LLM+LangChain+web UI的架构解析

目录 【常见名词】一、LLM的低资源模型微调二、向量数据库1、Milvus(v2.1.4)&#xff1a;云原生自托管向量数据库&#xff08;Ubuntu下&#xff09;1&#xff09;安装&#xff08;Docker Compose方式&#xff09;&#xff1a;2&#xff09;管理工具&#xff08;仅支持Milvus 2.…

RabbitMQ命令行监控命令详解

在分布式系统中&#xff0c;消息队列中间件如RabbitMQ扮演着至关重要的角色。为了保证系统的稳定性和高可用性&#xff0c;对RabbitMQ进行有效监控是必不可少的。本文将详细介绍RabbitMQ提供的命令行工具rabbitmqctl&#xff0c;这些工具可以帮助我们监控和管理RabbitMQ服务器。…

adb 筛选查看Unity日志

在Windows系统中&#xff0c;使用ADB&#xff08;Android Debug Bridge&#xff09;查看Unity应用的日志是一个常见的需求&#xff0c;尤其是在开发或调试Android平台上的Unity游戏或应用时。以下是一些基本步骤和命令&#xff0c;帮助你通过ADB获取Unity日志。 在Linux或Mac …

rank() over, dense_rank() over, row_number() over的区别

rank() over, dense_rank() over, row_number() over的区别 --ROW_NUMBER() OVER 不需要考虑并列&#xff0c;即使查询出来的数值相同也会进行连续排名 SELECT NAME, STUNO, SUBJECT, SCORE, ROW_NUMBER() OVER(PARTITION BY SUBJECT ORDER BY SCORE DESC) TO_RANK FROM SCOTT…

Python分类汇总N张Excel表中的数据(附源码下载)

在现代办公环境中&#xff0c;处理大量的Excel表格是一项常见而又繁琐的任务。Python作为一种功能强大的编程语言&#xff0c;其在自动化办公方面的表现尤为出色。例如&#xff0c;我们可以使用Python进行Excel表格的分类汇总操作。 具体来说&#xff0c;我们可以创建一个名为“…

Learn OpenGL 03 着色器

GLSL 着色器的开头总是要声明版本&#xff0c;接着是输入和输出变量、uniform和main函数。每个着色器的入口点都是main函数&#xff0c;在这个函数中我们处理所有的输入变量&#xff0c;并将结果输出到输出变量中。 一个典型的着色器有下面的结构&#xff1a; #version vers…

O2OA(翱途)开发平台系统安全-用户登录IP限制

O2OA(翱途)开发平台[下称O2OA开发平台或者O2OA]支持对指定的用户设置可以连接的客户端计算机的IP地址&#xff0c;以避免用户在不安全的环境下访问系统。本篇主要介绍如何开启O2OA用户登录IP限制。 一、先决条件&#xff1a; 1、O2Server服务器正常运行&#xff0c;系统安装部…

PostgreSQL开发与实战(6.3)体系结构3

作者&#xff1a;太阳 四、物理结构 4.1 软件安装目录 bin //二进制可执行文件 include //头文件目录 lib //动态库文件 share //文档以及配置模版文件4.2 数据目录 4.2.1 参数文件 pg_hba.conf //认证配置文件 p…