"黑客"通往5个字符的远程shell

J.-*_* C. 11 security bash shell

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

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

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

当套接字接收到某些东西时,守护进程获取前5个字符并在shell中启动它们.

例如,如果我发送cat file,守护进程将cat f在shell中启动该命令.没有响应发送,所以我无法知道命令的结果.

目标是读取包含该标志的文件.

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

$ nc 1.2.3.4 12345
4<>a

$ nc 1.2.3.4 12345
sh<&4
sh>&4
cat flag
The flag is _FLAG_
Run Code Online (Sandbox Code Playgroud)

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

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

Hav*_*ard 9

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

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

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

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

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

然后键入sh>&4以打开另一个sh内部的新级别,说它应该将所有输出推送到文件描述符.诀窍完成了!双向沟通.