SQL 注入攻击_2 | 学习笔记

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 快速学习 SQL 注入攻击_2

开发者学堂课程【网络安全攻防 - Web渗透测试SQL 注入攻击_2】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/630/detail/9905


SQL 注入攻击_2


内容介绍:

一、SQL 基础回顾

二、简单查询示例

三、条件查询示例

四、联合查询 UNION


一、SQL 基础回顾

SQL 注入攻击:

所谓 SQL 注入式攻击,就是输入域或页面请求的查询字符串,欺骗服务器执行恶意的 SQL 命令。

在某些表单中,用户输入的内容直接用来构造(或者影响)动态 SQL 命令,或作为存储过程的输入参数,这类表单特别容易受到 SQL 注入式攻击。


二、简单查询示例

1、当前库

dvwa dvwa.users

mysql> select user_id, first_name, last_name from users;

2、其它库

mysql.user

mysql> desc mysql. user;

mysql> select * from mysql.user;

mysql> select user, password, host from mysql. user;

3、其它库

wordpress.user

mysql> desc wordpress,.wp_users;

mysql> select * from wordpress. wp_users;

mysql> select user_login, user_pass from wordpress.wp_users


三、//条件查询示例

mysql> select user, password, host from mysql.user where user=root;

image.png

mysql> select user, password, host from mysal. user where user='root'andhost='localhost';

mysql> select user, password, host from mysal. user where

user='root' or host='localhost';

注意

column :字段或者列。row :行。clause :语句。

纯数字除外(数字不可做字段的值),不加引号是字段(列);加引号是字段的值。若关注字符串里面的值,则需使用引号(单双引号皆可使用)。

例如:

mysql> select user_id,user,password from users where user_id=1;

image.png

mysql> desc dvwa.users;

mysql> select user_id, first_name last_name from dvwa. users where first_name='yangge';

image.png

mysql> select user_id, first_name last_name from dvwa.userswherefirst_name='yangge'or1=1;

image.png

mysql 注入的前提是原来的语句不能改变,但是可以在此基础上加入成立条件。

or 条件

不需要在意前面是否成立,只要后面成立,即代码查询成立。

mysql> select user_id, first_name last_name from dvwa.userswherefirst_name='admin'and1=2;

mysql> select user_id, first_name, last_name from dvwa. users where user_id=2;

image.png

mysql> select user_id, first_name, last_name from dvwa. users where user_id=7;

image.png

mysql> select user_id, first_name, last_name from dvwa. users where user_id=7 or 1=1;

image.png


四、//联合查询 UNION

mysql> select user, password from mysql. user;

mysql> select user_ login, user_pass from wordpress.wp_users;

mysql> select user, password from mysql.user unionselectuser_login,user_passfromwordpress. wp_users;

mysql> select user, password, host from mysql. user union select user_login, user_passfrom wordpress. wp_users;

ERROR 1222 (21000): The used SELECT statements have a different number of columns

1、出现以上情况解决方法是:

添加纯数字使得前后字段数一致,补的字段在前后补都可以。

: union 查询前后字段数必须相同

mysql> select user, password, host from mysql. user union select user_login, user_pass, 3 from wordpress. wp_users;

2、为了使查验更方便,可以利用 limit 来帮助,方法如下:

mysql> select user, password, host from mysql. user union select user_login, user_pass, 3 from wordpress. wp_users limit 5;

image.png

即可查验出所求结果。

3union 前面表不是所需要的,为了提所需要的后面表,可以利用如下方法:

mysql> select user, password, host from mysql.userwhere1=2unionselectuser_login,user_pass, 3 from wordpress. wp_users limit 5;

image.png

注:因为1=2不成立,所以 union 前面代码作废,即得所查。

显示的字段名, 应当关注里面的值,此处字段名在 union 前面已显示。

4、思考:前面的查询已经写死了,如何使下面的语句成功?

mysql> select * from dvwa. users

-> union

-> select user_login, user_pass from wordpress.wp_users

ERROR 1222 (21000): The used SELECT statements have a different number of columns

当此处“*”不知道是几个字段数量时的解决方法:

猜字段数

mysql> select * from dvwa. users union select 1;

mysql> select * from dvwa. users union select 1,2;

mysql> select * from dvwa. users union select 1,2,3;

mysql> select * from dvwa. users union select 1,2,3,4;

mysql> select * from dvwa. users union select 1,2,3,4,5;

mysql> select * from dvwa. users union select 1,2,3,4,5,6;

依次叠加试验,输入到框中,验证结果为:

image.png

最后在试到“1,2,3,4,5,6”时没有报错。

mysql> select * from dvwa. users union select user_login, user_pass,1,2,3,4 fromwordpress. wp_users;

2、当最后要的结果是 user_login, user_pass 时,为了方便查验,可在 union 前面代码中添加一个不成立的算式。

例如:

mysql> select *fromdvwa.userswhere1=3unionselectuser_login,user_pass,1,2,3,4fromwordpress. wp_users;

image.png

因为1=3不成立,所有前面代码作废,即得出想要结果。

两种查询方式:

条件 or 查询:整张表。

union 查询:加一条 select 语句,可以查其他的库,其也会受到权限的限制。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
1月前
|
算法 数据挖掘 数据库
通过 SQL 快速使用 OceanBase 向量检索学习笔记
通过 SQL 快速使用 OceanBase 向量检索学习笔记
|
1月前
|
SQL 数据库
SQL 学习笔记 - 多表关系与多表查询
数据库多表关系包括一对多、多对多和一对一,常用外键关联。多表查询方式有隐式/显式内连接、外连接、子查询等,支持别名和条件筛选。子查询分为标量、列、行、表子查询,常用于复杂查询场景。
|
11月前
|
SQL 监控 安全
Flask 框架防止 SQL 注入攻击的方法
通过综合运用以上多种措施,Flask 框架可以有效地降低 SQL 注入攻击的风险,保障应用的安全稳定运行。同时,持续的安全评估和改进也是确保应用长期安全的重要环节。
433 71
|
10月前
|
SQL 安全 Java
除了Flask框架,还有哪些框架能防止SQL注入攻击?
这些框架都在安全方面有着较好的表现,通过它们的内置机制和安全特性,可以有效地降低 SQL 注入攻击的风险。然而,无论使用哪个框架,开发者都需要具备良好的安全意识,正确配置和使用框架提供的安全功能,以确保应用的安全可靠。同时,持续关注安全更新和漏洞修复也是非常重要的。
302 61
|
SQL 监控 小程序
在微信小程序中使用 Vant 时如何防止 SQL 注入攻击?
在微信小程序中使用 Vant 时如何防止 SQL 注入攻击?
405 58
|
11月前
|
SQL 安全 前端开发
Web学习_SQL注入_联合查询注入
联合查询注入是一种强大的SQL注入攻击方式,攻击者可以通过 `UNION`语句合并多个查询的结果,从而获取敏感信息。防御SQL注入需要多层次的措施,包括使用预处理语句和参数化查询、输入验证和过滤、最小权限原则、隐藏错误信息以及使用Web应用防火墙。通过这些措施,可以有效地提高Web应用程序的安全性,防止SQL注入攻击。
358 2
|
SQL 安全 数据库
惊!Python Web安全黑洞大曝光:SQL注入、XSS、CSRF,你中招了吗?
在数字化时代,Web应用的安全性至关重要。许多Python开发者在追求功能时,常忽视SQL注入、XSS和CSRF等安全威胁。本文将深入剖析这些风险并提供最佳实践:使用参数化查询预防SQL注入;通过HTML转义阻止XSS攻击;在表单中加入CSRF令牌增强安全性。遵循这些方法,可有效提升Web应用的安全防护水平,保护用户数据与隐私。安全需持续关注与改进,每个细节都至关重要。
288 5
|
11月前
|
SQL 存储 安全
什么是XSS攻击?什么是SQL注入攻击?什么是CSRF攻击?
理解并防范XSS、SQL注入和CSRF攻击是Web应用安全的基础。通过采用严格的输入验证、使用安全编码实践以及实现适当的身份验证和授权机制,可以有效防止这些常见的Web攻击,保障应用程序和用户的数据安全。
552 0
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
在Web开发领域,Python虽强大灵活,却也面临着SQL注入、XSS与CSRF等安全威胁。本文将剖析这些常见攻击手段,并提供示例代码,展示如何利用参数化查询、HTML转义及CSRF令牌等技术构建坚固防线,确保Python Web应用的安全性。安全之路永无止境,唯有不断改进方能应对挑战。
279 5
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
在Web开发领域,Python虽强大灵活,但安全挑战不容小觑。本文剖析Python Web应用中的三大安全威胁:SQL注入、XSS及CSRF,并提供防御策略。通过示例代码展示如何利用参数化查询、HTML转义与CSRF令牌构建安全防线,助您打造更安全的应用。安全是一场持久战,需不断改进优化。
178 3