隨筆 - 303  文章 - 883  trackbacks - 0
          <2007年2月>
          28293031123
          45678910
          11121314151617
          18192021222324
          25262728123
          45678910

          歡迎光臨! 
          閑聊 QQ:1074961813

          隨筆分類(357)

          我管理的群

          公共blog

          • n維空間
          • Email : java3d@126.com 群 : 12999758

          參與管理的論壇

          好友的blog

          我的其他blog

          朋友的網站

          搜索

          •  

          最新評論

          信息來源:酷客天堂
          文章作者: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


          地震讓大伙知道:居安思危,才是生存之道。
          posted on 2007-02-22 10:15 小尋 閱讀(1556) 評論(0)  編輯  收藏 所屬分類: database入侵反入侵
          主站蜘蛛池模板: 樟树市| 高州市| 仪征市| 阿鲁科尔沁旗| 河北省| 西贡区| 新河县| 东乡族自治县| 新兴县| 织金县| 文山县| 凌海市| 方山县| 安庆市| 齐齐哈尔市| 哈尔滨市| 双城市| 昆山市| 清水河县| 德清县| 宿迁市| 定边县| 阳新县| 山阴县| 兴业县| 崇仁县| 桓仁| 社旗县| 化隆| 神农架林区| 喀喇沁旗| 博白县| 独山县| 北川| 珲春市| 儋州市| 临潭县| 扎赉特旗| 甘孜| 汾西县| 杭锦旗|