如果我编写一个程序来打开 TCP 端口并运行,比如说一个回显服务器,那么有人会怎么做?有人可以访问我系统上的数据吗?或者打开端口还有其他风险吗?
答案1
这取决于程序编写得如何以及服务器程序以何种凭据运行。例如,假设您分配了一个固定长度的缓冲区来从套接字读取数据,然后您读取的数据超过了分配的大小,那么就有可能编写一个服务器请求,该请求会超出堆栈上的缓冲区并覆盖返回地址。此时,黑客可以将返回地址重新指向(超出)缓冲区,该缓冲区可能包含实际代码。然后,如果您的服务器程序以 root/管理员身份运行,您将允许在该上下文中执行代码。
答案2
如果您的程序存在漏洞,黑客可能会以程序权限在您的系统上执行代码。或者他可能会发起 DoS 攻击(您的程序会消耗所有 CPU、内存或磁盘空间,所有系统都会停止运行并崩溃 :-))。
过去,人们还可以在 OS TCP/IP 堆栈中找到错误并加以利用。因此,即使你的程序是完美的,也有可能因开放端口而陷入麻烦。不过,我已经有一段时间没有听说过这样的错误了。