一、什麼是關係型和非關係型資料庫,兩者都包含那種資料庫 1、關係型資料庫 關係型資料庫是指採用了關係模型來組織數據的資料庫。簡單來說,關係模式就是二維表格模型。 常見關係型資料庫管理系統(ORDBMS): Oracle、MySql、Microsoft SQL Server、 SQLite、Postg ...
一、什麼是關係型和非關係型資料庫,兩者都包含那種資料庫
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參考
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。要對密碼哈希進行反哈希,請使用以下命令:
作者:江公 出處:http://www.cnblogs.com/-xiaopeng1/ 本文版權歸作者和博客園共有,歡迎轉載,但必須給出原文鏈接,並保留此段聲明,否則保留追究法律責任的權利。