Kali Linux渗透测试必备:20个核心命令实战解析与组合技巧
1. 项目概述:为什么是这20个命令?
如果你刚接触Kali Linux,面对那个黑底绿字的终端,可能会有点懵。网上命令教程千千万,但真正在渗透测试、安全审计的日常工作中,高频使用、能解决实际问题的核心命令,其实就那么一批。我整理这20个命令,不是简单的罗列,而是基于多年一线实战,筛选出的“生存必备”技能包。它们覆盖了从系统信息侦察、网络探测、文件操作到权限维持的完整链条。掌握它们,你就能像熟悉自己家一样,在Kali里快速定位、分析、行动,而不是在浩如烟海的命令中迷失方向。无论你是想入门安全领域的学生,还是需要快速上手Kali进行某项测试的工程师,这篇“保姆级”指南都会手把手带你理解每个命令背后的意图、经典使用场景以及那些容易踩坑的细节。
2. 核心命令深度解析与实战场景
2.1 系统侦察与信息收集类命令
在安全测试中,知己知彼是第一步。你需要快速了解自己所处的环境(攻击机)和目标系统的概况。
uname -a
这个命令是查看系统内核信息的瑞士军刀。
-a
参数表示显示所有信息。执行后,你会看到内核名称(如Linux)、主机名、内核发行版本、内核版本、机器硬件名称和处理器类型。为什么它重要?在后续安装特定内核模块或利用某些漏洞时,内核版本是决定成败的关键信息。例如,寻找提权漏洞时,第一步就是
uname -a
来确认目标系统内核版本,然后去搜索对应的 exploit。
whoami
与
id
这两个命令常被新手混淆。
whoami
极其简单,只返回当前登录用户的用户名。而
id
命令则提供了丰富的身份信息全景图。直接输入
id
,它会显示用户ID(UID)、所属主要组ID(GID)以及该用户所属的所有附加组。在权限提升过程中,
id
命令至关重要。你需要检查当前用户是否在某些特权组中,例如
sudo
组(允许执行sudo命令)、
docker
组(可能直接获取root权限)或
adm
组(拥有读取日志文件的权限)。
id
命令的输出是你进行横向移动或垂直提权决策的基础。
dpkg -l | grep [软件包名]
Kali 基于 Debian,使用 dpkg 包管理器。这个命令组合用于精确查询某个软件包是否已安装及其版本。
dpkg -l
会列出所有已安装的包,但输出冗长。通过管道
|
将结果传递给
grep
进行过滤,可以快速定位。例如,
dpkg -l | grep metasploit
。知道某个工具的精确版本,有助于判断其是否存在已知漏洞,或者是否需要更新到最新版以获取新功能。
注意:在脚本中或需要精确判断时,更推荐使用
dpkg -s [软件包名]来查询特定包的详细状态信息,如果包未安装,该命令会明确提示。
ifconfig
/
ip addr
网络配置信息是行动的起点。传统的
ifconfig
命令仍然可用且直观,它会显示所有网络接口的IP地址、MAC地址、收发数据包统计等。而
ip addr
(或
ip a
)是更现代、功能更强大的替代品,来自
iproute2
工具集。它不仅显示信息,其语法还支持更复杂的网络操作。在实际中,我习惯用
ip addr
,因为它输出的信息格式更统一,并且是未来趋势。你需要关注的是
eth0
(有线)、
wlan0
(无线)这类接口是否获得了IP地址(inet字段),以及MAC地址(link/ether字段),这对于后续的网络扫描和伪装至关重要。
2.2 网络探测与诊断类命令
信息收集之后,便是对网络环境的主动探测。这类命令帮助你发现目标、分析网络结构和服务状态。
ping
最古老也最经典的连通性测试工具。它的原理是发送ICMP回显请求包到目标主机,并等待ICMP回显应答。基本用法
ping [目标IP或域名]
。在安全测试初期,它用于快速判断目标主机是否在线(是否禁用了ICMP回应则是另一回事)。高级用法包括:
-
-c [次数]:指定发送包的数量,如ping -c 4 192.168.1.1,发送4个包后自动停止。 -
-i [间隔]:设置发送包之间的时间间隔(秒),降低发送频率。 -
-s [包大小]:指定发送数据包的大小(字节),可用于简单的MTU路径探测或制造轻微网络压力。
netstat
/
ss
这两个命令用于查看本机的网络连接、路由表、接口统计等信息。
netstat
是旧爱,
ss
(Socket Statistics)是新欢,它更快、更高效,并且显示了更多的TCP状态信息。
-
查看所有监听端口
:
sudo netstat -tunlp或sudo ss -tunlp。参数解释:-t(TCP),-u(UDP),-n(以数字形式显示地址和端口),-l(仅显示监听套接字),-p(显示进程标识符和程序名称)。这个命令能让你知道系统上哪些服务正对外开放,以及它们对应的进程,是发现可疑后门或配置错误的第一现场。 -
查看所有已建立的连接
:
ss -t state established。这对于排查恶意软件外连或分析正常应用流量非常有用。
traceroute
/
mtr
当网络不通或想了解数据包到达目标的路径时,这两个命令就派上用场了。
traceroute
通过发送TTL(生存时间)递增的UDP包或ICMP包,监听路径上每个路由器的回应,从而勾勒出网络路径。用法:
traceroute [目标]
。
mtr
是
traceroute
和
ping
的结合体,它实时地、持续地测试到目标的路径,并显示每个跃点的丢包率和延迟,信息更动态、更全面。在评估网络质量或诊断网络问题时,
mtr
是更强大的工具。
telnet
[IP] [端口]
虽然
telnet
协议本身不安全(明文传输),但作为一款简单的TCP连接测试工具,它无可替代。它的命令格式
telnet [IP地址] [端口]
用于快速手动检查某个远程主机的特定TCP端口是否开放,以及该端口运行的是什么服务(服务通常会返回一个Banner信息)。例如,
telnet 192.168.1.100 80
,然后输入
GET / HTTP/1.0
并两次回车,你可能会看到HTTP服务器的响应头。这比单纯用扫描器更快,也更交互式。当然,对于加密或复杂协议,更推荐
nc
(Netcat)或专用客户端。
2.3 文件与目录操作类命令
在Kali中,你大量时间都在与文件打交道,无论是工具脚本、配置文件还是收集的数据。
find
文件搜索的终极武器,功能极其强大但语法也相对复杂。它的基本结构是
find [路径] [表达式]
。
-
按名称查找
:
find / -name "*.txt" 2>/dev/null。这里/表示从根目录开始搜索,-name指定文件名模式,2>/dev/null是将所有错误信息(如权限不足)重定向到空设备,让输出更干净。 -
按权限查找
:
find / -perm -4000 2>/dev/null。查找具有SUID权限的文件,这是常见的提权切入点。-perm -4000表示文件权限位中设置了SUID位。 -
按大小查找
:
find / -size +10M。查找大于10MB的文件。 -
按时间查找
:
find / -mtime -7。查找过去7天内修改过的文件。 -
查找后执行操作
:
find /home -name "*.log" -exec rm {} \;。找到/home目录下所有.log文件并删除。-exec参数非常强大,但需谨慎使用。
grep
文本搜索过滤的核心工具,常与管道
|
联用。它使用正则表达式进行模式匹配。
-
基本搜索
:
grep "password" file.txt在文件中搜索包含“password”的行。 -
递归搜索
:
grep -r "192.168.1" /etc/。在/etc目录及其所有子目录中递归搜索包含该IP地址字符串的文件。 -
显示行号
:
grep -n "error" logfile。显示匹配行及其行号。 -
反向匹配
:
grep -v "#" config.conf。显示所有不包含#号(注释)的行。 -
结合正则
:
grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" file.txt。使用扩展正则表达式匹配IP地址格式的行。
cat
,
more
,
less
,
head
,
tail
这是一组用于查看文件内容的命令,各有侧重。
-
cat:将整个文件内容一次性输出到终端。适合查看小文件。cat file1 file2 > combined_file还可用于合并文件。 -
more:分页查看文件,只能向下翻页。 -
less:more的增强版,可以上下翻页、搜索(按/然后输入关键词)、跳转行首(g)行尾(G)。查看日志或长文档的首选。 -
head:查看文件开头部分,默认10行。head -n 20 file.log查看前20行。 -
tail:查看文件末尾部分,默认10行。tail -f file.log(-f参数)是神器,可以实时追踪文件新增的内容,常用于监控日志文件。
chmod
,
chown
管理文件权限和所有权的关键命令。
-
chmod:修改文件权限。权限可以用数字(八进制)或符号表示。-
数字表示
:
chmod 755 script.sh。755表示:所有者(7=读+写+执行),所属组(5=读+执行),其他人(5=读+执行)。这是可执行脚本的常见权限。 -
符号表示
:
chmod u+x script.sh。给文件所有者(u)增加执行(x)权限。chmod go-w file.conf。移除所属组(g)和其他人(o)的写(w)权限。
-
数字表示
:
-
chown:改变文件所有者和所属组。sudo chown user:group file.txt。通常需要sudo权限。在部署Web应用时,经常需要将网站目录的所有者改为Web服务器用户(如www-data)。
2.4 进程管理与系统控制类命令
了解和控制系统中运行的程序,是维持操作稳定性和进行深入分析的基础。
ps
报告当前进程状态的快照。最常用的组合是
ps aux
。
-
a:显示所有用户的进程。 -
u:以用户为主的格式显示。 -
x:显示没有控制终端的进程(通常是后台服务)。ps aux的输出列包括:USER(所有者), PID(进程ID), %CPU(CPU占用), %MEM(内存占用), VSZ/RSS(虚拟/常驻内存大小), TTY(终端), STAT(进程状态,如S睡眠、R运行、Z僵尸), START(启动时间), TIME(累计CPU时间), COMMAND(命令及参数)。通过grep过滤,可以快速找到目标进程:ps aux | grep sshd。
top
/
htop
动态、实时地查看系统进程状态和资源使用情况。
-
top:经典工具。启动后,头部显示系统概要(负载、任务数、CPU使用率、内存使用率),下部是进程列表。在top界面中,可以按P(按CPU排序)、M(按内存排序)、k(杀死进程,需输入PID)、q(退出)。 -
htop:top的现代化、增强版。它提供了彩色界面、鼠标支持、垂直和水平滚动、更直观的进程树视图,以及更便捷的进程操作(如杀进程、调整优先级)。如果系统没有预装,可以通过sudo apt install htop安装。在需要持续监控系统资源消耗时,htop是更佳选择。
kill
与
pkill
用于向进程发送信号,最常用的信号是终止进程。
-
kill:通过进程ID(PID)来操作。kill [PID]发送默认的 TERM(15)信号,请求进程正常终止。如果进程不响应,可以使用kill -9 [PID]发送 KILL(9)信号,强制立即终止进程。-9信号不可被进程捕获或忽略,是“必杀技”,但可能导致数据丢失或状态不一致,应谨慎使用。 -
pkill:通过进程名来操作。pkill firefox会终止所有名为“firefox”的进程。它比先ps aux | grep firefox再kill更方便,但也更危险,可能误杀同名进程。可以使用pkill -f [模式]来匹配完整的命令行。
systemctl
现代Linux系统(使用Systemd)中管理服务(守护进程)的核心命令。Kali Linux 也使用 Systemd。
-
启动/停止/重启服务
:
sudo systemctl start [服务名],sudo systemctl stop [服务名],sudo systemctl restart [服务名]。例如管理SSH服务:sudo systemctl restart ssh。 -
查看服务状态
:
sudo systemctl status [服务名]。这个命令输出非常详细,包括服务是否活跃、运行了多久、最近的日志片段等,是排查服务问题的第一入口。 -
设置开机自启/禁用
:
sudo systemctl enable [服务名],sudo systemctl disable [服务名]。 -
查看所有服务
:
systemctl list-unit-files --type=service。
2.5 归档、压缩与下载类命令
在渗透测试中,经常需要打包数据、传输工具或下载资源。
tar
经典的归档工具,常与压缩工具联用。它的参数顺序有时让人困惑,一个助记口诀是“
c
reate,
x
tract,
f
ile,
z
ip”。
-
创建归档(不压缩)
:
tar -cvf archive.tar /path/to/folder/。-c创建,-v显示过程,-f指定文件名。 -
创建并压缩(gzip)
:
tar -czvf archive.tar.gz /path/to/folder/。-z表示使用gzip压缩。 -
创建并压缩(bzip2)
:
tar -cjvf archive.tar.bz2 /path/to/folder/。-j表示使用bzip2压缩,压缩率通常更高。 -
解压 .tar.gz 文件
:
tar -xzvf archive.tar.gz。-x解压。 -
解压到指定目录
:
tar -xzvf archive.tar.gz -C /target/directory/。-C参数指定目标目录。
wget
与
curl
两者都是强大的命令行下载工具,但设计哲学不同。
-
wget:更专注于“下载”。它是非交互式的,支持递归下载(整个网站)、断点续传、后台下载。用法简单直接:wget [URL]。对于从互联网下载工具、脚本或漏洞利用代码,wget是首选。-
递归下载:
wget -r -l 2 http://example.com。-r递归,-l指定递归深度。 -
后台下载:
wget -b [URL]。
-
递归下载:
-
curl:更专注于“传输”。它支持海量的协议(HTTP, HTTPS, FTP, SCP, SFTP等),并且更擅长与API交互、测试Web端点、发送自定义请求。它默认将下载内容输出到标准输出(屏幕)。-
下载文件:
curl -O [URL]。-O选项表示使用远程文件的名称保存。 -
发送POST请求:
curl -X POST -d "param1=value1¶m2=value2" http://example.com/api。 -
测试HTTP状态:
curl -I http://example.com。-I只获取HTTP头部信息。 -
在脚本中,
curl因其灵活性和丰富的输出处理选项(如-s静默模式,-o输出到文件,-w自定义输出格式)而更受青睐。
-
下载文件:
3. 高级组合技与自动化脚本思路
单个命令是武器,组合起来才能形成战术。这里分享几个我常用的命令组合模式,它们能极大提升效率。
1. 管道(
|
)与重定向(
>
,
>>
)的魔法
这是Linux命令行的精髓。管道将一个命令的输出作为另一个命令的输入。
-
统计当前目录下文件数量
:
ls -l | wc -l。wc -l统计行数。 -
查找包含特定内容的文件,并高亮显示关键词
:
grep -r "secret_key" /etc/ --color=auto | less -R。less -R会正确显示grep的颜色高亮。 -
将命令输出保存到文件
:
ps aux > process_list.txt(覆盖),date >> logfile.txt(追加)。 -
将错误信息和正常输出分别处理
:
some_command 2> errors.log 1> output.log。2>重定向标准错误,1>重定向标准输出。
2. 后台运行与作业控制 让长时间运行的任务在后台执行,不阻塞当前终端。
-
在命令末尾加
&:./long_running_script.sh &。脚本会在后台启动,并返回一个作业号(如[1] 12345),其中12345是PID。 -
使用
nohup防止任务因退出终端而终止 :nohup ./script.sh > script.log 2>&1 &。这个组合拳非常经典:nohup忽略挂断信号,>将标准输出重定向到script.log,2>&1将标准错误也合并到标准输出(即同一个日志文件),最后的&放到后台运行。这样即使你关闭SSH连接,脚本也会继续执行。 -
管理后台作业
:
-
jobs:查看当前终端后台的作业列表。 -
fg %1:将1号作业调到前台运行。 -
bg %1:将暂停的1号作业在后台继续运行。 -
kill %1:终止1号作业。
-
3. 利用
alias
创建快捷命令
将复杂的常用命令序列简化为一个短命令。
编辑
~/.bashrc
文件(针对当前用户)或
/etc/bash.bashrc
(全局),在末尾添加:
alias ll='ls -alF'
alias update='sudo apt update && sudo apt upgrade -y'
alias myip='curl -s ifconfig.me'
alias ports='sudo netstat -tunlp'
保存后,执行
source ~/.bashrc
使别名立即生效。之后,输入
ll
就等于输入
ls -alF
, 输入
update
就会执行更新系统。
4. 常见问题与排错实录
即使掌握了命令,在实际操作中也会遇到各种“坑”。这里记录了几个高频问题及其解决方法。
问题1:执行命令提示“Command not found”
-
原因
:该命令对应的软件包没有安装,或命令不在
$PATH环境变量指定的目录中。 -
排查
:
- 首先确认命令是否拼写错误。
-
使用
which [命令名]或type [命令名]查看命令的位置。如果没输出,说明未安装。 -
对于Kali/Debian系,使用
apt search [关键词]搜索可能包含该命令的软件包,然后用sudo apt install [包名]安装。例如,ss命令在iproute2包中,htop需要单独安装。
问题2:操作文件时提示“Permission denied”
- 原因 :当前用户对目标文件或目录没有足够的权限(读、写、执行)。
-
解决思路
:
-
检查权限
:使用
ls -l file查看文件权限和所有者。 -
提升权限
:如果该操作需要root权限,在命令前加
sudo。但需谨慎,确保你理解该命令的作用。 -
更改文件所有者/权限
:如果你是该文件的所有者,可以用
chmod增加权限。如果不是,可能需要sudo来执行chown或chmod。 -
使用正确的用户
:有些操作(如修改某些系统服务配置)需要切换到特定用户,如
sudo -u www-data cat /var/log/apache2/error.log。
-
检查权限
:使用
问题3:
apt update
或
apt install
失败,提示“无法定位软件包”或“GPG错误”
- 原因 :软件源列表配置错误、网络问题或软件源密钥过期。
-
解决步骤
:
-
检查网络
:
ping 8.8.8.8测试外网连通性。 -
检查源列表
:
cat /etc/apt/sources.list查看主源配置。Kali Rolling 用户应使用官方源或可靠的国内镜像源。 -
更新软件源缓存
:有时只是缓存问题,
sudo apt update本身出错信息会给出线索。常见的GPG密钥错误,可以尝试sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys [缺失的密钥ID]来导入密钥,密钥ID在错误信息中会显示。 - 更换镜像源 :如果官方源速度慢,可以更换为国内镜像源(如阿里云、中科大镜像)。但需注意,渗透测试工具更新极快,镜像源可能有延迟。
-
检查网络
:
问题4:
systemctl status
显示服务“failed”或“inactive”
-
排查方法
:
-
查看详细日志
:
sudo journalctl -u [服务名] -xe。journalctl是Systemd的日志工具,-u指定单元(服务),-x提供更多解释信息,-e跳转到日志末尾。这是最有效的排错手段,通常会直接打印出错误原因(如配置文件语法错误、端口被占用、依赖服务未启动)。 -
检查配置文件
:服务配置文件通常位于
/etc/systemd/system/或/lib/systemd/system/。使用systemctl cat [服务名]可以查看当前加载的完整配置。 -
测试配置文件语法
:对于像Apache、Nginx等服务,它们有自己的配置测试命令,如
sudo nginx -t。
-
查看详细日志
:
问题5:使用
rm
、
chmod
等命令误操作
-
预防重于治疗
:
-
使用
-i(交互式)参数 :rm -i file会在删除前询问。可以设置别名alias rm='rm -i',但注意这可能会影响某些脚本。 -
使用
trash-cli:安装trash-cli工具,使用trash-put file将文件移到“回收站”(通常是~/.local/share/Trash),而不是永久删除。 -
对
chmod和chown操作保持敬畏 :在递归修改(-R)整个系统目录(如/,/usr)的权限前,务必再三确认路径。一个错误的sudo chmod -R 777 /足以让系统崩溃。最佳实践是,先在目标目录下的一个测试子目录中操作,确认无误后再应用到整个目录。 -
备份!备份!备份!
:在对重要配置文件进行修改前,先复制一份:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak。
-
使用
更多推荐
所有评论(0)