【应急响应】当netstat、lsof等命令失效时如何找到占用某端口的pid?

admin 2024年2月26日13:48:54评论6 views字数 1493阅读4分58秒阅读模式

简约大气标题

本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者及本公众号不为此承担任何责任。

场景还原

在服务器遭受入侵时,一些rootkit往往会通过劫持、替换等方式让netstat、lsof、ps等指令失效,这加大了应急响应的难度。

当我们发现服务器端口被占用,而这些常用指令无法使用时,可以通过Linux系统的proc文件系统来帮助我们跳过这些指令,找到端口占用对应的进程,帮助我们进行应急响应。

【应急响应】当netstat、lsof等命令失效时如何找到占用某端口的pid?

利用proc文件系统找到进程号

【应急响应】当netstat、lsof等命令失效时如何找到占用某端口的pid?

可以通过读取这两个文件来确定占用端口的pid:

  • /proc/net/tcp
  • /proc/net/udp

这两个文件是 Linux /proc 文件系统中的两个特殊文件,用来展示系统的网络信息。分别包含有关当前TCP和UDP网络连接的信息,以及与这些连接相关的各种统计数据。
一个典型的 /proc/net/tcp/proc/net/udp 文件的每一行代表一个活跃的连接或监听端口,并包含以下列:

  • sl: 套接字的内部编号。
  • local_address: 本地端的IP地址和端口号,显示为16进制的小端格式。
  • rem_address: 远程端的IP地址和端口号,也显示为16进制的小端格式。
  • st: 套接字的状态,用16进制表示。
  • tx_queue:rx_queue: 发送队列和接收队列的大小。用于表示正在传输的数据量,并可能包含未确认的数据段。
  • tr:tm->when: 计时器状态和时间信息。
  • retrnsmt: 重试计数/超时信息。
  • uid: 打开套接字的用户ID。
  • timeout: 超时值。
  • inode: 与套接字相关的inode。每个inode与文件系统中的一个唯一位置相关联。
  • 额外的列,如:引用计数、指向套接字结构的指针、协议特定的记分板索引,等等,这些信息对于内核或网络编程人员可能是有用的。

【应急响应】当netstat、lsof等命令失效时如何找到占用某端口的pid?
我们要检查是否存在80,443端口,就需要先计算出80和443的16进制小端形式,分别为:

  • 80 - 0050
  • 443 - 01BB

所以查询指令是:

  • grep ':0050 ' /proc/net/tcp grep ':01BB ' /proc/net/tcp
  • grep ':01BB ' /proc/net/tcp grep ':01BB ' /proc/net/tcp

会查询到占用的inode号:
【应急响应】当netstat、lsof等命令失效时如何找到占用某端口的pid?
图,占用的inode为91391206
然后创建一个脚本,填入如下内容,记得把your_inode改为实际的inode号:

for pid in $(ls /proc/ | grep '^[0-9]*$'); do    if ls -l /proc/$pid/fd/* 2> /dev/null | grep -q "socket:[your_inode]"; then        echo "PID: $pid"    fidone

就可以找到了:
【应急响应】当netstat、lsof等命令失效时如何找到占用某端口的pid?

【应急响应】当netstat、lsof等命令失效时如何找到占用某端口的pid?

原理

【应急响应】当netstat、lsof等命令失效时如何找到占用某端口的pid?

/proc 是一个虚拟文件系统,它提供了一个接口来访问内核数据结构。它不包含实际的文件,而是在访问时动态生成文件内容。在 /proc/[PID]/fd/ 目录中,可以找到代表进程打开的文件描述符的符号链接。对于网络套接字,这些链接指向形如 socket:[inode号] 的条目。
【应急响应】当netstat、lsof等命令失效时如何找到占用某端口的pid?

而/proc/net/tcp文件列出了系统中所有活动的TCP连接的状态,其中包括本地和远程的IP地址和端口号,TCP状态代码以及每个连接的inode号。这个inode表示内核中TCP连接的唯一标识,使得操作系统可以通过inode来追踪每个网络连接的具体信息。
将两者信息串联,即可通过proc文件系统找到连接对应的pid了。




原文始发于微信公众号(赛博安全狗):【应急响应】当netstat、lsof等命令失效时如何找到占用某端口的pid?

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月26日13:48:54
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【应急响应】当netstat、lsof等命令失效时如何找到占用某端口的pid?http://cn-sec.com/archives/2525794.html

发表评论

匿名网友 填写信息