WEB应用程序数据库防守篇之预防SQL漏洞注入

简介: 主要介绍SQL注入的危害会引发的后果以及如何预防等

前言




SQL:

 SQL(Structured Query Language) 是结构化查询语言的意思,用来操作查询所有关系型数据库,非关系型数据库虽然也可以存储用户的信息,但查询检索效率远低于关系型数据库,所以关系型数据库就成为存储用户数据的首选。非关系型数据库通常用来存储大数据,结构化数据,指纹,面容特征等信息,也非常重要


image.png

SQL 又分为以下四种数据库操纵语言

DQL:数据库查询语言

DML:数据库操作语言,执行添加,删除,修改

DDL:数据库定义语言

DCL:数据库事务语言

进行SQL注入,SQL语句的语法要非常熟练

Mysql中有几张默认很重要的表,必须要认识:

image.png

 information schema :它存储了关于数据库、表、列、索引、用户权限等元数据信息。

 mysql  :该数据库存储了MySQL服务器的用户权限、密码、角色等信息。它包含了多个系统表,用于管理和控制用户权限和访问控制

performance_schema:该数据库用于存储MySQL服务器的性能监控数据。它包含了多个系统表,如events_waits_current、threads、memory_summary_global_by_event_name等,用于收集和展示MySQL服务器的性能指标和统计信息

sys:该数据库是MySQL 8.0版本引入的,用于提供一种更方便的方式来查询和分析数据库的性能和状态。它包含了多个系统视图和存储过程,如sys.user_summary sys.schema_table_statistics等,用于查询和分析数据库的性能和状态信息

认识SQL注入:

度娘解释

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

翻译过来一句话就是:

攻击者通过恶意拼接SQL语句串,进行提交从而达到绕过程序代码中定义的权限,非法获取到数据库、表等信息。


在sql注入方面,用Php写的网站贡献最大,由于他是弱类型数据的语言,在传递数据类型时可以进行自由转换,这就导致SQL注入的注入点会非常的多,而使用强类型数据语言 Java,C++,C#会规避绝大部分的SQL注入漏洞。

SQL注入:

SQL注入分为很多种,有联合注入、盲注、布尔注入、报错注入、时间注入、堆叠注入、二次注入、宽字节注入、cookie注入等等等。当然 这些注入的原理都一样


下面讲一个最常用的绕过登录进行SQL注入 :

常你的登录验证SQL是这样的,

Select*from[用户表]where username='[账号]'and password='[密码]';

正常传入应该是这样:

Select*from  users  where username='hyd'and password='root130';

但如果我在传入的值username中加点料  hyd'; --  ,密码随便输  就变成这样啦  

Select*from  users  where username='hyd';--' and password='111111' ; 

-- 和 # 在sql中是注释的意思,他在执行的时候会忽略掉后面的部分,这样密码就会不起作用

接着使用联合查询union传入  hyd' union select version(),database(); --

Select*from  users  where username='hyd'unionselect version(),database();--' and password='111111' ; 

version和database会查出你当前项目数据库的版本号和所用数据库名称。

接下来根据数据库名查出库中所有的数据表,这里select后的四条数据需要在查版本号之前进行测试得出字段的数量

unionselect1,group_concat(table_name),3,4from information_schema.tableswhere table_schema ='【数据库名】'

查出所有数据表后,观察表名,带user,admin 字样的表,都会成为查询的目标,

接着查询目标表的列名,

unionselect1,2,3,column_name from  information_schema.columnswhere  table_name='users'and table_schema=database()#

得到列名后,就可以根据列名得到想要的信息。比如 查询用户账户,密码以及所有字段内的信息。

1' union select id,username,password from users#

如果该表中有管理员的账号密码,那就等于拿到了通往系统后台大门的钥匙,攻击者通过正常登录,就可以为所欲为了。因为系统管理员通常拥有最高权限,做的所有操作一般都不会被限制


下一篇会讲靶场实战训练和预防SQL注入






相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
安全 测试技术 数据库
维护的Web应用程序
【10月更文挑战第4天】维护的Web应用程序
56 4
|
3月前
|
存储 移动开发 大数据
HTML5 Web IndexedDB 数据库详解
IndexedDB 是一种高效的浏览器存储方案,允许在本地存储大量结构化数据,支持索引和事务,适用于需要离线和大数据处理的应用。它由数据库、对象仓库等组成,通过键值对存储数据,确保数据一致性和完整性。本介绍展示了如何创建、读取、更新和删除数据,以及事务和错误处理的最佳实践。
|
3月前
|
缓存 移动开发 安全
Web安全-HTTP响应拆分(CRLF注入)漏洞
Web安全-HTTP响应拆分(CRLF注入)漏洞
197 1
|
2月前
|
监控 前端开发 JavaScript
使用 MERN 堆栈构建可扩展 Web 应用程序的最佳实践
使用 MERN 堆栈构建可扩展 Web 应用程序的最佳实践
30 6
|
2月前
|
开发框架 搜索推荐 数据可视化
Django框架适合开发哪种类型的Web应用程序?
Django 框架凭借其强大的功能、稳定性和可扩展性,几乎可以适应各种类型的 Web 应用程序开发需求。无论是简单的网站还是复杂的企业级系统,Django 都能提供可靠的支持,帮助开发者快速构建高质量的应用。同时,其活跃的社区和丰富的资源也为开发者在项目实施过程中提供了有力的保障。
|
2月前
|
SQL 安全 网络安全
Web应用防火墙(WAF)与数据库应用防火墙有什么区别?
Web应用防火墙(WAF)专注于Web应用系统和网站的应用层防护,可有效应对OWASP Top 10等常见攻击,防止SQL注入、CC攻击等。而数据库应用防火墙则位于应用服务器与数据库之间,提供数据库访问控制、攻击阻断、虚拟补丁等高级防护功能,直接保护数据库免受攻击。两者分别针对Web层和数据库层提供不同的安全保护。
48 4
|
2月前
|
数据库连接 Go 数据库
Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性
本文探讨了Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性;防御编程则强调在编码时考虑各种错误情况,确保程序健壮性。文章详细介绍了这两种技术在Go语言中的实现方法及其重要性,旨在提升软件质量和可靠性。
41 1
|
2月前
|
SQL 安全 前端开发
Web学习_SQL注入_联合查询注入
联合查询注入是一种强大的SQL注入攻击方式,攻击者可以通过 `UNION`语句合并多个查询的结果,从而获取敏感信息。防御SQL注入需要多层次的措施,包括使用预处理语句和参数化查询、输入验证和过滤、最小权限原则、隐藏错误信息以及使用Web应用防火墙。通过这些措施,可以有效地提高Web应用程序的安全性,防止SQL注入攻击。
67 2
|
2月前
|
数据可视化 数据库 开发者
使用Dash构建交互式Web应用程序
【10月更文挑战第16天】本文介绍了使用Python的Dash框架构建交互式Web应用程序的方法。Dash结合了Flask、React和Plotly等技术,让开发者能够快速创建功能丰富的数据可视化应用。文章从安装Dash开始,逐步介绍了创建简单应用程序、添加交互元素、部署应用程序以及集成更多功能的步骤,并提供了代码示例。通过本文,读者可以掌握使用Dash构建交互式Web应用程序的基本技巧和高级功能。
83 3
|
3月前
|
JavaScript 前端开发
如何使用Vue.js构建响应式Web应用程序
【10月更文挑战第9天】如何使用Vue.js构建响应式Web应用程序