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.rhkb.cn/news/108841.html

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

相关文章

PHP8的匿名函数-PHP8知识详解

php 8引入了匿名函数(Anonymous Functions),它是一种创建短生命周期的函数,不需要命名,并且可以在其作用域内直接使用。以下是在PHP 8中使用匿名函数的知识要点: 1、创建匿名函数,语法格式如下&…

利用tidevice+mysql+grafana实现ios性能测试

利用tidevicemysqlgrafana实现ios性能测试 1.什么是tidevice? tidevice是一个可以和ios设备进行通信的工具,提供以下功能: 截图获取手机信息ipa包的安装和卸载根据bundleID 启动和停止应用列出安装应用信息模拟Xcode运行XCTest&#xff0c…

kafka-python 消费者消费不到消息

排除步骤1: 使用group_id”consumer_group_id_001“ 和 auto_offset_reset"earliest" from kafka import KafkaConsumerconsumer KafkaConsumer(bootstrap_servers["dev-kafka01.test.xxx.cloud:9092"],enable_auto_commitTrue, auto_commit…

网络直播源码UDP协议搭建:为平台注入一份力量

网络直播源码中的UDP协议的定义: UDP协议又名用户数据报协议,是一种轻量级、无连接的协议。在网络直播源码平台中,UDP协议有着高速传输与实时性的能力,尤其是在网络直播源码实时性要求较高的场景,UDP协议的应用有着重要…

Vue脚手架中安装ElementUi

目录 ElementUi简介: ElementUi下载: npm 安装: 引入ElementUi: 测试是否引入成功: Element-ui官网:组件 | Element ElementUi简介: ElementUi,是由国内的饿了么团队开发并开源的一套为开…

【android12-linux-5.1】【ST芯片】HAL移植后配置文件生成报错

根据ST官方源码移植HAL源码后,执行readme指示中的生成配置文件指令时报错ST_HAL_ANDROID_VERSION未定义之类,应该是编译环境参数问题。makefile文件中是自动识别配置的,参数不祥就会报错,这里最快的解决方案是查询确定自己android…

xfs ext4 结合lvm 扩容、缩容 —— 筑梦之路

ext4 文件系统扩容、缩容操作 扩容系统根分区 根文件系统在 /dev/VolGroup/lv_root 逻辑卷上,文件系统类型为ext4,大小为10G,现在要将其扩容成20G。 给空闲空间分区# 调整分区类型为LVM,也就是8e类型 fdisk /dev/sdb# 选定分区后使…

netdata监控服务器主机(包括Docker容器)

效果 Docker部署 创建挂载目录 mkdir -p /data/netdata/{netdatacache,netdatalib}docker运行 docker run -d --namenetdata \-p 19999:19999 \-v /data/netdata/netdatalib:/var/lib/netdata \-v /data/netdata/netdatacache:/var/cache/netdata \-v /etc/passwd:/host/etc…

华为eNSP模拟器中,路由器如何添加serial接口

在ensp模拟器中新建拓扑后,添加2个路由器。 在路由器图标上单击鼠标右键,选择设置选项。 在【视图】选项卡的【eNSP支持的接口卡】窗口查找serial接口卡。 选择2SA接口卡,将其拖动到路由器空置的卡槽位。 如上图所示,已经完成路由…

客户案例:中圣科技—CAC2.0防范盗号威胁,加固安全防线

客户背景 中圣科技(江苏)股份有限公司(以下简称“中圣科技”),是一家以技术研发为驱动,以清洁能源核心成套装备和节能环保工程服务为支撑的科技创新型企业。其以南京为核心运营基地,与当地政府…

CRM系统的个性化定制如何打造?

就像没有两片相同的叶子那样,每家企业都有自己独特的业务和需求,更需要一个能够适应自身情况的CRM系统。那么,如何打造个性化CRM系统呢?下面我们以Zoho CRM为例,聊聊CRM的个性化定制。 多页面布局: Zoho …

基于Jenkins构建生产CICD环境(第二篇)

基于Jenkins自动打包并部署Tomcat环境 传统网站部署的流程 在运维过程中,网站部署是运维的工作之一。传统的网站部署的流程大致分为:需求分 析-->原型设计-->开发代码-->提交代码-->内网部署-->内网测试-->确认上线-->备份数据-->外网更新…

学习创建第一个 React 项目

目标 本篇的目标是配置好基础的环境并创建出第一个 React 项目。 由于之前没接触过相关的知识,所以还需要了解其依赖的一些概念。 步骤主要参考First React app using create-react-app | VS code | npx | npm - YouTube 0. 简单了解相关概念 JavaScript 一种语…

nginx服务与调优

一、nginx概述: 1.Nginx简介: Nginx是一个高性能的HTTP和反向代理服务器。是一款轻量级的高性能的web服务器/反向代理服 务器/电子邮件(IMAP/POP3)代理服务器,单台物理服务器可支持30 000~50 000个并发请求…

httpd协议与apache

1.http 相关概念 HTTP是处于应用层的协议,使用TCP传输层协议进行可靠的传送。因此,需要特别提醒的是,万维网是基于因特网的一种广泛因特网应用系统,且万维网采用的是HTTP(80/TCP)和 HTTPS(443/…

Exploring Unreal Engine New Free Archviz Explorer Project 视频笔记

链接: https://www.bilibili.com/video/BV1Q34y1Z7he/ 场景中没有太阳,也没有定向光 该蓝图用来控制光线的显示 删除这个蓝图 添加这个蓝图 顶部会出现时间滑块 该项目还有扩展插件,用户可以自由下载 它是由一个8k的卫星图做的地形底图 …

js中?.、??、??=的用法及使用场景

上面这个错误,相信前端开发工程师应该经常遇到吧,要么是自己考虑不全造成的,要么是后端开发人员丢失数据或者传输错误数据类型造成的。因此对数据访问时的非空判断就变成了一件很繁琐且重要的事情,下面就介绍ES6一些新的语法来方便…

Kali 软件管理

kali 更新 1. 查看发行版本 ┌──(root㉿kali)-[~] └─# lsb_release -a No LSB modules are available. Distributor ID: Kali Description: Kali GNU/Linux Rolling Release: 2023.2 Codename: kali-rolling2. 查看内核版本 ┌──(root㉿kali)-[~] └─…

Linux常用命令——depmod命令

在线Linux命令查询工具 depmod 分析可载入模块的相依性 补充说明 depmod命令可产生模块依赖的映射文件,在构建嵌入式系统时,需要由这个命令来生成相应的文件,由modprobe使用。 语法 depmod(选项)选项 -a或--all:分析所有可…

32、启用 HTTP 响应压缩和编程式配置Web应用

★ 启用HTTP压缩 就是前端页面如果改动的比较多,那么响应就会比较慢,可以通过设置HTTP响应压缩来提高响应,如果前端改动少,那么就不需要启动这个响应压缩。 目的:为了提高HTTP响应数据在网络上的传输效率。▲ 设置如…