Title

每日一句

sqlserver学习

一、什么是关系型和非关系型数据库,两者都包含那种数据库

1、关系型数据库

关系型数据库是指采用了关系模型来组织数据的数据库。简单来说,关系模式就是二维表格模型。

常见关系型数据库管理系统(ORDBMS):

Oracle、MySql、Microsoft SQL Server、 SQLite、PostgreSQL、IBM DB2

2、非关系型数据库

非关系型数据库又被称为 NoSQL(Not Only SQL ),意为不仅仅是 SQL。通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定,常用于存储非结构化的数据。

常见非关系型数据库管理系统:

键值数据库:Redis、Memcached、Riak 列族数据库:Bigtable、HBase、Cassandra

文档数据库:MongoDB、CouchDB、MarkLogid 图形数据库:Neo4j、InfoGrid

二、MSsql数据库的学习

1、linux安装mssql参考

https://learn.microsoft.com/zh-cn/sql/linux/quickstart-install-connect-red-hat?view=sql-server-linux-ver15&preserve-view=true

MSSQL(MicroSoft SQL Server数据库),是微软开发的关系型数据库管理系统DBMS,是一个较大型的数据库,提供数据库的从服务器到终端的完整的解决方案,数据库管理系统SSMS(SQL Server Managerment Studio),是一个用于建立、使用和维护数据库的集成开发环境。 端口号:1433

命令行登录

系统默认数据库

mssql新安装后默认有四个数据库

(1)master:master 数据库记录 SQL Server 系统的所有系统级信息。 这包括实例范围的元数据(例如登录帐户)、端点、链接服务器和系统配置设置。 在 SQL Server中,系统对象不再存储在 master 数据库中,而是存储在 Resource 数据库中。 此外, master 数据库还记录了所有其他数据库的存在、数据库文件的位置以及 SQL Server的初始化信息。 因此,如果 SQL Server master 数据库不可用,则 无法启动。

(2)model 数据库用于在 SQL Server 实例上创建所有数据库的模板。 因为每次启动 时都会创建 tempdb SQL Server ,所以 model 数据库必须始终存在于 SQL Server 系统中。 model 数据库的全部内容(包括数据库选项)都会被复制到新的数据库。 启动期间,也可使用 model 数据库的某些设置创建新的 tempdb ,因此 model 数据库必须始终存在于 SQL Server 系统中。

model 的用法:当发出 CREATE DATABASE 语句时,将通过复制 model 数据库中的内容来创建数据库的第一部分, 然后用空页填充新数据库的剩余部分。如果修改 model 数据库,之后创建的所有数据库都将继承这些修改

(3)msdb 数据库由SQL Server 代理用于计划警报和作业,以及其他功能。

(4)tempdb显式创建的临时用户对象。 它们包括全局或局部临时表及索引、临时存储过程、表变量、表值函数返回的表或游标。

tempdb 中的操作是最小日志记录操作,以便回滚事务。 每次启动 SQL Server 时都会重新创建 tempdb,从而在系统启动时总是具有一个干净的数据库副本。 在断开联接时会自动删除临时表和存储过程,并且在系统关闭后没有活动连接。tempdb 不会有什么内容从 SQL Server 的一个会话保存到另一个会话。 不允许对 tempdb 执行备份和还原操作。

Sql Server中创建数据库中默认表的作用

2.MSsql数据类型

包括系统数据类型和用户自定义数据类型

其中系统数据类型有;

(1)数字型

整型

浮点型

float [ (n) ] 其中 n 为用于存储 float 数值尾数的位数(以科学记数法表示),因此可以确定精度和存储大小 。 如果指定了 n,则它必须是介于 1 和 53 之间的某个值 。 n 的默认值为 53 。

(2)字符型

char [ ( n ) ] 固定大小字符串数据 。 n 用于定义字符串大小(以字节为单位),并且它必须为 1 到 8,000 之间的值 。

varchar [ ( n | max ) ] 可变大小字符串数据 。 使用 n 定义字符串大小(以字节为单位),可以是介于 1 和 8,000 之间的值;或使用 max 指明列约束大小上限为最大存储 2^31-1 个字节 (2GB)。

nchar [ ( n ) ]

固定大小字符串数据。 n 用于定义字符串大小(以双字节为单位),并且它必须为 1 到 4,000 之间的值。 存储大小为 n 字节的两倍。

二进制

binary [ ( n ) ] 长度为 n 字节的固定长度二进制数据,其中 n 是从 1 到 8,000 的值。 存储大小为 n 字节。

varbinary [ ( n | max) ] 可变长度二进制数据。 n 的取值范围为 1 至 8,000。 max 指示最大存储大小是 2^31-1 个字节。

(3)日期

date

datetime用于定义一个与采用 24 小时制并带有秒小数部分的一日内时间相组合的日期。

time定义一天中的某个时间。 此时间不能感知时区且基于 24 小时制

3.创建数据库和表

创建三张表

student表

创建表语句

create table 数据库.模式.表名(

字段名 类型 约束

course表

sc表

查询当前数据库的表名

添加一个字段

alter student add sage smallint;

 

4插入数据

INSERT INTO student (Sno,Sname,Ssex,Sdept,Sage) VALUES ('201215125','张立','男','IS',19);

出现了中文乱码,解决办法:将字段的数据类型变成NCHAR,然后插入数据的时候前面加N

INSERT INTO student (Sno,Sname,Ssex,Sdept,Sage) VALUES ('201215125',N'张立',N'男',N'IS',19);

5查询数据(select)

(1)select * from Student;

(2)select Sname,Sno from Student where Sage=19;

(3)select Sname,Sno from Student union select Cno,Cname from Course;

union 查询满足的条件:

前后字段类型兼容(NULL和所有的数据类型兼容)

字段数相同

select Sname,Sno from Student union select NULL,NULL from Course;

(4)select * from Student order by 1;

(5)select @@version;查询数据库版本

select db_name();查询当前数据库

select @@servername; #查询服务名

select host_name(); #查询主机名,如果是用navicat远程连接的话,主机名是本地的名字

select user; #查询当前数据库的拥有者,结果为 dbo。dbo是每个数据库的默认用户,具有所有者权限,

全称:datebaseOwner ,即DbOwner

select substring('string',2,1) #截取给定字符串的索引为2的1个字符

select ascii('a');#获得固定字符的ascii码值

select len('string');#获取字符串的长度

select name from sysobjects where type='U' #查询当前数据库中所有表的名字

select name from testdb..sysobjects where xtype='U' #查询指定testdb数据库中表的名字

select name from testdb..syscolumns where id=(select max(id) from test..sysobjects where xtype='u' and name='SC') #查询当前数据库的指定users表的所有列的名字

(6)like匹配

6.更新操作(update)

基础语法:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

update Student set Sno = '201215124' WHERE Sdept='MA';

7.增加操作(insert)

INSERT INTO 表名称 VALUES (值1, 值2,....);

在不指定表字段的情况下values的值必须与默认字段相匹配

insert into Student values(N'201215127',N'张三',N'男',24);

ALTER TABLE 语句用于在已有的表中添加、修改或删除列。

增加字段ALTER TABLE table_name ADD column_name datatype

alter table Student add Ss int default 0;

8.删除操作(drop)

语法

drop table 表名

三、mssql的权限

sa:在搭建时,选择使用SQL Server身份验证会创建SA账户并设置密码,SA(System Administrator)表示系统管理员,在SQLServer2019之前的SA用户都是系统最高权限用户SYSTEM,但在2019版本时为普通数据库用户mssqlserver,是一个低权用户。

mssql的三种权限级别:

sa权限:数据库操作,文件管理,命令执行,注册表读取等价于system,SQLServer数据库的最高权限

db权限:文件管理,数据库操作等价于 users-administrators

public权限:数据库操作等价于 guest-users

select is_srvrolemember('sysadmin') ;#判断是不是管理员权限

select is_member('db_owner');#判断是不是db_owner权限

select is_srvrolemember('public');# 判断是否是public权限

四、文件读写操作和命令执行

1.开启xp_cmdshell插件

xp_cmdshell是Sql Server中的一个组件,默认关闭,将命令字符串作为操作系统命令 shell 执行,并以文本行的形式返回所有输出。通常在拿到sa口令之后,可以通过xp_cmdshell来进行提权,

查看是否开启xp_cmdshell

select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell'

返回1说明开启

-- To allow advanced options to be changed.  
EXECUTE sp_configure 'show advanced options', 1;  
GO  
-- To update the currently configured value for advanced options.  
RECONFIGURE;  
GO  
-- To enable the feature.  
EXECUTE sp_configure 'xp_cmdshell', 1;  
GO  
-- To update the currently configured value for this feature.  
RECONFIGURE;  
GO

利用xp_cmdshell执行命令

exec xp_cmdshell 'whoami';或execute('xp_cmdshell "whoami"') ;

EXEC sp_configure 'show advanced options', 1
RECONFIGURE
EXEC sp_configure 'xp_cmdshell',0
RECONFIGURE

2、利用xp_cmdshell

Metasploit

可以使用mssql_exec模块,它主要启用 xp_cmd shell,我们还可以设置任何 cmd 可执行命令。这里我们设置cmd命令为“ ipconfig ”

netcat

在这里,我们可以使用 netcat 在目标机器上获得反向连接。为此,我们首先需要将 netcat 二进制文件传输到 Windows 机器。为此,我们将使用 nc.exe 可执行文件。该文件位于 /usr/share/windows-binaries。 然后我们可以使用 Python one-liner 创建一个 HTTP 服务。

在这里,powershell.exe cmdlet 调用 PowerShell,然后使用 wget 命令将 netcat 下载到 具有写入权限的C:/Users/Public目录中。然后我们将使用 XP 命令 shell 执行 netcat 二进制文件来运行 cmd.exe。在端口 4444 上创建与主机 Kali 机器的反向连接。

在kali开启监听

3、写文件

(1)判断文件是否存在sys.xp_fileexist

0表示不存在,1表示存在

sys.xp_create_subdir 用于创建子目录,参数是子目录的路径:

exec master.sys.xp_create_subdir 'c:\User\root\hack'

(2)创建好目录后,就可以写文件;但是需开启xp_cmdshell组件

(3)一般思路为拿到权限后先创建一个表,然后把文件写入表,最后从表读取文件

五、用户哈希

哈希是一种特定类型的算法,可生成固定长度的输出字符串。哈希码的长度总是相同的,但它的复杂性会根据它的使用方式而有所不同,并且可能会为不同的输入字符串产生不同的哈希值。SQL Server 使用散列技术而不是加密,因为它提供了一种单方面的过程来散列数据。而且由于散列,它被逆转的机会几乎为零。从 SQL Server 2016 开始,使用的唯一哈希算法是 SHA2_512 和 SHA2_256。它为所需的输入创建 32 位或 64 位的散列。您可以通过 HashByte 函数在 SQL 服务器中创建哈希。

哈希格式:

查询所有用户的哈希

查询特定用户hash

用nmap远程哈希

nmap -p1433 --script ms-sql-dump-hashes --script-args mssql.username=sa,mssql.password=123.com@ 192.168.43.134

现在我们已经获得了哈希值,我们所要做的就是破解它们。为此,我们将使用万能的密码破解工具,即John。要对密码哈希进行反哈希,请使用以下命令:

posted @ 2022-10-07 19:54  江公  阅读(493)  评论(0编辑  收藏  举报
Title

每日一句