IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 山东大学软件学院项目实训-创新实训-山大软院网络攻防靶场实验平台(七) -> 正文阅读

[网络协议]山东大学软件学院项目实训-创新实训-山大软院网络攻防靶场实验平台(七)

目录

前言

SQL注入概述

1.1 什么叫SQL注入

1.2 SQL注入分类

1.3 SQL漏洞探测

1.4 SQL注入常用函数

1.5 SQL注入防御

环境搭建展示

?基于函数报错的SQL注入

防范


前言

这篇文章记录我搭建删除型SQL注入漏洞的环境,以及如何基于报错函数利用该漏洞进行攻击的过程。同时记录学习SQL注入漏洞以及防范措施的过程。

SQL注入概述

1.1 什么叫SQL注入

  • 程序不判断和处理用户输入数据的合法性,这使得攻击者能够在管理员不知情的情况下向Web应用程序中的预定义SQL语句添加额外的SQL语句并实施非法操作,从而欺骗数据库服务器执行未经授权的任意查询, 从而进一步获取数据信息。
  • 简而言之,SQL注入是将SQL语句包含在用户输入的字符串中,如果在设计不佳的程序中忽略检查,注入的SQL语句将被数据库服务器误认为是正常的SQL语句并运行,攻击者可以执行计划外的命令或访问未经授权的数据。

1.2 SQL注入分类

  • 按照注入点类型来分类

(1)数字型注入点
类似结构 http://xxx.com/users.php?id=1 基于此种形式的注入,一般被叫做数字型注入点,缘由是其注入点 id 类型为数字
(2)字符型注入点
类似结构 http://xxx.com/users.php?name=admin 这种形式,其注入点 name 类型为字符类型,所以叫字符型注入点
(3)搜索型注入点
这类注入主要是指在进行数据搜索时没过滤搜索参数,一般在链接地址中有 “keyword=关键字” 有的不显示在的链接地址里面,而是直接通过搜索框表单提交

  • 按照数据提交的方式来分类

(1)GET 注入
提交数据的方式是 GET , 注入点的位置在 GET 参数部分。
(2)POST 注入
使用 POST 方式提交数据,注入点位置在 POST 数据部分,常发生在表单中。
(3)Cookie 注入
HTTP 请求的时候会带上客户端的 Cookie, 注入点存在 Cookie 当中的某个字段中。
(4)HTTP 头部注入
注入点在 HTTP 请求头部的某个字段中。比如存在 User-Agent 字段中。严格讲的话,Cookie 其实应该也是算头部注入的一种形式。因为在 HTTP 请求的时候,Cookie 是头部的一个字段。

  • 按照执行效果来分类

(1)基于布尔的盲注
即可以根据返回页面判断条件真假的注入。
(2)基于时间的盲注
即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
(3)基于报错注入
即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。

1.3 SQL漏洞探测

一般来说,SQL 注入一般存在于形如:http://xxx.xxx.xxx/abc.asp?id=XX 等带有参数的 ASP 动态网页中,有时一个动态网页中可能只有一个参数,有时可能有 N 个参数,有时是整型参数,有时是字符串型参数,不能一概而论。总之只要是带有参数的动态网页并且该网页访问了数据库,那么就有可能存在 SQL 注入。

  • 1、先加单引号’、双引号"、等看看是否报错,如果报错就可能存在SQL注入漏洞了。
  • 2、还有在URL后面加 and 1=1 、 and 1=2 看页面是否显示一样,显示不一样的话,肯定存在SQL注入漏洞了。
  • 3、还有就是Timing Attack测试,也就是时间盲注。通过简单的条件语句比如 and 1=2 是无法看出异常的。在MySQL中,有一个Benchmark() 函数,它是用于测试性能的。 Benchmark(count,expr) ,这个函数执行的结果,是将表达式 expr 执行 count 次 。

因此,利用benchmark函数,可以让同一个函数执行若干次,使得结果返回的时间比平时要长,通过时间长短的变化,可以判断注入语句是否执行成功。

1.4 SQL注入常用函数

  • Version();当前 mysql 的版本
  • Database();当前网站使用的数据库
  • User();当前 MySQL 的用户
  • system_user(); 系统用户名
  • session_user();连接数据库的用户名
  • current_user;当前用户名
  • load_file();读取本地文件
  • length(str) : 返回给定字符串的长度,如 length(“string”)=6
  • substr(string,start,length) : 对于给定字符串string,从start位开始截取,截取length长度 ,如 substr(“chinese”,3,2)=“in”
  • substr()、stbstring()、mid() 三个函数的用法、功能均一致
  • concat(username):将查询到的username连在一起,默认用逗号分隔
  • concat(str1,’’,str2):将字符串str1和str2的数据查询到一起,中间用连接
  • group_concat(username) :将username数据查询在一起,用逗号连接

1.5 SQL注入防御

  • (1)关闭 SQL 错误回显
  • (2)前端输入字符白名单验证(长度、类型等)
  • (3)对输入的特殊字符使用转义处理
  • (4)SQL 操作使用 PreParedStatement
  • (5)SQL 服务运行于专门的账号,并且使用最小权限
  • (6)限制 SQL 服务的远程访问,只开放给特定开发人员
  • (7)代码审计,最有效的检测应用程序的注入风险的方法之一
  • (8)使用成熟的WAF

环境搭建展示

输入留言 点击提交

点击删除后拦截包,发现包中有messahe传递留言内容,且是GET方式,猜测是注入点,同时可以注意到传递的是字符串类型 应该是用''闭合的

构造payload

123'?or updatexml(1,concat(0x7e,database()),0)#

messahe=后面接上面的playload,用自带的url encode key编码后,空格变成了+

?

成功爆出数据库名

后台核心代码分析

@RequestMapping("delete1")
    public String sqli_delete1(@RequestParam(value = "messahe",required = false) String messahe, Model model) {

        try {
            Connection connection = dataSource.getConnection();
            Statement stmt = connection.createStatement();
            sql="delete from messages where message='"+messahe+"'";
            System.out.println(sql);
            stmt.executeUpdate(sql);

            connection.close();
            System.out.println("model:"+model);
        }catch (SQLException ex){
            System.out.println(ex);
            error = ex.toString();
            model.addAttribute("error",error);
            return "sqli_delete1";

        }


        return "sqli_delete";
    }

?没有对传入的值进行处理 直接拼接到sql语句中 导致delete型sql注入

?基于函数报错的SQL注入

?

防范

关闭后台的SQL错误回显

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-04-26 12:12:36  更:2022-04-26 12:13:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:51:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码