简介:本资源是一份面向网络安全初学者与渗透测试入门者的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 -102>/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 version3.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/vim | vim可启动 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 阶段流水线:
- 通知阶段:向所有登录用户广播关机消息(
wall),冻结新登录(/etc/nologin创建); - 服务停止阶段:按
systemd依赖顺序停止服务(systemctl stop *.service),先停nginx,再停sshd,最后停dbus); - 文件系统同步阶段:执行
sync,将缓存数据刷入磁盘,避免ext4日志损坏; - 卸载阶段:卸载所有非根文件系统(
umount -a -r),若失败则强制只读挂载(mount -o remount,ro /); - 最终动作阶段:调用
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 rebootacpi=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
本文还有配套的精品资源,点击获取