当前位置: 首页 > news >正文

SQL 注入漏洞详解 - Union 注入

1)漏洞简介

SQL 注入简介

SQL 注入 即是指 Web 应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在 Web 应用程序中事先定义好的查询语句的结尾上添加额外的 SQL 语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询从而进一步得到相应的数据信息。

SQL 注入概念

**SQL 注入漏洞 **主要形成的原因是在数据交互中,站点针对前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到 SQL 语句中后,被当作 SQL 语句的一部分执行。 从而导致数据库受损(被脱裤、被删除、甚至整个服务器权限沦陷)。
主要是开发人员在构建代码时,没有对输入边界进行安全考虑,导致攻击着可以 通过合法的输入点提交一些精心构造的语句,从而欺骗后台数据库对其进行执行,导致数据库信息泄漏的一种漏洞。

SQL 注入攻击流程

第一步:注入点探测
自动方式:使用 Web 漏洞扫描工具,自动进行注入点发现
手动方式:手工构造 sql inject 测试语句进行注入点发现

第二步:信息获取
通过注入点取期望得到的数据。

  1. 环境信息:数据库类型,数据库版本,操作系统版本,用户信息等。
  2. 数据库信息:数据库名,数据表名,表字段名,字段内容(加密内容破解)

第三步:获取权限
获取操作系统权限:通过数据库执行 Shell,上传木马

2)漏洞原理

可以通过网站存在的查询语句进行构造,为此开发者对其伤透了脑筋,漏洞不光是查询,可能还存在与 API、隐藏链接、http 头数据、写入数据等。需要对数据包的结构和传递函数比较了解,建议学习的时候把数据库的日志打开,就可以查看到传递到数据库的语句是什么样子的了。
需要记住的 information_schema 数据库的 SCHEMATA、TABLES、COLUMNS。 SCHEMATA 表中存放所有数据库的名,字段名为 SCHEMA_NAME。 关键函数 database() 当前数据库名、version() 当前 mysql 版本、user() 当前 mysql 用户。

3)漏洞危害

属于危害较高的漏洞,可以获取敏感信息,修改信息,脱库,上传 Webshell,执行命令。

  1. 参数用户可控:前端传给后端的参数内容是用户可以控制的。( 输入框,URL,抓包 )
  2. 参数带入数据库查询:传入的参数拼接到 SQL 语句,且带入数据库查询。

**SQL 注入漏洞 **发生在前端,属于前端开发设计漏洞。该漏洞与后端数据库执行无关。

SQL 注入被广泛用于非法入侵网站服务器,获取网站控制权。它是应用层上的一种安全漏洞。

通常在设计存在缺陷的程序中,**对用户输入的数据没有做好过滤,导致恶意用户可以构造一些SQL语句让服务器去执行,**从而导致数据库中的数据被窃取,篡改,删除,以及进一步导致服务器被入侵等危害。

环境准备

docker pull sagikazarmark/dvwa
docker run -d --name dvwa -p 8081:80 -p 33060:3306 sagikazarmark/dvwa

image.png

docker exec -it dvwa /bin/bash

image.png

show databases;
  • information_schema:可用来访问数据库的元数据,相似于信息数据库。其中保存着 关于MySQL 服务器 所维护的所有其他数据库的信息(元数据)。如数据库名,数据库的表,表栏的数据类型与访问权限等。

4)SQL 注入分类

4.1)数字型

当输入的参数为整形时,如果存在注入漏洞,可以认为是数字型注入。

测试步骤:
1. 加单引号, URL:www.text.com/text.php?id=3'
对应的 sql: select * from table where id=3' 这时 sql 语句出错, 程序无法正常从数据库中查询出数据, 就会抛出异常; 此时可以判断大概率存在注入, 因为只有服务器将这个单引号一起当作 SQL 语句执行时才会报错.2. 加 and 1=1, URL: www.text.com/text.php?id=3 and 1=1
对应的 sql: select * from table where id=3 and 1=1 语句执行正常, 与原始页面无任何差异;3. 加 and 
http://www.lryc.cn/news/405403.html

相关文章:

  • Qt创建自定义组件并且promote to之后导致编译错误(CMake)
  • 告别写作瓶颈,4款AI协作工具助你迸发灵感
  • java30-Shiro
  • 【linux驱动开发】卸载驱动时报错:Trying to free already-free IRQ 0
  • SpringBoot如何解决yml明文密码问题
  • SDL常用结构体和函数接口
  • 【数据结构】AVL树(图文解析 + 代码实现)
  • HTML(六)——HTML表单和框架
  • 【Qt 】JSON 数据格式详解
  • 路由表与IP数据报转发:基础小白指南
  • python—selenium爬虫
  • Mysql - 索引
  • 从课本上面开始学习的51单片机究竟有什么特点,在现在的市场上还有应用吗?
  • uniapp中出现Uncaught runtime errors
  • 数字信号处理基础知识(二)
  • 人生低谷来撸C#--015 C# 属性(Property)
  • 面试题003:面向对象的特征——封装性
  • 森林防火,森林防火智能储水罐_鼎跃安全
  • 虚幻引擎,体积雾、体积光、镜头泛光
  • Python 机器学习求解 PDE 学习项目——PINN 求解二维 Poisson 方程
  • 微信小程序删除滑块 SwiperCell 自动收起 Van weapp van-swipe-cell 滑块自动收起 点击页面也自动收起滑块
  • 【vluhub】log4j注入漏洞 CVE-2021-44228
  • Redis核心技术与实战学习笔记
  • 力扣经典题目之->设计循环队列 的超详细讲解与实现
  • 【数据结构】排序算法——Lesson2
  • Ubuntu编译ffmpeg并添加cmake工程
  • Vue.js[组件(Component)]
  • 基于微信小程序+SpringBoot+Vue的校园自助打印系统(带1w+文档)
  • qt设置过滤器
  • 线上环境服务器CPU飙升排查