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

news2025/1/20 21:49:28

一、前言

结合内部资料,与安全渗透部门同事合力整理的安全测试相关资料教程,全方位涵盖电商、支付、金融、网络、数据库等领域的安全测试,覆盖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.coloradmin.cn/o/925489.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IDEA启动两个Tomcat服务的方式 使用nginx进行反向代理 JMeter测试分布式情况下synchronized锁失效

目录 引出IDEA启动Tomcat两个端口的方式1.编辑配置2.添加新的端口-Dserver.port80833.service里面管理4.启动后进行测试 使用nginx进行反向代理反向代理多个端口运行日志查看启动关闭重启 分布式情况下synchronized失效synchronized锁代码启动tomcat两个端口nginx反向代理JMete…

实验七 Linux 内核移植

【实验目的】 掌握 Linux 内核配置和编译的基本方法 【实验环境】 ubuntu 14.04 发行版FS4412 实验平台交叉编译工具:arm-none-linux-gnueabi- 【注意事项】 实验步骤中以“$”开头的命令表示在 ubuntu 环境下执行,以“#”开头的命令表 示在开发板下…

C++信息学奥赛1139:整理药名

#include <iostream> #include <string> using namespace std; int main() {int n;// 输入整数ncin>>n;cin.ignore();string arr[n];// 循环读取n行字符串for (int i 0; i<n ;i){getline(cin,arr[i]);}for (int i 0; i<n ;i){for(int j0;j<arr[i]…

【JSDocvscode】使用JSDoc、在vscode中开启node调试、使用vscode编写运行Python程序

JSDoc JSDoc是JavaScript的一种注释语法&#xff0c;同时通过JSDoc注释也可以规避js弱类型中不进行代码提示的问题 图形展示JSDoc的效果&#xff1a; 上述没有进行JSDoc&#xff0c;然后我们a点什么 是没有任何提示的 上述就是加上 JSDoc的效果 常用的 vscode 其实内置了 js…

IBM Spectrum LSF License Scheduler

LSF License Scheduler 提供了两个版本: Basic Edition 和 Standard Edition。 LSF License Scheduler Basic Edition 随附于 LSF Standard Edition 和 Advanced Edition &#xff0c;并非旨在应用有关如何在集群或项目之间共享许可证的策略。 相反&#xff0c; LSF License S…

[JavaWeb]【十四】web后端开发-MAVEN高级

目录 一、分模块设计与开发 1.1 分模块设计 1.2 分模块设计-实践​编辑 1.2.1 复制老项目改为spring-boot-management 1.2.2 新建maven模块runa-pojo 1.2.2.1 将原项目pojo复制到runa-pojo模块 1.2.2.2 runa-pojo引入新依赖 1.2.2.3 删除原项目pojo包 1.2.2.4 在spring-…

postman 调用webservice

有个外部接口需要提供古老的webservice 格式接口。 1 设置格式 按照xml 格式设置。 2 消息体xml 封装 不加envelope: <soap:Envelope xmlns:soap"" target"_blank">http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <soap…

硬盘中病毒是什么原因?硬盘格式化能清除病毒吗

“我的电脑中了一个非常顽固的病毒&#xff0c;朋友建议我进行硬盘格式化来彻底清除病毒。不知道是不是真的有用&#xff0c;半信半疑下进行了硬盘格式化。当我完成操作后&#xff0c;我发现有些工作文件没有备份到。这可怎么办&#xff1f;想问下大家有没有什么方法去恢复数据…

ClickHouse进阶(二):ClickHouse MergeTree表引擎及目录解析

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术&#xff0c;IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客 &…

【VS Code插件开发】消息通信(四)

&#x1f431; 个人主页&#xff1a;不叫猫先生&#xff0c;公众号&#xff1a;前端舵手 &#x1f64b;‍♂️ 作者简介&#xff1a;前端领域优质作者、阿里云专家博主&#xff0c;共同学习共同进步&#xff0c;一起加油呀&#xff01; &#x1f4e2; 资料领取&#xff1a;前端…

ModaHub魔搭社区:WinPlan垂直大模型数据采集

WinPlan经营大脑数据手动提交 数据采集模版创建后,用户可手动提交数据 数据批量导入 1、第一步:上传Excel 如何选择Excel本系统的批量导入支持选择任意相关的Excel,映射到数据采集模版的各列,即可实现批量导入;相关Excel可以是自行维护的相关数据、或从其他业务系统导出…

【C语言】文件操作 -- 详解

一、什么是文件 磁盘上的文件是文件。 1、为什么要使用文件 举个例子&#xff0c;当我们想实现一个 “通讯录” 程序时&#xff0c;在通讯录中新建联系人、删除联系人等一系列操作&#xff0c;此时的数据存储于内存中&#xff0c;程序退出后所有数据都会随之消失。为了让通讯录…

vue-admin-template实现按钮级控制

这里记录一下使用大佬的模板vue-admin-template&#xff0c;实现按钮级别控制 实现的思路&#xff1a;用户登录之后&#xff0c;返回用户详细信息(将用户的所有权限码发送给前端)&#xff0c;然后将权限码保存在全局状态管理对象中&#xff0c;然后在组件中进行判断是否显示 最…

JAVA学习-愚见

JAVA学习-愚见 分享一下Java的学习路线&#xff0c;仅供参考【本人亲测&#xff0c;真实有效】 1、尽可能推荐较新的课程 2、大部分视频在B站上直接搜关键词就行【自学&#xff0c;B大的学生】 文章目录 JAVA学习-愚见前期准备Java基础课程练手项目 数据库JavaWeb前端基础 Vue…

Rancher2.5.9版本证书更新

一、环境 主机名IP地址操作系统rancher版本K8s-Master192.168.10.236Centos 72.5.9 二、更新证书 1、查看当前证书到期时间 2、进行证书轮换 [rootK8s-Master ~]# docker ps |grep rancher/rancher d581da2b7c4e rancher/rancher:v2.5.9 &q…

ARM汇编【4】:CONDITIONAL EXECUTION

我们在讨论消费品安全标准登记册时已经简要地谈到了条件的主题。我们在程序运行时使用条件来控制程序流&#xff0c;通常是通过跳转&#xff08;分支&#xff09;或仅在满足条件时执行某些指令。该条件被描述为CPSR寄存器中特定位的状态。这些比特根据一些指令的结果不时地变化…

结构体指针和结构体数组指针

结构体指针和结构体数组指针是不同的类型。 结构体指针定义&#xff1a;Student *stu 结构体指针的步长是一个结构体的大小&#xff1b; 结构体数组指针定义&#xff1a;Student (*stu)[] 结构体数组指针的步长是整个结构体数组的大小。 例程&#xff1a; #include <stdio…

机器学习理论笔记(二):数据集划分以及模型选择

文章目录 1 前言2 经验误差与过拟合3 训练集与测试集的划分方法3.1 留出法&#xff08;Hold-out&#xff09;3.2 交叉验证法&#xff08;Cross Validation&#xff09;3.3 自助法&#xff08;Bootstrap&#xff09; 4 调参与最终模型5 结语 1 前言 欢迎来到蓝色是天的机器学习…

java八股文面试[java基础]——面向对象特点

三大特点&#xff1a; 封装 继承 多态 面试题&#xff1a;java如何实现多继承&#xff08;除了使用接口之外&#xff09; 实现多继承有三个方法&#xff1a; 多层继承内部类接口 参考 java实现多继承的三种方式 多层继承 ​如果要直接继承类&#xff0c;子类是不可以直接多…

微信小程序的汽车租赁系统的l9k0e

随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&#xf…