Web安全测试(三):SQL注入漏洞

一、前言

结合内部资料,与安全渗透部门同事合力整理的安全测试相关资料教程,全方位涵盖电商、支付、金融、网络、数据库等领域的安全测试,覆盖Web、APP、中间件、内外网、Linux、Windows多个平台。学完后一定能成为安全大佬!
全部文章请访问专栏:《全栈安全测试教程(0基础)》


文章目录

    • 一、前言
    • SQL注入
      • 1)什么是SQL注入
      • 2)SQL注入漏洞对于数据安全的影响
      • 3)SQL注入漏洞的方法
      • 4)SQL注入类型
      • 5)各个数据库注入方式
      • 6)如何预防SQL注入
      • 7)SQL注入工具


SQL注入

1)什么是SQL注入

所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行指定的SQL语句。具体来说,它是利用现有应用程序,将SQL语句注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入SQL语句得到一个存在安全漏洞的网站上的数据,而不是按照设计者意图去执行SQL语句。应用为了和数据库进行沟通完成必要的管理和存储工作,必须和数据库保留一种接口。目前的数据库一般都是提供api以支持管理,应用使用底层开发语言如 Php,Java,asp,Python与这些api进行通讯。对于数据库的操作,目前普遍使用一种SQL语言(Structured Query Language语言,SQL语言的功能包括查询、操纵、定义和控制,是一个综合的、通用的关系数据库语言,同时又是一种高度非过程化的语言,只要求用户 指出做什么而不需要指出怎么做),SQL作为字符串通过API传入给数据库,数据库将查询的结果返回,数据库自身是无法分辨传入的SQL是合法的还是不合 法的,它完全信任传入的数据,如果传入的SQL语句被恶意用户控制或者篡改,将导致数据库以当前调用者的身份执行预期之外的命令并且返回结果,导致安全问题。

2)SQL注入漏洞对于数据安全的影响

SQL注入漏洞会:
可读取/修改数据库中的库和表

  1. 获取用户的账号,密码(可能被加密过),邮箱,联系方式
  2. 信用卡信息
  3. 修改产品价格
  4. 删除数据

可执行系统命令

  1. 修改权限,获取系统管理员权限
  2. 修改任意文件
  3. 安装后门

SQL注入原理如下:

在这里插入图片描述

3)SQL注入漏洞的方法

下图是一个常见的登录页面:

在这里插入图片描述
点击“submit”之后,web应用会执行:

  1. 接收发送的POST请求
  2. 获取用户名和密码:(bart, simpson)
  3. 构建SQL语句:select * from users where username = 'bart' and password = 'simpson';
  4. 发送给数据库服务器来验证

这个时候,我们可以对username进行变化

  1. 输入的用户名不是简单的bart,而是 bart’ and 1=1; –
  2. 这样整个语句变成如下:
    select * from users where username = 'bart' and 1=1; -- ' and password = 'simpson';
  3. 这个时候,–后面的都会变成注释,不用密码就能进行登录。

4)SQL注入类型

简单注入(simple SQL injection)

  1. 永真式:最后加入 or 1=1 来保证无论如何都能获取数据。
  2. 错误语句:让Web应用构造错误的SQL语句来抛异常,来判断数据库类型
  3. 结束注释:使用注释符注释剩余语句
  4. 联合查询:使用union all,后面可以写我要查询的真正语句

盲注(Blind SQL injection)

  1. 一般我们可以根据返回数据获取我们想要的信息。
  2. 但一些页面,我们是获取不到详细信息。信息只有正确或不正确。

5)各个数据库注入方式

  1. 注释符: --(MSSQL, MySQL), #(MySQL), /comment/(MySQL)
  2. 单行用分号隔开,运行多个SQL语句:MSSQL
  3. 判断(IF,ELSE语句)
    MySQL:IF(condition,true-part,false-part) SELECT IF(1=1,'true','false')
    MSSQL:IF condition true-part ELSE false-part IF (1=1) SELECT 'true' ELSE SELECT 'false'
    Oracle:BEGIN IF condition THEN true-part; ELSE false-part; END IF; END; BEGIN IF (1=1) THEN dbms_lock.sleep(3); ELSE dbms_lock.sleep(0); END IF; END;
  4. 字符串链接:
    MSSQL:+
    MySQL,Oracle: ||

示例:
在DVWA,我们可以进行测试:

简单注入:

  1. 1’ and 1=1; # , 1’ and 1=1; # 判断是否可以被注入
  2. 1’ or 1=1; # 来尝试获取全部账号信息
  3. 1’ union all select 1, 2; # 来判断可以获取的参数个数
  4. 1’ union all select 1,(@@version); #来获取数据库版本
  5. 1’ union all select 1,(database()); #获取数据库名称
  6. 1’ union all select 1, group_concat(column_name) from information_schema.columns where table_name=‘users’ ; #获取表所有列名

6)如何预防SQL注入

数据库可以运行系统命令

  1. 用最小化权限的账户启动数据库
  2. 进制让数据库执行系统命令

连接数据库的用户权限过大

  1. 使用IDS,WAF等监控是否有异常操作
  2. 连接数据库的用户权限最小化

错误信息返回过多的信息

  1. 统一管理错误信息
  2. 禁止向用户提供错误信息

在服务器未进行过滤

  1. 过滤所有客户端数据
  2. 审核数据

在这里插入图片描述

7)SQL注入工具

SQLMAP
功能强大
界面不友好
AWVS/APPScan/WebInspect
可以查找各种类型的漏洞
速度较慢

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/87240.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Visual Studio软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 Visual Studio是微软公司开发的一款集成开发环境(IDE),广泛应用于Windows平台上的应用程序和Web应用程序的开发。以下是Visual Studio软件的主要特点和功能: 集成开发环境&#x…

MySQL—buffer pool

一、buffer pool的介绍 Buffer pool是什么 一个内存区域,为了提⾼数据库的性能,数据库操作数据的时候,把硬盘上的数据加载到buffer pool,不直接和硬盘打交道,操作的是 buffer pool的数据,数据库的增删改查…

基于Ubuntu坏境下的Suricata坏境搭建

目录 Suricata环境安装 第一步、在 Ubuntu 端点安装 Suricata 1、加入Suricata源 2、更新安装包 3、下载SuricataSuricata 第二步、下载并提取新兴威胁 Suricata 规则集 1、在tmp文件夹下载 Suricata 规则集 如果发现未安装curl,使用apt安装即可:…

基于MATLAB/Simulink的三相并网逆变器dq阻抗建模及扫频仿真

目录 整体系统介绍理论模型MATLAB实现 基于Simulink的阻抗扫频仿真整体思路注意事项流程框图 其他 本文主要介绍三相并网逆变器dq阻抗建模的相关知识,和大家分享一下怎么使用MATLAB/Simulink来进行理论模型的搭建以及如何通过扫频获取阻抗模型,一方面是给…

树的介绍(C语言版)

前言 在数据结构中树是一种很重要的数据结构,很多其他的数据结构和算法都是通过树衍生出来的,比如:堆,AVL树,红黑色等本质上都是一棵树,他们只是树的一种特殊结构,还有其他比如linux系统的文件系…

R-Meta分析核心技术教程

详情点击链接:全流程R-Meta分析核心技术教程 一,Meta分析的选题与检索 1、Meta分析的选题与文献检索 1)什么是Meta分析 2)Meta分析的选题策略 3)精确检索策略,如何检索全、检索准 4)文献的管理与清洗,如何制定文献纳入排除标准 …

windows下Mysql安装配置教程

Mysql下载 在官网下载mysql community Server https://dev.mysql.com/downloads/mysql/ 可以选择下载压缩包或者MSI安装程序 使用压缩包安装 MySQL 压缩包安装通常需要以下步骤: 1. 下载 MySQL 安装包 你可以从 MySQL 官网上下载适合你系统的 MySQL 安装包&am…

人工智能在机器学习中的八大应用领域

文章目录 1. 自然语言处理(NLP)2. 图像识别与计算机视觉3. 医疗诊断与影像分析4. 金融风险管理5. 预测与推荐系统6. 制造业和物联网7. 能源管理与环境保护8. 决策支持与智能分析结论 🎉欢迎来到AIGC人工智能专栏~探索人工智能在机器学习中的八…

开始MySQL之路——MySQL的DataGrip图形化界面

下载DataGrip 下载地址:Download DataGrip: Cross-Platform IDE for Databases & SQL 安装DataGrip 准备好一个文件夹,不要中文和空格 C:\Develop\DataGrip 激活DataGrip 激活码: VPQ9LWBJ0Z-eyJsaWNlbnNlSWQiOiJWUFE5TFdCSjBaIiwibGl…

性能优化之分库分表

1、什么是分库分表 1.1、分表 将同一个库中的一张表(比如SPU表)按某种方式(垂直拆分、水平拆分)拆分成SPU1、SPU2、SPU3、SPU4…等若干张表,如下图所示: 1.2、分库 在表数据不变的情况下,对…

多线程(二)

一.关于线程的常用操作 1.启动线程 run(): 对于run方法的覆写只是指定线程要做的任务清单,而不是真正的启动线程 start(): start()方法才是真正的在底层创建出一个线程,并且启动 2.中断线程 1.通过共享的标记来中断 package demo; impor…

AcWing 898. 数字三角形 (每日一题)

大家好 我是寸铁 希望这篇题解对你有用,麻烦动动手指点个赞或关注,感谢您的关注 注意 像数组下标出现i-1的,在循环的时候从i1开始。 关于0x3f3f3f3f和Integer.MAX_VALUE 0x3f3f3f3f:1061109567 Integer.MAX_VALUE:2147483647 在选用Integ…