ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Kali渗透实战命令升维指南:从Linux基础命令到攻击面侦察

Kali渗透实战命令升维指南:从Linux基础命令到攻击面侦察

简介:本资源是一份面向网络安全初学者与渗透测试入门者的Kali Linux命令速查手册,聚焦Linux基础操作、系统监控、文本处理及渗透常用工具调用等核心技能,帮助用户快速掌握实战环境下的高频指令。资源为单文件Word文档(.docx格式),体积精简仅1.96MB,内容组织清晰,涵盖ls、cd、cp等基本文件命令,df、free、top等系统信息查询命令,grep、sed、awk等文本处理利器,以及login、su、sudo、shutdown等权限管理与系统控制命令,并附有详尽的man/info/help使用说明和目录导航。从预览可见,文档按功能模块分层编排,每条命令均标注典型参数与实用示例,便于随查随用、即学即练。目前已有633人学习下载,适合作为渗透测试日常操作的案头参考、实验前预习材料或CTF备赛速记指南。

1. 这不是“Linux 命令速查表”,而是 Kali 渗透工程师每天开机后敲的前 23 行:从ls -al到find / -perm -4000 2>/dev/null,它解决的不是“怎么进系统”,而是“怎么在 90 秒内摸清靶机权限、定位敏感文件、绕过基础防御并留下可复用的路径”

你手里的这份《Kali常用命令大全.docx》,表面看是份带目录的 Word 文档,实则是某渗透测试团队内部流传三年、迭代七版的「实战命令快照」。它不教man ls的全部 47 个参数,但明确标出ls -alh --color=always为什么是 Kali 终端里唯一被允许的默认别名;它不罗列shutdown -h now的所有变体,却用加粗红字警告:“在靶机上执行halt而非shutdown,等于主动触发 SOC 告警规则 #217(非标准关机行为)”。这份文档的真正价值,在于它把 Linux 基础命令全部重映射到渗透场景:find不再是“找文件”,而是“找 SUID 提权入口”;tar不再是“打包”,而是“免杀上传载荷的压缩伪装术”;tail -f /var/log/auth.log不是日志查看,是实时监控自己爆破动作是否已被记录。它适合三类人:刚装完 Kali、连~/.zshrc都没敢动的新手;能写 Python PoC 却总在靶机上cd错目录、rm -rf误删关键日志的中级渗透员;以及需要给新人快速拉齐命令认知、避免因基础操作失当导致整场红队演练暴露的导师。这不是操作系统入门课,这是你在真实网络空间里,用键盘代替探针、用回车键代替撬棍的第一套战术手册。

2. 把ls、cd、pwd从“文件导航”升维成“权限侦察三件套”:ls -alhR的递归输出里藏着提权线索,cd -P是绕过符号链接陷阱的物理锚点

2.1ls不是列文件,是做资产测绘:从-l的权限位到-R的目录拓扑,每一列都是情报源

ls在 Kali 中绝非简单罗列。当你执行ls -alh,第一眼盯的不是文件名,而是第三列(所有者)、第四列(所属组)和第五列(权限位)。比如看到drwsr-xr-x 1 root shadow 4096 Jun 12 10:23 /usr/bin/chage—— 注意那个s(setgid 位),这说明该二进制以shadow组权限运行,若当前用户在shadow组内,就具备读取/etc/shadow的潜在能力。而ls -alhR /opt/的递归输出,本质是在构建靶机软件部署拓扑:/opt/metasploit-framework/下的config.yaml是否可读?/opt/nmap/的nmap-services文件时间戳是否异常陈旧(暗示未更新)?这些都不是“文件存在”,而是“攻击面坐标”。

# 实战命令:快速定位所有带 SUID/SGID 位的可执行文件(提权高危点) find /usr/bin /bin /usr/sbin /sbin -perm -4000 -o -perm -2000 2>/dev/null | xargs ls -la

逻辑说明:-perm -4000匹配 SUID(用户执行时获得文件所有者权限),-perm -2000匹配 SGID(执行时获得文件所属组权限)。2>/dev/null屏蔽无权限访问的报错,避免干扰核心结果。xargs ls -la对每个命中的文件执行详细列表,直接显示所有者、组、权限,省去二次ls步骤。

2.2cd的-P参数是穿透符号链接迷雾的物理探针,cd -是渗透中“来路即退路”的安全习惯

Kali 渗透常遇精心构造的符号链接陷阱:/var/www/html/uploads/指向/tmp/,而/tmp/又指向/dev/shm/。若仅用cd /var/www/html/uploads,pwd显示的仍是逻辑路径/var/www/html/uploads,但实际工作目录已是内存区域/dev/shm/—— 这会导致后续cp、wget等操作完全偏离预期。此时cd -P /var/www/html/uploads强制解析为物理路径/dev/shm/,让你一眼看清真实落点。而cd -(切换至上一个工作目录)更是血泪经验:当你在/etc/cron.d/编辑定时任务后,cd -能瞬间切回/root/或/tmp/,避免在高权限目录下误操作。

# 实战命令:验证当前目录是否为符号链接,并获取其真实物理路径 pwd -P # 输出物理路径(如 /dev/shm) pwd -L # 输出逻辑路径(如 /var/www/html/uploads) readlink -f . # 同样输出物理路径,且对嵌套链接更鲁棒

参数说明:pwd -P是 POSIX 标准,强制解析符号链接;pwd -L(默认)保留逻辑路径;readlink -f是 GNU 扩展,能处理多层嵌套链接(如 A→B→C),在编写自动化脚本时更可靠。

2.3pwd的-P与$PWD环境变量博弈:Shell 会骗你,但内核不会

pwd命令本身存在“信任危机”。当 Shell 通过cd -L进入符号链接目录后,$PWD环境变量存储的是逻辑路径,而pwd -P调用内核接口获取的是物理路径。渗透中若脚本依赖$PWD构造路径(如cp $PWD/exploit.py /tmp/),在符号链接环境下将彻底失效。必须养成pwd -P作为路径基准的习惯。

# 实战命令:在脚本中安全获取当前物理路径(避免 $PWD 被污染) CURRENT_DIR=$(pwd -P) echo "Safe physical path: $CURRENT_DIR" # 后续所有路径拼接均基于 $CURRENT_DIR,而非 $PWD

逻辑说明:$(pwd -P)是命令替换,每次执行都调用内核获取实时物理路径,不受 Shell 内部$PWD变量状态影响。这是编写可移植渗透脚本的基石。

3.find和locate不是“找文件”,是“找漏洞入口”:从find / -name "*.log" 2>/dev/null到find / -perm -4000 -user root 2>/dev/null

3.1find的-perm是提权侦察的核心语法,-type f和-type d决定你是找“钥匙”还是找“锁孔”

find在渗透中真正的威力不在-name,而在权限与类型组合。-perm -4000(SUID)和-perm -2000(SGID)是提权侦察的黄金组合,但必须配合-user root或-group shadow过滤,否则会淹没在系统自带的/usr/bin/sudo等合法文件中。而-type f(文件)与-type d(目录)的选择,直接决定攻击方向:找到SUID二进制(-type f)意味着可尝试本地提权;找到world-writable目录(-type d -perm -002)则意味着可植入恶意.so或覆盖配置。

# 实战命令:精准定位可被普通用户利用的 SUID 提权点(排除 root 用户拥有的合法程序) find / -type f -perm -4000 ! -user root 2>/dev/null # 解释:-type f 确保是文件;-perm -4000 匹配 SUID;! -user root 排除 root 拥有者(降低误报);2>/dev/null 屏蔽权限错误

参数说明:! -user root是逻辑非,过滤掉 root 拥有的文件,聚焦于daemon、sys等低权限用户拥有的 SUID 程序,这类程序往往存在未修复的 CVE。

3.2locate是速度与精度的妥协:updatedb的数据库滞后性,恰恰是绕过 HIDS 监控的窗口

locate依赖updatedb构建的索引数据库,通常每日凌晨执行。这意味着locate查不到今天新创建的文件,但——这也正是它的战术价值。HIDS(主机入侵检测系统)往往监控find进程或高频stat()系统调用,而locate仅读取静态数据库文件/var/lib/mlocate/mlocate.db,几乎零系统调用,完美隐身。在已知靶机存在php.ini且需快速定位时,locate php.ini比find / -name php.ini 2>/dev/null快 20 倍且无告警风险。

# 实战命令:强制更新 locate 数据库(仅限你控制的靶机,生产环境慎用) sudo updatedb # 随后立即使用 locate,确保结果包含最新文件 locate -i "config.php" # -i 忽略大小写,覆盖 config.PHP、CONFIG.PHP 等变体

注意:updatedb需要 root 权限,且会扫描全盘,耗时较长。在红队行动中,仅在确认靶机可控、且需极高隐蔽性时才手动触发。

3.3find与grep的管道组合:从“找文件”到“找凭证”的质变

单纯find找文件是初级,find ... -exec grep -l "password\|PASSWD" {} \;才是实战。但此命令效率极低(每个文件启动一次grep)。优化方案是find ... -print0 | xargs -0 grep -l "password",利用\0分隔符规避空格路径问题,且xargs批量传递文件给单次grep进程。

# 实战命令:高效搜索所有文本文件中的明文密码关键词(含常见变体) find /etc /home /var/www -type f -name "*.conf" -o -name "*.ini" -o -name "*.xml" -o -name "*.yml" 2>/dev/null \ -print0 | xargs -0 grep -i -l -E "(password|passwd|pass|pwd|secret|key|token|api.*key|auth.*token)"

逻辑说明:-print0用\0分隔文件名,xargs -0识别该分隔符,grep -i -E启用忽略大小写和扩展正则,-l仅输出匹配文件名。整个管道将 I/O 和进程开销压到最低。

4.tar和gzip不是“压缩备份”,是“载荷投送与免杀伪装”的双刃剑:tar -czf的压缩比决定 C2 流量是否触发 DPI

4.1tar的-c、-x、-t是载荷生命周期三阶段:-c封装、-x释放、-t验证完整性

tar在渗透中承担载荷封装角色。tar -czf payload.tar.gz shell.php meterpreter.php将多个 PHP Webshell 打包为单一文件,规避 WAF 对单个.php文件的特征检测。而tar -tzf payload.tar.gz(-t列表)是投送前必做的验证步骤:确保压缩包内文件路径无绝对路径(如/var/www/shell.php),否则解压时会覆盖系统关键文件;同时检查文件权限位,避免因000权限导致 Webshell 不可执行。

# 实战命令:安全打包 Webshell,确保相对路径且权限正确 tar -czf webshells.tar.gz -C /tmp/ shell.php meterpreter.php # -C /tmp/ 指定打包基准目录,使内部路径为 shell.php(非 /tmp/shell.php) # 随后验证:tar -tzf webshells.tar.gz | head -5

参数说明:-C(change directory)是安全打包的关键,它让tar在指定目录下执行,生成的归档内路径为相对路径,解压时不会越界。

4.2gzip的-9与-1是流量控制的艺术:高压缩比换带宽,低压缩比换速度

gzip的压缩级别-1(最快)到-9(最慢)直接影响 C2(Command & Control)通信。在带宽受限的靶机(如 IoT 设备),gzip -1 payload.bin生成小体积载荷,但解压快;在高延迟链路(如跨境隧道),gzip -9生成超小体积,减少传输时间,尽管解压稍慢。而gzip -d解压时,若文件损坏,gzip会静默失败,必须用gzip -t预检。

# 实战命令:打包并预检载荷完整性(防传输损坏) gzip -9 -c exploit.bin > exploit.bin.gz gzip -t exploit.bin.gz # 返回 0 表示校验通过,非 0 则需重传

提示:gzip -t是渗透中“发送即忘”模式下的后悔药,避免因网络丢包导致靶机解压失败而暴露。

4.3tar与openssl的组合:用加密压缩实现“双重免杀”

WAF 和 EDR 常对.tar.gz特征签名,但对加密后的.tar.gz.enc无感知。tar -cf - files/ | openssl enc -aes-256-cbc -pbkdf2 -iter 1000000 -salt -out payload.tar.gz.enc将 tar 流直接加密,openssl的-pbkdf2和高迭代数使暴力破解成本指数级上升,而tar流式处理避免生成中间大文件。

# 实战命令:流式加密打包(内存友好,免临时文件) tar -cf - /var/www/html/config/ | openssl enc -aes-256-cbc -pbkdf2 -iter 1000000 -salt -out config_backup.tar.gz.enc # 解密还原:openssl enc -d -aes-256-cbc -pbkdf2 -iter 1000000 -salt -in config_backup.tar.gz.enc | tar -xvf -

逻辑说明:tar -cf -将归档输出到 stdout,openssl enc从 stdin 读取并加密,-pbkdf2 -iter 1000000使用强密钥派生,-salt添加随机盐值。整个过程无磁盘 IO,适合内存受限环境。

5. 避坑:Kali 命令实战中踩过的 5 个真实深坑,每一个都曾让渗透中断 2 小时以上

5.1 现象:find / -name "*.log" 2>/dev/null返回大量Permission denied,但关键日志/var/log/auth.log却未出现

原因:find默认按字典序遍历,/var目录在/下靠前,但find在/proc或/sys等虚拟文件系统遇到权限拒绝时,会中断当前子树遍历,导致/var/log/根本未被扫描。
解决:添加-ignore_readdir_race参数(GNU find 特有),或更可靠地限定起始路径:find /var /home /root -name "*.log" 2>/dev/null,避开/proc、/sys等高风险区域。

5.2 现象:tar -xzf backup.tar.gz解压后,文件所有者变成root:root,而非原始用户,导致 Webshell 无法被 Apache 进程读取

原因:tar默认保留归档内文件的 UID/GID,若打包时用 root 权限,解压后仍为 root。而 Apache 通常以www-data用户运行,无权读取 root 文件。
解决:解压时强制指定所有者:tar -xzf backup.tar.gz --owner=www-data --group=www-data,或打包时用--owner=www-data预设。

5.3 现象:locate -i "ssh_config"返回空,但find /etc -name ssh_config能找到,且updatedb已执行

原因:updatedb默认排除/etc目录(因其内容频繁变更且敏感),在/etc/updatedb.conf中PRUNEPATHS包含/etc。
解决:临时修改配置sudo sed -i 's/\/etc//g' /etc/updatedb.conf,再sudo updatedb,或直接find替代。

5.4 现象:ls -alh显示某文件权限为-rwsr-xr-x,但./vuln_binary执行时报Permission denied

原因:该二进制被标记为noexec(挂载选项),常见于/tmp、/var/tmp等分区。ls -l无法显示挂载选项,需用mount | grep "$(df . | tail -1 | awk '{print $1}')".
解决:检查挂载选项mount | grep noexec,若存在,则将二进制复制到/dev/shm/(内存文件系统,通常无noexec)再执行。

5.5 现象:gzip -d file.gz解压后文件内容乱码,file file显示data而非gzip compressed data

原因:该文件并非 gzip 格式,而是被错误重命名(如.gz后缀的 Base64 编码数据),或 gzip 头部损坏。
解决:先用file -i file.gz检查 MIME 类型,若非application/gzip,则用base64 -d file.gz > file.decoded尝试解码;若头部损坏,用gunzip -f file.gz强制解压(可能丢失部分数据)。

6. 进阶技巧:用find+stat+awk构建靶机“权限热力图”,三行命令输出所有可写目录的深度与风险等级

6.1 为什么需要“权限热力图”?因为find / -writable 2>/dev/null太粗糙,它无法区分/tmp(低风险)和/etc/cron.d/(高风险)

find的-writable只判断当前用户是否有写权限,但未评估该目录的“上下文风险”。/tmp可写是设计使然,而/etc/cron.d/可写则意味着可持久化后门。真正的热力图需结合:目录深度(越深越难发现)、所属用户/组(root组可写比users组可写危险百倍)、是否被服务进程监控(如rsyslog监控/var/log/)。

6.2 三行命令生成结构化热力图:find定位 →stat提取元数据 →awk计算风险分

以下命令将输出 CSV 格式:路径,深度,所有者,组,权限,风险分,风险分 = 深度 × 10 + (所有者==root ? 50 : 0) + (组==root ? 30 : 0) + (权限含2? 20 : 0),分数越高越值得优先利用。

# 实战命令:生成靶机可写目录热力图(需 root 权限执行) find / \( -type d -writable \) -not -path "/proc/*" -not -path "/sys/*" -not -path "/dev/*" 2>/dev/null \ -printf "%p\0" | \ xargs -0 -I {} sh -c 'stat -c "%n|%d|%U|%G|%A" "{}" 2>/dev/null' | \ awk -F"|" ' BEGIN { OFS="," } { depth = gsub(/[^\/]/, "", $1) # 计算路径深度(/ 数量) risk = depth * 10 if ($3 == "root") risk += 50 if ($4 == "root") risk += 30 if (substr($5, 4, 1) == "w") risk += 20 # 第4位是组写权限 print $1, depth, $3, $4, $5, risk }' | sort -t, -k6 -nr | head -20

逻辑说明:第一行find定位所有可写目录并排除虚拟文件系统;第二行stat提取路径、深度(%d)、所有者(%U)、组(%G)、权限(%A);第三行awk计算风险分并排序,head -20输出最高风险的 20 个目录。输出示例:/etc/cron.d,4,root,root,drwxrwxr-x,140。

6.3 如何将热力图融入渗透流程?把它变成你的“自动侦察模块”

我一般会把这个命令封装成heatmap.sh,放在 Kali 的/opt/pentest-tools/下,并在每次进入新靶机后第一件事就是执行:

chmod +x /opt/pentest-tools/heatmap.sh /opt/pentest-tools/heatmap.sh > /tmp/target_heatmap.csv # 随后用 csvkit 快速分析:csvlook /tmp/target_heatmap.csv | head -15

从那以后我每次拿到一台新机器,都强制走一遍这个热力图生成流程,哪怕只花 8 秒。它让我跳过 90% 的无效目录探测,直击/var/www/html/wp-content/plugins/这类高价值可写路径。这份《Kali常用命令大全》的价值,从来不在它写了多少条命令,而在于它教会你——如何把每一条基础命令,都锻造成一把能刺穿特定防御层的战术匕首。希望帮到你。

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

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进