Linux应急手册——常见问题的解决方法

0x01 文件无法删除

以 evil.sh文件 为例,下列提到的方法都是在常规 rwx 权限满足条件后依旧无法删除文件的情况

  1. 文件被进程占用
    lsof evil.sh

  2. 文件存在隐藏属性
    lsattr evil.sh

    一般导致无法删除的隐藏属性有两种 a 和 i 可以像图中一样使用下列命令进行取消
    chattr -a evil.sh
    chattr -i evil.sh

  3. 文件上层目录存在 SBIT 权限

    这种情况只存在于非 root 权限去删除其他用户创建的目录的情况,即使文件权限是 777也无法进行删除
    以非 root 用户 join 删除 test1 用户创建的 /tmp/test1_dir/test1.txt 为例

0x02 netstat -pantu pid处显示 -

  1. 存在隐藏挂载

    有些时候 netstat -pantu 显示 pid 处显示为 -

    可能是使用了下面的方法隐藏
    mkdir .hidden
    mount -o bind .hidden /proc/PID
    这种情况可以使用 cat /proc/$$/mountinfo 来查看挂载信息

    通过 umount /proc/PID 来取消挂载就好了

  2. 权限不够

    部分场景下,权限不够时也会显示 -

  3. 进程刚刚释放

    这是一种巧合情况,进程刚刚释放,在这一小段时间恰巧被大家捕捉到了,就可能显示为 -

0x03 ps、top 等工具无法看到恶意进程

  1. 通过挂载进行了隐藏

    有些时候 pstop 无法发现恶意进程


    可能是使用了下面的方法隐藏
    mkdir .hidden
    mount -o bind .hidden /proc/PID
    这种情况可以使用 cat /proc/$$/mountinfo 来查看挂载信息

    通过 umount /proc/PID 来取消挂载就好了

  2. ps、top 命令被替换

    检查系统完整性 (参考 后续小技巧文章 -> 0x04 系统完整性检查); or 将携带的 busybox 程序拷贝至受害系统中进行相关查询


  3. LD_PRELOAD 等方法共享库劫持

    可以看到,pstop 都不是 bash 内置命令,而且都是动态链接的文件,因此会受到 LD_PRELOAD 这类共享库劫持的影响,可以通过 busybox来实现 pstop

0x04 终端出现乱码

这里分为两种情况

  1. ssh 连接或者物理本地连接就是乱码
  2. 打开二进制文件等出现乱码,原本是正常显示的
    对于第一种情况,大概是语言显示问题,可以考虑更改语言显示,这个要让客户现场工作人员进行调整,属于是危险行为,所以这里也不给出具体的命令
    第二种情况就比较常见了,在排查过程中很可能因为误读二进制文件导致终端乱码,可能出现提示符乱码、输入内容乱码、输入内容不可见等
    如果再次获取一个终端环境,例如 ssh 或者本地打开终端非常方便,那就重新打开即可,如果再去获取终端环境较为困难,可以尝试以下方法
    注意,即使输出不可见或乱码也不要担心,正常输入即可
  1. reset

    reset 命令可以重置终端的设置,这意味着当前终端之前执行的命令会丢失,即通过上/下按键能够快速获取的命令

  2. stty sane

    stty sane 命令可以将终端设置恢复到常规模式

    执行 reset 和 stty sane 命令通常不会影响 Bash 的配置文件(如 .bashrc、.bash_profile 等),这些命令主要作用于当前终端会话的显示和输入输出设置。
    具体来说:
    reset 命令

    • 不会影响 Bash 配置文件:reset 命令不会修改或删除任何配置文件。它只是重置当前终端的状态,包括清除屏幕、重置颜色和光标位置等。
    • 重置终端状态:它会重置终端的显示模式和其他设置,但不会影响到 Bash 的配置。
    • 命令历史记录:虽然 reset 命令可能会清除当前屏幕上的命令历史显示,但不会影响 Bash 内部维护的命令历史记录文件(如 .bash_history)。
      stty sane 命令
    • 不会影响 Bash 配置文件:stty sane 命令也不会修改或删除任何配置文件。它只是将终端的各种设置恢复到默认的“正常”模式。
    • 恢复终端设置:它主要恢复终端的输入输出设置,如启用回显、启用特殊字符处理等,但不会影响到 Bash 的配置。
  3. clear

    这个没啥可说的,能 clear 的属于是幸运情况

  4. echo 字符
    echo -e '\033c'

    通过发送终端重置字符来恢复终端