SQL 注入漏洞攻击

news2025/1/31 21:44:52

文章目录

    • 1. 介绍
    • 2. 无密码登录
    • 3. 无用户名无密码登录
    • 4. 合并表获取用户名密码

1. 介绍

在这里插入图片描述

假设你用自己的用户名和密码登录了一个付费网站,网站服务器就会查询一下你是不是 VIP 用户,而用户数据都是放在数据库中的,服务器通常都会向数据库进行查询,要向数据库进行增删改查操作,就需要用到 SQL 语言。

在这里插入图片描述

但是,作为 SQL 的注入攻击者,我们并不知道网站的密码是什么,甚至都不知道用户名是什么,那就不能按正常套路出牌了。
这个时候我们不输入正常的数据,而是把数据转换成代码,使得服务器向数据库的正常查询变成了不正常的代码执行, 那么攻击者就可以执行自己想要的操作了。

如下代码,这是正常的查询操作,只有用户名和密码都匹配时,才能成功登陆。

select * from users
where
username='栈老师' and password='123456'

但是服务器如果没有过滤用户输入的数据,就很危险了!比如说,我们在用户名最后加上一个单引号,在 SQL 执行的时候,一对引号里面的东西会视为字符数据,但是因为这里的引号不成对,因此这条查询语句是会直接报错的,如果此时服务器把这条 SQL 报错信息直接返回给用户,那么攻击者就知道具体是什么原因导致报错了, SQL 注入攻击的门也就这样打开了。

2. 无密码登录

如果我们在用户名的单引号后面加上两个-,事情就不一样了。在 mysql 内部,系统遇到两条横杠就会认为从此处开始到该行结束,中间的内容都是注释,而注释是不会被视为代码执行的, 相当于只会执行前面部分的 SQL 语句。

所以只知道用户名,即使没有密码,也是可以进行登录的,代码如下:

select * from users
where
username='栈老师' --' and password='123456'

3. 无用户名无密码登录

上面是只知道用户名不知道密码的情况。那如果我们连正确的用户名信息都没有呢?
SQL 语句在遇到 where 关键词的时候会判断条件是真还是假,我们把这里的条件放在 or 里面进行拼接,因为 or 的一边为真,那么整体就为真,所以我们只需要再增加一个为真的条件就可以了, 比如 1=1,这个时候即使用户信息错误,where 的逻辑判断也总是为真。

那么即使不知道用户名和密码,依然可以登录:

select * from users
where
username='栈老师' or 1=1

4. 合并表获取用户名密码

我们都知道合并两个表格可以用 union 关键字,像下面这样:

select * from table1
union
select * from table2

mysql 规定,union select 的后面可以不指定表名,只需要两个表格的列数相同、数据类型对应即可。
所以我们直接在 select 后面用 null 来代替列名。null 代表没有值,但是 union 必须要保证合并两边的列数是一致的,攻击者就可以通过增加 null 的个数来测出表格的列数。

select * from products
union
select null, null, null

攻击者现在用其他方法知道了另一个表格(用户表)的信息,那就可以把表格的列名放在 null 的位置,并且指定选取的表格名。
但是 union 除了要保证列数一致以外,还要保证数据类型的相似性,否则是无法进行合并的。
实际上攻击者在确定好列数以后,还会进行数据类型的判断,比如逐列进行测试。测试完毕之后就可以把所有的东西都放在一起了。
首先在可以注入的地方,用单引号强行终止数据内容,并且加上两个横杠使得后面的语句失效,这样 SQL 语句就不会报错。

这样,攻击者就可以在此处注入 union 语句了:

select * from products
where name = 'apple'
union
select null, username, password from users --'

此时,账号密码信息就这样被合并到 products 表中了!

在这里插入图片描述

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

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

相关文章

NLP信息抽取全解析:从命名实体到事件的PyTorch实战指南

目录 引言背景和信息抽取的重要性文章的目标和结构 信息抽取概述什么是信息抽取信息抽取的应用场景信息抽取的主要挑战 实体识别什么是实体识别实体识别的应用场景PyTorch实现代码输入、输出与处理过程 关系抽取什么是关系抽取关系抽取的应用场景PyTorch实现代码输入、输出与处…

松下DC-GH6 MOV音频使用可变长且存在00的特殊案例分析

松下mov常见的是GH系列机型,其音频格式一般采用SOWT其实是PCM,只不过一般是一个声道TRAK(左右两个声道合成到一个TRAK中)。此次遇到的DC-GH6却是一个4声道独立TRAK的松下MOV文件,这种的倒是在索尼上也有遇到过&#xf…

Python(PySpark案例实战)

为什么要学习PySpark? Spark对Python语言的支持,重点体现在,Python第三方库:PySpark之上。 PySpark是由Spark官方开发的Python语言第三方库。 Python开发者可以使用pip程序快速的安装PySpark并像其它三方库那样直接使用。 PySp…

小谈设计模式(1)—总序

小谈设计模式(1)—总序 开始操作设计模式总论设计模式是什么组成要素模式名称问题描述解决方案效果描述 设计模式有什么作用提供可重用的解决方案提高代码的可读性和可维护性促进代码的可扩展性提高代码的灵活性和可重用性促进团队合作和沟通作用总结 为…

基于SpringBoot的新闻管理系统

基于SpringBoot的新闻管理系统【附源码文档】、前后端分离系统 开发语言:Java数据库:MySQL技术:SpringBootVue工具:IDEA/Ecilpse、Navicat、Maven 【主要功能】 前台 首页新闻信息校园论坛留言交流个人中心 后台 个人中心用…

报错:数组明明有内容但打印的length是0,学会使用 async 和 await 解决问题

文章目录 一、问题二、分析三、解决1.将异步改为同步2.设置延迟 一、问题 在日常开发中,for 循环遍历调用接口,并将接口返回的值进行拼接,即push到一个新的数组中,但是在for循环内部是可以拿到这个新的数组,而for循环…

“投资教父”熊晓鸽老了,IDG光环不再

作者 | 鸠白 艺馨 排版 | Cathy 监制 | Yoda 出品 | 不二研究 2017年,世界互联网大会上,“投资教父”熊晓鸽问映客的创始人:“今年你们利润能有多少?” 对方笑答:“5个亿吧!” “才五个亿&#xff1f…

产品MC动画宣传片制作团队安排

在产品MC动画宣传片的制作过程中,通常需要组建一个专业的团队,以确保各个方面的工作能够高效完成。以下是一个常见的产品MC动画宣传片制作团队的安排: 1.制片人(Producer):负责项目的整体策划和管理&#…

华为云云耀云服务器L实例评测|有关华为云云耀云服务器L实例你可能不知道的事情

前言 最近华为云推出了华为云云耀云服务器L实例。主打一个轻量级云服务器,即开即用,轻松运维,开启简单上云第一步。具有智能不卡顿,价优随心用,上手更简单,管理特省心。 在推出的第一时间我就买了一台来耍…

H5移动端选择器,layPicker移动端日期选择器,jquery移动端自定义选择器

前言 基于jquery实现的,H5移动端选择器 默认自带日期选择,可自定义选择,和自定义html 效果图 微信模拟版 旧版 使用方式简单 layPicker.init({elem: #year, // 绑定元素options: year, // 设置为日期选择器(日期选择器可设…

芯科蓝牙BG27开发笔记2-调试第一个程序

soc-Blinky程序去掉bootloader功能之后就可以下载运行了,但是时不时会在连接的时候死机,进入debug,发现: 查代码,该函数被注册到io stream中,但它是在app.c中调用app_log时实际调用,例如&#x…

bug总结问题集和知识点集

目录 一 bug问题集1. 端口被占用 二 oracle1. oracle查看版本怎么操作2. oracle数据库:参数个数无效![在这里插入图片描述](https://img-blog.csdnimg.cn/6a2eebc164f9406c81525371893bbd11.png) 三 mybatis1. mybatis用注解如何实现模糊查询 四 List1. 如何判断Jav…

Kubernetes 部署发布镜像(cubefile:0.4.0)

目录 实验:部署发布镜像(cubefile:0.4.0) 需求分析: 1、部署Kubenetes环境: 2、撰写 cubefile-deployment.yaml 文件 代码解释: 遇到的问题: 问题解决 : 3、撰写 cubefile-se…

SSL证书验签时要带www吗?

单域名证书:顶级域名如www.abc.com或abc.com 不管你提交订单的时候填写的域名是带www或不带www的域名,签发的证书均支持www和不带www的域名 单域名证书:子域名如mail.abc.com,签发的证书仅支持mail.abc.com 通配符证书&#xff…

LeetCode 50题:实现Pow(x,n)

题目 实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即,xn )。 示例 1: 输入:x 2.00000, n 10 输出:1024.00000示例 2: 输入:x 2.10000, n 3 输出:9.26…

你知道SOLIDWORKS焊件类零件有个快速草图建立工具吗?

背景: 焊件是SOLIDWORKS中一个重要的组成模块,通过该模块可以很快的建立起一个庞大的型材结构网络。 但是我们也明白焊件是基于草图的,普通的方式建立复杂的草图是需要较多的精力和时间,本次视频的出发点就是针对此问题给出的一个…

Python网页请求超时如何解决

在进行网络爬虫项目时,我们经常需要发送大量的请求来获取所需的数据。然而,由于网络环境的不稳定性,请求可能会因为超时而失败。请求超时可能导致数据获取不完整,影响爬虫的效率和准确性。此外,频繁的请求超时可能会被…

一个或多个筛选器启动失败。完整的详细信息将在相应的容器日志文件中找到

网上找了好久没解决 问题代码: 11-Sep-2023 16:47:22.109 严重 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.StandardContext.startInternal 一个或多个筛选器启动失败。完整的详细信息将在相应的容器日志文件中找到 11-Sep-2023 16:47:22.109 严重 [RMI TCP…

二叉树题目:二叉树的层平均值

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题:二叉树的层平均值 出处:637. 二叉树的层平均值 难度 4 级 题目描述 要求 给定一个二叉树的根结点 …

新人白嫖:基于揽睿星舟云部署Stable Diffusion,10 分钟体验 SDXL 1.0 超强功能(AI绘画保姆级教程)

一、前言 SDXL 1.0 自推出到现在,已经有一段时间了,网上也看到了用 SDXL 做出的各种惊艳的图,相对于 Stable Diffusion 之前的版本来说,功能确实强大了很多。 SDXL 1.0 给我们带来最大的好处就是,基本可以实现靠嘴出图…