Netcat自动回复

时间:2017-01-07 15:03:17

标签: netcat

我有一个覆盆子pi运行,在启动时开始侦听端口666。

'nc -k -l -p 666'

此服务器用于捕获旗帜类型的游戏,我想要发生的事情如下。如果用户向服务器的666端口发送一条秘密消息,我希望服务器使用另一条服务器消息进行响应。我也希望无论用户多少次发送正确的秘密消息,都会发生这种情况。

客户端会发出'$ echo'秘密'| nc 192.168.1.1 666' 只有在秘密正确的情况下才能获得回复

有人可以指导我如何纠正服务器端的NC命令吗?

1 个答案:

答案 0 :(得分:2)

假设:

  1. 您的netcat支持-c选项,该选项使用连接到网络套接字的stdin和stdout启动shell命令
  2. 秘密消息正好是一行
  3. 您可以尝试将以下shell命令传递给nc的{​​{1}}选项:

    -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选项(如Debian的netcat-traditional所做的那样),请循环运行:

    -k

    顺便说一句,上面的天真实现有一个拒绝服务漏洞:任何人都可以连接到它,但什么都不发送。 while true; do nc -l -p 666 -c 'read message; [ x"$message" = x"secret message" ] && echo "secret response"'; done 调用将等待字符串。作为阻止和单线程,read将不接受来自其他玩家的连接,可能使用正确的秘密消息。

    对此的粗略修正是将nc基础添加到脚本中:

    -t <timeout>

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

    xinetd
相关问题