gpt4 book ai didi

Netcat 自动响应

转载 作者:行者123 更新时间:2023-12-05 01:19:07 31 4
gpt4 key购买 nike

我有一个正在运行的树莓派,它在启动时开始监听端口 666。

'nc -k -l -p 666'

此服务器用于夺旗类型的游戏,我希望发生的情况如下。如果用户向服务器的 666 端口回显一条 secret 消息,我希望服务器用另一条服务器消息进行响应。我也希望这种情况在用户发送正确的 secret 消息时发生,无论他们发送了多少次。

客户端会发出一个 '$ echo 'secret' |数控 192.168.1.1 666'并且只有当 secret 正确时才得到响应

有人可以指导我如何正确使用服务器端 NC 命令吗?

最佳答案

假设:

  1. 你的 netcat支持-c使用连接到网络套接字的 stdin 和 stdout 启动 shell 命令的选项
  2. secret 信息只有一行

您可以尝试将以下 shell 命令传递给 nc-c选项:

read message # read the line that user sent
if [ x"$message" = x"secret message" ]; then # compare them
echo "secret response"
fi

这相当于以下命令来启动 nc :

nc -k -l -p 666 -c 'read message; [ x"$message" = x"secret message" ] && echo "secret response"'

以及以下行为:

$ echo zzz | nc localhost 666
$ echo secret message | nc localhost 666
secret response

如果您的 netcat恰好有 -c , 但没有 -k选项(如 Debian 的 netcat-traditional 所做的那样),在循环中运行它:

while true; do nc -l -p 666 -c 'read message; [ x"$message" = x"secret message" ] && echo "secret response"'; done

顺便说一下,上面的简单实现有一个拒绝服务漏洞:任何人都可以连接到它,但什么也不能发送。 read调用将被卡住等待一个字符串。阻塞和单线程,nc不会接受来自其他玩家的连接,可能带有正确的 secret 消息。

粗略的解决方法是添加 -t <timeout>脚本的 bashism:

read -t 1 message || exit 1

现在,攻击者必须在循环中主动建立大量连接,而不是只建立一个连接来阻止玩家连接到服务器。一个适当的(虽然可能有点矫枉过正)修复是编写一个多线程和/或异步服务器一次支持多个客户端,并将其托管在具有适当持久的 Internet 连接和适当数量的资源以抵御洪水攻击的地方。解决多客户端问题的正确解决方案的第一个近似值是使用 xinetd。同时运行 shell:

service ctf
{
port = 666
socket_type = stream
wait = no
user = nobody
server = /path/to/yourscript.sh
}
# assuming that yourscript.sh contains the script above with a proper shebang and is executable by everyone

关于Netcat 自动响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41522819/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com