news 2026/10/28 2:09:44

Kali渗透工程师必懂的27条命令链与底层原理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Kali渗透工程师必懂的27条命令链与底层原理

简介:本资源是一份面向网络安全初学者与渗透测试入门者的Kali Linux命令速查手册,聚焦Linux基础操作、系统监控、文本处理及渗透常用工具调用等核心技能,帮助用户快速掌握Kali环境下的高频命令用法,提升实战效率。资源为单文件Word文档(.docx),共1个文件,大小1.96MB,格式规范、排版清晰,便于离线查阅与打印标注。内容覆盖完整命令体系:从目录查看(ls)、路径切换(cd)、文件管理(cp/mv/touch/mkdir)到系统信息(df/free/top)、文本检索(grep/sed/awk)、权限与用户切换(su/sudo)、电源控制(shutdown/reboot)及详尽的帮助系统(man/info/whatis)等,目录层级明确,每条命令均含语法说明与典型用例。目前已有633人学习下载,是Kali入门阶段不可或缺的结构化笔记型参考资料。

1. 这不是“Linux 命令速查表”,而是 Kali 渗透工程师每天开机后前三分钟必敲的 27 条命令链

你刚装好 Kali,打开终端,第一反应是ls?第二反应是cd /usr/share/wordlists?第三反应是不是发现rockyou.txt没解压、gobuster报错找不到字典、nmap -sV扫完却连目标服务版本都对不上号——然后默默切回浏览器搜“kali 命令不生效”?别急,这不是你手生,是这份《Kali 常用命令大全.docx》根本没告诉你:哪些命令必须组合用、哪些参数在渗透场景下会反向锁死流程、哪些看似安全的默认行为其实在靶机上直接触发告警。它不是教你怎么“列出文件”,而是教你怎么在 30 秒内确认目标路径是否可写、日志是否被轮转、当前 shell 是否已被注入检测机制。适合三类人:刚考完 CEH 正在搭靶机练手的 A 同学;做红队评估时被客户限制只能用命令行交互的某公司安全顾问;还有总在 CTF Web 题里卡在“怎么把 phpinfo 页面里的 tmp 目录路径快速拼成 wget 下载链”的某高校实验室成员。它解决的不是“会不会”,而是“为什么上一条命令的结果,让下一条命令直接报 Permission denied”。


2. 从ls -al到find / -type f -name "config.php" 2>/dev/null:文件系统操作不是罗列,而是渗透路径推演

Kali 的文件系统不是普通 Linux 的镜像,它的/usr/share/下埋着 300+ 工具的字典、模板、规则库;/var/log/里藏着你刚跑过的sqlmap --batch的完整请求头;而/tmp/则是你上传的 webshell 最可能被杀软盯上的第一现场。所以ls不是看“有什么”,而是看“什么不该有”——比如ls -al /var/www/html/突然多出一个.git目录,或ls -l /etc/cron.d/里出现非 root 创建的定时任务文件。本章不讲语法,只讲这 27 条命令在真实渗透链中如何咬合。

2.1ls -al的四个必验维度:权限、时间、链接、隐藏层

ls -al是你每次进入新目录的第一眼扫描。但新手常漏掉关键信息:

ls -al /var/www/html/

输出示例:

drwxr-xr-x 3 www-data www-data 4096 Apr 12 08:22 . drwxr-xr-x 3 root root 4096 Apr 10 15:11 .. -rw-r--r-- 1 www-data www-data 123 Apr 12 08:22 index.php -rw-r--r-- 1 www-data www-data 45 Apr 12 08:22 .htaccess lrwxrwxrwx 1 root root 12 Apr 12 08:22 backup -> /tmp/backup.zip
  • 权限维度(第1列):www-data用户对index.php是rw-,但对.(当前目录)是r-x—— 意味着你无法在此目录创建文件,但可读取所有已有文件。若你正尝试上传 webshell,这一步就该立刻转向/tmp/或/dev/shm/。
  • 时间维度(第7–8列):Apr 12 08:22是修改时间(mtime),但ls -al --time=atime可查访问时间。若index.php的 atime 是Apr 12 08:22而 mtime 是Apr 10,说明有人刚访问过它——可能是管理员在调试,也可能是你的扫描器触发了日志记录。
  • 链接维度(第1列首字符l):backup -> /tmp/backup.zip是符号链接。此时执行ls -al /tmp/backup.zip若返回No such file or directory,说明链接已失效或目标被删除,但链接本身仍存在——这是常见配置错误,可被用于路径遍历(如?file=backup/../../etc/passwd)。
  • 隐藏层维度(.开头文件):.htaccess存在意味着 Apache 可能启用重写规则;若同时存在.git/,则curl http://target/.git/config可直接下载 Git 配置,暴露远程仓库地址。

提示:ls -al默认不显示文件系统类型(如是否为 tmpfs)。加-l --format=long --color=always可高亮不同文件类型,但生产环境建议禁用--color,避免 ANSI 控制符污染管道输出(如ls -al | grep "\.php"会因颜色码匹配失败)。

2.2find的渗透式用法:不只是找文件,更是找攻击面入口

find在 Kali 中绝非仅用于“找字典”。它真正的价值在于动态识别目标系统的脆弱配置。以下三条命令链,每条都来自某次真实内网横向移动:

# 【链1】找所有 world-writable 目录(可被任意用户写入) find / -type d -perm -o+w 2>/dev/null | grep -E "(tmp|var|home)" | head -10
  • 2>/dev/null屏蔽权限拒绝错误(否则满屏Permission denied);
  • grep -E "(tmp|var|home)"过滤高危路径:/tmp/是临时文件集散地,/var/www/是 Web 根目录,/home/下用户目录若可写,则可覆盖.bashrc实现持久化;
  • head -10防止遍历过久卡死,实际使用时可先限定路径:find /tmp -type d -perm -o+w 2>/dev/null。
# 【链2】找最近 24 小时内被修改的 PHP 文件(疑似 webshell) find /var/www -name "*.php" -mtime -1 -type f -ls 2>/dev/null | awk '{print $11, $14}'
  • -mtime -1表示“修改时间在 1 天内”,比-newermt "2024-04-12 00:00"更可靠(避免时区问题);
  • -ls输出详细信息,awk '{print $11, $14}'提取第11列(文件大小)和第14列(文件路径),便于快速识别异常小文件(如 32 字节的<?php system($_GET[1]);?>);
  • 若输出为空,立即执行find /var/www -name "*.php" -size -100c -type f -ls查找超小文件——webshell 常被压缩或混淆。
# 【链3】找 SUID/SGID 二进制文件(提权突破口) find / -perm -4000 -o -perm -2000 -type f 2>/dev/null | xargs ls -la 2>/dev/null | grep -E "(nmap|find|vim|bash)"
  • -perm -4000匹配 SUID(setuid),-perm -2000匹配 SGID(setgid);
  • xargs ls -la获取详细权限,grep -E筛选已知可滥用工具(如nmap --interactive可执行 shell,find / -exec sh \;可提权);
  • 注意:find / -perm -4000会遍历整个根目录,耗时长且易触发 HIDS 告警。实战中应优先查/usr/bin/和/bin/:find /usr/bin /bin -perm -4000 2>/dev/null。

2.3cp/mv/rm的渗透陷阱:复制不是搬运,而是权限继承与痕迹清除

在渗透中,cp和mv的区别远不止“是否保留原文件”。关键在于它们对文件属性(尤其是 SELinux 上下文、扩展属性)的处理方式:

# 场景:你从靶机下载了一个 config.php,想在 Kali 上分析,但发现 vim 打开后全是乱码 # 错误做法: cp config.php ~/analysis/ # 正确做法: cp --preserve=all config.php ~/analysis/ # 或更安全: cp -a config.php ~/analysis/ # -a = -pR --preserve=all
  • --preserve=all保留所有属性:模式(权限)、所有权、时间戳、SELinux 上下文、扩展属性(如security.capability);
  • 若靶机启用了 SELinux(sestatus返回enabled),而你用普通cp复制,新文件的上下文会变成unconfined_u:object_r:user_home_t:s0,导致php -l config.php报错failed to open stream: Permission denied(因为 Web 服务器进程运行在system_u:system_r:httpd_t:s0上下文,无法读取用户上下文文件);
  • mv则不同:在同一文件系统内移动时,完全不改变文件的 inode、权限、上下文;跨文件系统移动等价于cp + rm,会丢失原始属性。

再看rm的致命误区:

# 危险操作:删除日志时只删文件名,不删 inode rm /var/log/apache2/access.log # 后果:Apache 进程仍持有该文件的文件描述符(fd),日志持续写入(磁盘不释放), # 且 `lsof -p $(pgrep apache2) | grep access.log` 可恢复文件内容。 # 正确做法: echo "" > /var/log/apache2/access.log # 清空内容,保留 fd # 或彻底删除并重启服务: rm /var/log/apache2/access.log && systemctl restart apache2

注意:rm -rf在/tmp/下删除临时文件是安全的,但在/var/log/或/etc/下执行前,务必用ls -li查 inode 号,并lsof +D /var/log/确认无进程占用。


3.man/help/whatis/info四层帮助体系:为什么man find里找不到-delete参数?

Kali 的帮助系统不是单层文档,而是四层嵌套的“可信度金字塔”:whatis给定义,help给内置命令快查,man给权威接口说明,info给 GNU 项目全貌。但问题来了——当你在靶机上执行find / -name "*.sh" -delete报错find: unknown predicate '-delete',查man find却发现-delete明明写着“Delete files”。这不是文档错了,是你掉进了 Kali 帮助体系的“版本断层”。

3.1whatis:3 秒定位命令归属,避免which引发的权限幻觉

whatis不是查功能,是查“这个命令到底是谁家的孩子”:

whatis find # 输出:find (1) - search for files in a directory hierarchy whatis python # 输出:python (1) - an interpreted, interactive, object-oriented programming language whatis nmap # 输出:nmap (1) - Network Mapper
  • (1)表示这是用户命令(Section 1),对应/usr/bin/下的可执行文件;
  • 若输出为find (1p),则是 POSIX 标准命令(如/bin/find),行为更严格;
  • 关键价值:当which find返回/usr/bin/find,而whatis find显示(1p),说明你正在用 POSIX 兼容版——它不支持 GNU 扩展参数(如-delete,-printf),此时必须改用/bin/find或显式调用gnufind(如果安装)。

验证方法:

/usr/bin/find --version # 输出 GNU findutils 4.9.0 /bin/find --version # 可能报错或输出 "find: illegal option -- -"

3.2help:只对 shell 内置命令有效,cd/echo/export的救命稻草

help是 Bash/Zsh 的内置命令,只对 shell 自己实现的功能有效。例如:

help cd # 输出:cd: cd [-L|[-P]] [dir] help echo # 输出:echo: echo [-neE] [arg ...]
  • 但help find会报错find: not a shell builtin,因为find是外部程序;
  • help的优势是极快(毫秒级),且显示的是当前 shell 的真实行为(如 Zsh 的cd支持cd -<num>切换历史目录,Bash 不支持);
  • 渗透中高频使用场景:确认当前 shell 类型(echo $SHELL)后,立刻help cd查看是否支持-q(quiet 模式,不打印路径)——某些受限 shell 会禁用此选项。

3.3man:权威但需分清“谁写的 man”——Kali 的 manpage 是混合体

Kali 的man文档来源复杂:核心工具(ls,cp)用 GNU Coreutils 的 manpage;网络工具(nmap,hydra)用各自项目维护的 man;而安全工具(john,sqlmap)往往只有--help,manpage 是社区补丁。因此查man find时,必须注意页眉:

FIND(1) User Commands FIND(1)
  • FIND(1)表示 Section 1(用户命令),但括号里的1不代表版本,而是手册分区;
  • 真正关键的是页脚:GNU coreutils 8.32—— 这才是-delete参数存在的依据;
  • 若你在旧版 Kali(如 2020.1)上查man find,页脚可能是GNU findutils 4.7.0,而-delete是 4.8.0+ 引入的,此时必须升级或改用-exec rm {} \;。

查看当前 manpage 版本:

man find | head -20 | grep -i "gnu\|version" # 或直接查源文件 zcat /usr/share/man/man1/find.1.gz | head -15 | grep -i version

3.4info:GNU 工具的终极文档,但 Kali 默认不装——装了也得会读

info是 GNU 项目的原生文档格式,比 man 更结构化,支持节点跳转(如info find后按m delete直达-delete节点)。但 Kali 默认不预装info包,且多数渗透工程师从未打开过它。

安装与基础用法:

sudo apt update && sudo apt install -y info info find # 进入交互式文档 # 常用快捷键: # m + 节点名(如 m delete)→ 跳转到 delete 节点 # u → 返回上一节点 # q → 退出

为什么info find比man find更值得花 2 分钟学?因为:

  • man find的-delete描述只有一行:“Delete files.”;
  • info find的* Delete Actions::节点下明确警告:

    “The -delete action does not check whether the file is still accessible after deletion. If you use -delete on a directory that is not empty, it will fail and leave the directory intact. Use -depth to delete directories recursively.”

即:-delete对非空目录直接失败,必须配合-depth(深度优先遍历)才能递归删除。而man里完全没提这点——这就是info的不可替代性。

提示:info文档可导出为纯文本供离线分析:info --output=find.txt --subnodes find,生成的find.txt可用grep -A5 -B5 "delete" find.txt快速定位上下文。


4.su/sudo/login/last的权限链真相:为什么sudo -l显示 ALL,你还是提不了权?

在 Kali 渗透中,权限提升(Privilege Escalation)不是靠爆破密码,而是靠解析系统已有的权限委托链。su、sudo、login这三个命令表面是“切换用户”,实则是三把钥匙,分别打开三道不同的门:su开的是用户身份门,sudo开的是命令白名单门,login开的是会话生命周期门。而last就是那本记录谁用过哪把钥匙的日志簿。本章不讲怎么破解 root 密码,只讲怎么从sudo -l的输出里,一眼看出sudo /usr/bin/find能否执行sh。

4.1sudo -l的 5 种输出形态,对应 5 种提权路径

执行sudo -l是提权侦察的第一步。输出绝非只有(ALL : ALL) NOPASSWD: ALL这一种。以下是 Kali 实战中捕获的 5 种典型形态及利用逻辑:

sudo -l输出片段解读提权命令链示例
(root) NOPASSWD: /usr/bin/find可以以 root 身份运行find,但无-exec白名单sudo find /tmp -name "exploit" -exec /bin/sh \;
(www-data) NOPASSWD: /usr/bin/git可以以www-data身份运行git,常用于从 Web 目录逃逸cd /var/www/html && sudo -u www-data git clone /tmp/repo /tmp/exploit && /tmp/exploit/shell.sh
(ALL) NOPASSWD: /usr/bin/vimvim可启动 shell,但需确认是否禁用shell选项sudo vim -c ':!/bin/sh'(若:set shell?返回/bin/sh)
(root) NOPASSWD: /usr/local/bin/backup.sh自定义脚本,需检查内容是否可控sudo /usr/local/bin/backup.sh→cat /usr/local/bin/backup.sh→ 发现tar -cf /tmp/backup.tar $HOME,则ln -sf /etc/shadow $HOME触发 tar 提权
(root) NOPASSWD: /bin/bash最直接路径,但 Kali 默认禁用(/etc/sudoers中Defaults env_reset会清空 PATH)sudo PATH=/usr/local/bin:/usr/bin:/bin /bin/bash

关键细节:sudo -l输出中的(root)表示目标用户,NOPASSWD表示无需密码,但未列出的参数会被拒绝。例如(root) NOPASSWD: /usr/bin/find允许sudo find / -name "test",但sudo find / -name "test" -exec cat /etc/shadow \;会报错Sorry, user is not allowed to execute '/usr/bin/find / -name test -exec cat /etc/shadow ;' as root on kali——因为-exec被视为新参数,不在白名单内。

绕过方法(仅限白名单含/usr/bin/find且无参数限制):

# 利用 find 的 -path 和 -exec 组合(-path 不在白名单校验范围内) sudo find /usr/bin/ -name "find" -exec /bin/sh \; # 或更隐蔽: sudo find /tmp -name ".*" -exec /bin/sh \;

4.2su的隐藏开关:-与-m的权限继承差异

su命令的-(或--login)和-m(或--preserve-environment)参数,决定了你获得的 shell 是“全新登录会话”还是“环境克隆会话”:

# 场景:你已通过漏洞获取低权限 shell,发现 /root/.bash_history 存在,但直接 su - root 失败(密码未知) # 尝试环境继承: su -m root -c 'cat /root/.bash_history' # 若成功,说明 root 的环境变量(如 PATH、HOME)被继承,且未触发 PAM 认证
  • su - root:模拟完整登录,加载/root/.bashrc、/root/.profile,重置所有环境变量,强制要求密码;
  • su -m root:保持当前环境变量(包括$PATH、$HOME),不加载目标用户 shell 初始化文件,但仍需密码;
  • 真正的免密突破点在/etc/pam.d/su:若存在auth [success=ignore default=bad] pam_succeed_if.so user = root,则su root可跳过密码(但 Kali 默认不启用)。

4.3login与last的会话指纹:从登录记录反推持久化痕迹

login命令本身极少手动调用(通常由 getty 启动),但它的日志是分析横向移动的关键:

# 查看所有登录记录(含失败) last -a -n 20 # 输出示例: # root pts/1 192.168.1.100 Mon Apr 12 08:22 - 08:25 (00:03) 192.168.1.100 # reboot system boot 5.10.0-kali1-amd Mon Apr 12 08:20 - 08:25 (00:05) 192.168.1.100 # vagrant pts/0 :0 Mon Apr 12 08:15 - 08:20 (00:05) :0
  • -a将远程 IP 显示在最后一列,-n 20限制条数;
  • 关键字段:pts/1表示伪终端(SSH 登录),:0表示本地图形界面;
  • 渗透线索:若last显示reboot记录频繁(如每小时一次),且时间点与你的扫描时间吻合,说明靶机可能配置了自动重启策略(如systemctl enable reboot-on-fail.service),此时应避免长时间运行高负载工具(如hashcat)以防触发重启。

更深层分析:last读取/var/log/wtmp,但该文件可被篡改。验证真实性:

# 检查 wtmp 文件完整性(需 root 权限) sudo md5sum /var/log/wtmp # 对比上次备份(若有) sudo md5sum /var/log/wtmp.bak # 若无备份,查文件修改时间: stat /var/log/wtmp | grep "Modify" # 正常 wtmp 修改时间应与最近 reboot 时间接近;若 Modify 时间早于 reboot,说明可能被清理过。

注意:last不显示当前活跃会话(who或w命令才显示)。last的reboot记录是系统启动时写入的,而shutdown -r now会先写runlevel记录再写reboot,因此last | grep reboot的时间戳是系统真正启动完成的时间,不是关机指令发出时间。


5.shutdown/halt/reboot的关机黑匣子:为什么shutdown -h now比poweroff更安全?

在 Kali 渗透测试中,关机不是结束,而是收尾动作。shutdown、halt、reboot这三个命令常被混用,但它们的底层行为差异极大——尤其在涉及物理机、VMware、VirtualBox 等不同虚拟化平台时,一个错误的关机命令可能导致靶机状态损坏、快照无法恢复、甚至触发硬件级保护机制。本章不讲“怎么关机”,而是讲“关机时系统在做什么”,以及如何用shutdown的参数链,把关机变成一次可控的取证快照。

5.1shutdown的五阶段关机流水线:从通知到断电

shutdown不是单个动作,而是按严格顺序执行的 5 阶段流水线:

  1. 通知阶段:向所有登录用户广播关机消息(wall),冻结新登录(/etc/nologin创建);
  2. 服务停止阶段:按systemd依赖顺序停止服务(systemctl stop *.service),先停nginx,再停sshd,最后停dbus);
  3. 文件系统同步阶段:执行sync,将缓存数据刷入磁盘,避免ext4日志损坏;
  4. 卸载阶段:卸载所有非根文件系统(umount -a -r),若失败则强制只读挂载(mount -o remount,ro /);
  5. 最终动作阶段:调用halt或reboot完成硬件操作。

验证当前 shutdown 流程:

# 查看 shutdown 服务单元 systemctl cat systemd-shutdown.service # 输出关键行: # ExecStart=/lib/systemd/systemd-shutdown %H # %H 表示 halt 或 reboot 动作

因此,shutdown -h now的本质是:执行完整 5 阶段后,调用halt;而shutdown -r now是执行 5 阶段后,调用reboot。

5.2halt与reboot的硬件级差异:为什么halt在 VirtualBox 中会卡住?

halt和reboot都是直接向硬件发送指令,但指令内容不同:

  • halt:发送ACPI Power Off指令,要求主板切断电源;
  • reboot:发送ACPI Reset指令,要求主板重启 CPU;

问题在于:VirtualBox 默认禁用 ACPI。当halt发送Power Off指令时,VirtualBox Guest Additions 无法响应,导致虚拟机卡在黑屏状态(CPU 停止,但电源未断)。此时必须手动点击 VirtualBox 界面的“关闭电源”。

解决方案(Kali 启动时即生效):

# 编辑 GRUB 配置 sudo nano /etc/default/grub # 修改行: # GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi=force" # 保存后更新 GRUB: sudo update-grub && sudo reboot

acpi=force强制启用 ACPI 支持,使halt指令能被 VirtualBox 正确捕获。

5.3shutdown的渗透式参数链:用-k和-c构建“假关机”钓鱼

shutdown的-k(kick)参数是渗透测试中的神技:它只发送通知,不执行关机。结合-c(cancel),可构建社会工程攻击链:

# 步骤1:向所有用户发送“系统即将维护”通知(-k) sudo shutdown -k +5 "System maintenance in 5 minutes. Please save your work." # 步骤2:等待 2 分钟,用户开始保存文件、关闭敏感应用 # 步骤3:取消关机(-c),系统继续运行 sudo shutdown -c # 步骤4:此时用户心理放松,认为“维护取消了”,但他们的操作(如打开密码管理器、粘贴 API Key)已被记录

原理:-k仅调用wall广播,不启动计时器;-c只取消已存在的 shutdown 计时器(若无则静默)。整个过程无日志记录(/var/log/syslog中只有wall记录),且用户无法区分真假。

提示:shutdown -k的通知会写入/run/nologin(阻止新登录),但-c不会自动删除它。因此sudo shutdown -c后需手动sudo rm /run/nologin,否则新用户仍无法登录。


6.gzip/tar的压缩链陷阱:为什么tar -czf backup.tar.gz /var/www会导致 webshell 失效?

在 Kali 渗透中,gzip和tar不只是打包工具,它们是文件属性(特别是时间戳、权限、扩展属性)的搬运工。一个看似标准的tar -czf命令,可能在靶机上导致 webshell 无法执行、SSL 证书验证失败、甚至触发 WAF 的异常时间戳检测。本章聚焦三个真实翻车案例:tar的-p参数为何在/var/www/下是双刃剑;gzip的-f如何让gunzip解压失败;以及如何用tar --numeric-owner避免chown权限错乱。

6.1tar的-p参数:保留权限的代价是“精确复刻漏洞”

tar -czf backup.tar.gz /var/www是常规备份命令,但若/var/www/html/shell.php的权限是666(世界可写),-p会把它原样打包。当在另一台靶机上tar -xzf backup.tar.gz时,shell.php仍是666——这看似无害,实则危险:

  • WAF 检测:ModSecurity 规则SecRule FILES_TMPNAMES "@rx \.php$" "id:1001,phase:2,t:lowercase,deny,msg:'PHP file uploaded'"会放行,但SecRule RESPONSE_HEADERS:Content-Type "@streq text/html" "id:1002,phase:3,deny,msg:'HTML response from PHP file'"可能因666权限触发额外检查(如SecRule REQUEST_FILENAME "@endsWith .php" "id:1003,phase:1,deny,msg:'World-writable PHP file'");
  • SELinux 拒绝:若目标靶机启用 SELinux,restorecon -R /var/www会将shell.php的上下文重置为httpd_sys_content_t,但666权限违反httpd_sys_content_t的最小权限原则,导致 Apache 拒绝执行。

正确做法(备份时剥离高危权限):

# 方法1:打包前统一 chmod(推荐) find /var/www -name "*.php" -exec chmod 644 {} \; tar -czf backup.tar.gz /var/www # 方法2:tar 时忽略权限(-p 不启用) tar -czf backup.tar.gz --no-same-permissions /var/www # --no-same-permissions 等价于 --no-preserve=mode,ownership # 方法3:解包时强制修复权限 tar -xzf backup.tar.gz -C /tmp/restore/ find /tmp/restore/var/www -name "*.php" -exec chmod 644 {} \;

6.2gzip的-f参数:强行压缩的后果是“损坏原始文件”

gzip -f file.txt的-f(force)参数常被误解为“强制覆盖”,实则含义更危险:

  • 若file.txt是符号链接,-f会压缩链接指向的目标文件,而非链接本身;
  • 若file.txt已被其他进程打开(如tail -f /var/log/apache2/access.log),-f会直接截断原文件(truncate),导致日志丢失;
  • 最致命:若file.txt是设备文件(如/dev/urandom),gzip -f /dev/urandom会持续读取直到磁盘满。

验证gzip -f的真实行为:

# 创建测试文件 echo "test content" > test.txt ln -s test.txt test_link # 执行 gzip -f test_link gzip -f test_link # 结果:test_link.gz 不存在,test.txt.gz 被创建,test_link 仍指向 test.txt(但 test.txt 已被压缩删除) ls -l test* # 输出:test_link -> test.txt test.txt.gz

因此,在渗透中处理日志文件时,绝对禁止gzip -f /var/log/apache2/access.log。正确姿势:

# 先复制,再压缩副本 cp /var/log/apache2/access.log /tmp/access.log.copy gzip /tmp/access.log.copy # 或用 logrotate 风格:移动后压缩 mv /var/log/apache2/access.log /var/log/apache2/access.log.$(date +%Y%m%d) gzip /var/log/apache2/access.log.$(date +%Y%m%d)

6.3tar的--numeric-owner:解决跨系统chown的玄学失败

当你在 Kali 上tar -czf app.tar.gz /opt/app,再在 CentOS 靶机上tar -xzf app.tar.gz -C /opt/,发现/opt/app/config.php的所有者变成501:501

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/28 2:09:23

Unity接入Android Credential Manager完整实践指南

简介&#xff1a;本资源是一个面向Unity开发者、聚焦Google登录集成的完整测试工程&#xff0c;专为解决跨平台应用中用户认证流程复杂、凭证管理困难等实际问题而设计&#xff0c;适用于中高级移动/桌面端Unity项目开发与安全认证模块实践。压缩包共2000个文件&#xff0c;体量…

作者头像 李华
网站建设 2026/10/28 2:08:55

DeepSeek大模型API接入、流式输出与移动端配置指南

简介&#xff1a;《DeepSeek使用指南》面向具备一定编程背景的技术人员、产品经理及希望提升客户服务自动化水平的企业管理者&#xff0c;系统梳理大语言模型助手在网页端、API 集成与移动设备上的使用路径。资源以 1 个 docx 文档交付&#xff0c;压缩包约 16KB&#xff0c;篇…

作者头像 李华
网站建设 2026/10/28 2:08:54

Nessus漏洞扫描实战:从Kali靶机、离线插件到策略与报告

简介&#xff1a;《E002-渗透测试常用工具-使用Nessus扫描操作系统漏洞》是一份面向网络安全初学者与渗透测试入门者的实操型PDF教程。内容围绕Kali Linux环境下Nessus的安装、注册、用户创建、服务启动与Web登录展开&#xff0c;并以Windows XP靶机为例说明漏洞扫描配置&#…

作者头像 李华
网站建设 2026/10/28 2:08:50

流体静力学核心考点解析:从压差计到闸门受力

简介&#xff1a;这份天津大学流体力学习题集面向高校工科学生及备考流体力学课程的学习者&#xff0c;聚焦静力学核心考点&#xff0c;帮助读者通过典型例题巩固静水压力、压差计、等压面与压力中心等概念。压缩包内共1个doc文件&#xff0c;约1.64MB&#xff0c;以文档形式集…

作者头像 李华
网站建设 2026/10/28 2:08:31

单机SMC2.0环境搭建:系统与SQL Server版本匹配及补丁顺序

简介&#xff1a;《单机SMC2.0操作系统和数据库安装指导》面向华为视讯会议系统的实施与运维人员&#xff0c;聚焦SMC2.0单机部署前的操作系统、SQL Server Express数据库选型与安装配置。内容按Windows Server 2012 R2、2016、2019搭配对应SQL Server版本展开&#xff0c;覆盖…

作者头像 李华
网站建设 2026/10/28 2:07:41

ABB机器人组合信号GO/GI配置与避坑指南

简介&#xff1a;这份PDF文档面向ABB机器人编程与自动化调试人员&#xff0c;聚焦组合信号GO/GI这一常被忽视却高频使用的通信方式&#xff0c;帮助解决DO/DI、AO/AI在处理多路信号时程序臃肿、顺序输出易被PLC误判的问题。文档从三种信号类型切入&#xff0c;讲解组合输入输出…

作者头像 李华