渗透测试实战:从信息收集到内网横向移动的完整攻防演练

发布时间:2026/6/20 18:01:15

渗透测试实战:从信息收集到内网横向移动的完整攻防演练 1. 项目概述从“黑盒”到“白盒”的实战演练“渗透测试实战步骤”这个标题听起来像是一份标准操作手册但真正做过的人都知道它远不止是几个命令的堆砌。这更像是一场精心策划的“授权入侵”目标是在不造成实际损害的前提下像真正的攻击者一样思考、行动最终找到并证明系统存在的安全弱点。我干了十多年安全从早期的脚本小子式扫描到现在面对云原生、微服务架构的复杂环境核心的实战逻辑其实一脉相承但细节和工具链早已天翻地覆。今天我就抛开那些教科书式的流程框图以一个老兵的视角拆解一次完整的渗透测试实战从踩点侦察到报告收尾把每个环节的“为什么”和“怎么做”讲透尤其是那些只有踩过坑才知道的细节。无论你是刚入行的安全分析师还是想了解如何评估自身系统风险的安全运维甚至是准备面试的准渗透测试工程师这篇文章都能给你提供一个清晰的、可落地的实战框架。我们会用到一些常见的工具但重点在于理解其背后的意图和逻辑这样你才能举一反三应对各种千奇百怪的目标环境。2. 实战前奏明确规则与信息收集2.1 授权与范围界定一切行动的基础在动手敲下第一个命令之前最重要的一步往往被新手忽略明确授权和测试范围。没有书面授权就进行测试在法律上等同于攻击行为。这份授权文档通常称为“渗透测试授权书”必须清晰界定以下内容测试目标是单个IP地址、一个域名还是一个CIDR网段如192.168.1.0/24必须精确到无法产生歧义。测试类型黑盒测试你只知道目标名称如公司名对内部网络结构、技术栈一无所知。这模拟了外部攻击者的视角。灰盒测试你拥有部分信息例如一个低权限的测试账户或基本的网络拓扑图。白盒测试你拥有完整或接近完整的信息如源代码、架构图、甚至管理员权限。这更侧重于深度漏洞挖掘。测试时间窗口明确开始和结束的日期与具体时间包括时区。所有测试活动必须严格在此窗口内进行。禁止行为明确列出绝对不允许的操作例如对生产数据库进行“DROP TABLE”操作。发起可能导致业务中断的拒绝服务DoS测试除非特别授权。对第三方系统非授权目标进行任何形式的扫描或探测。社会工程学攻击如钓鱼邮件是否被允许。应急联系提供双方测试方与被测方的紧急联系人及方式一旦发生意外如服务意外宕机能立即沟通处理。注意务必保存好授权文件并在报告中引用。这是你的“护身符”。我曾见过因为范围沟通不清测试人员扫描了隔壁部门的服务器差点引发严重内部纠纷的案例。2.2 被动信息收集像侦探一样拼图拿到授权后不要急着上扫描器。先进行被动的、非侵入式的信息收集。目标是尽可能多地了解目标而不触发任何警报。域名与子域名枚举工具subfinder,amass,assetfinder以及在线服务如SecurityTrails, Censys。技巧除了常规的字典爆破别忘了检查证书透明度日志CT Logs可用crt.sh很多子域名会在这里暴露。同时尝试从robots.txt、sitemap.xml甚至JS文件中寻找线索。DNS信息挖掘操作使用dig或nslookup查询A记录、AAAA记录、MX记录邮件服务器、TXT记录可能包含SPF配置甚至泄露的内部信息。目的理清目标的网络资产分布邮件服务器往往是安全链条中较弱的一环。搜索引擎黑客技术方法利用Google、Shodan、ZoomEye等搜索引擎的特定语法。例如在Google中搜索site:target.com filetype:pdf可能找到泄露的内部文档在Shodan中搜索net:目标IP段 port:22可以找到暴露的SSH服务。心得花时间构造精准的搜索语句其收获可能远超一次暴力扫描。我曾通过搜索到的错误日志文件直接发现了未授权访问的调试接口。公司信息与人员架构来源领英、公司官网“关于我们”页面、技术社区如GitHub。了解使用的技术栈如React, Spring Boot、开发人员的邮箱命名规则如firstname.lastnamecompany.com这对后续的钓鱼攻击或密码爆破很有帮助。这个阶段输出的成果应该是一张尽可能详细的“资产地图”包括域名、子域名、IP地址、可能的服务、相关技术关键词和人员信息。3. 主动侦察与漏洞扫描3.1 端口与服务发现有了资产列表就可以开始低强度的主动探测了。首要任务是搞清楚这些IP和域名上开放了哪些端口运行着什么服务。工具首选Nmap。它是无可争议的王者。扫描策略初步快速扫描nmap -sS -T4 -p- --open 目标IP。-sS是SYN半开放扫描速度快且相对隐蔽-T4是速度等级-p-扫描所有65535个端口--open只显示开放端口。服务与版本探测针对开放的端口进行更细致的扫描nmap -sV -sC -O -p 开放端口列表 目标IP。-sV探测服务版本-sC运行默认的Nmap脚本-O尝试识别操作系统。规避策略在需要更隐蔽时可以使用-sS -T2 --scan-delay 1s --max-parallelism 1等参数来降低扫描速度模拟慢速攻击。结果分析不要只看端口号。重点分析非常规端口上的常见服务比如在8080端口运行着Apache或在2222端口运行着SSH。这可能意味着管理员想隐藏服务但配置往往更松懈。过时的服务版本Nmap输出的版本信息直接对应着已知的公开漏洞CVE。一个Apache 2.4.49立刻就能联想到CVE-2021-41773路径穿越漏洞。Nmap脚本输出-sC脚本可能会直接发现漏洞比如匿名FTP登录、Redis未授权访问等。3.2 Web应用信息收集与爬取如果发现80/443端口开放Web应用就是主战场。目录与文件枚举工具gobuster,dirsearch,ffuf。字典选择不要只用默认的小字典。结合目标行业如PHP的CMS常用php扩展名字典Java应用可能关注jsp、action等、技术栈来选择合适的字典。SecLists项目提供了非常全面的字典集合。技巧同时进行扩展名枚举如-x php,html,bak,txt和递归扫描。特别注意backup.zip,index.php.bak,.git/,.svn/等可能泄露源码或配置的文件和目录。Web技术指纹识别工具Wappalyzer浏览器插件、whatweb。目的快速识别前端框架如Vue.js, React、后端语言PHP, Java, Python、Web服务器Nginx, Apache、中间件Tomcat, WebLogic、数据库通过特定报错或特征等。这直接决定了后续的漏洞利用方向。爬虫与站点地图绘制工具Burp Suite的爬虫功能、OWASP ZAP的蜘蛛。操作让工具自动遍历整个网站的所有链接、表单和功能点。这能帮你发现那些隐藏在深层链接或需要特定步骤才能访问到的功能比如管理员后台的登录入口、文件上传点、API接口等。3.3 自动化漏洞扫描的定位与使用很多人把漏洞扫描器如Nessus, OpenVAS, AWVS当作“神器”但老手只把它当作一个高效的“初步筛选器”。定位自动化扫描器擅长发现已知的、有明确特征的漏洞比如特定版本的Struts2远程代码执行、心脏滴血漏洞等。它能快速覆盖大量资产给出一个风险基线。局限误报和漏报扫描器会产生大量误报将无害的配置报告为漏洞同时也会漏掉很多逻辑漏洞如越权访问、业务逻辑缺陷和新型的、未公开的漏洞。破坏性风险一些扫描器的检测插件具有侵入性可能造成应用崩溃或数据污染。务必在授权范围内使用并在测试环境先行验证。噪音大全量扫描会产生大量日志和流量极易触发安全设备的告警。使用策略针对性扫描不要一上来就对所有IP进行最高强度的扫描。先针对Web应用使用Web漏洞扫描器针对网络设备使用网络漏洞扫描器。分析而非盲从对扫描器报告中的每一个“高危”漏洞都要手动验证。验证方法包括查看确切的版本号、利用公开的PoC概念验证代码进行无害化测试、分析流量包确认漏洞触发点。作为线索扫描器报告里“中危”或“低危”的发现有时反而是突破口。比如一个“信息泄露——目录列表已启用”的提示可能让你直接下载到源码备份。4. 漏洞利用与权限提升4.1 Web应用漏洞的深度利用这是渗透测试中最体现技术差异的环节。自动化工具到此基本失效需要依靠经验和手动测试。SQL注入手动检测不仅仅是加个单引号看报错。对于数字型、字符型、搜索型、时间盲注、布尔盲注都需要不同的测试载荷。使用Burp Suite的Intruder模块配合SQLMap的tamper脚本用于绕过WAF进行自动化探测和利用。实战技巧遇到疑似注入点先别急着union select。用 and 11和 and 12测试布尔逻辑用sleep(5)测试时间盲注确认注入存在且可被利用后再考虑获取数据。SQLMap的--level和--risk参数可以调整测试强度--tamper参数在绕过简单过滤时非常有效。跨站脚本不只是弹窗反射型XSS和存储型XSS的危害天差地别。存储型XSS可能影响所有用户。测试时要思考利用场景是窃取Cookie还是构造钓鱼页面或是配合其他漏洞如CSRF进行组合攻击绕过过滤现代前端框架和WAF对XSS的防御很强。需要尝试多种Payload如利用HTML5新特性、SVG标签、JavaScript事件的黑名单绕过、编码混淆等。文件上传漏洞绕过检查前端JS验证、服务端MIME类型检查、文件扩展名黑名单/白名单、文件内容头检查。绕过方法包括修改HTTP请求包、使用双写扩展名shell.php.jpg、在文件内容开头添加图片魔数如GIF89a、利用解析漏洞如IIS6.0的/xx.asp;.jpg。获取Shell上传成功后如何执行需要知道文件的绝对路径或Web可访问的URL。结合目录遍历或信息泄露漏洞获取路径。业务逻辑漏洞越权访问这是自动化工具完全无法发现的。核心测试方法是用两个不同权限的账户如普通用户A和管理员B对比同一功能请求的差异。重点测试水平越权用户A操作用户B的数据、垂直越权普通用户执行管理员功能。测试方法修改请求中的ID参数如user_id123、替换Cookie或Token、直接访问本应无权访问的API端点如/admin/deleteUser。组件与框架漏洞快速定位根据之前指纹识别的结果搜索对应框架/组件的历史漏洞。例如识别出Spring Boot Actuator未授权访问就可以直接尝试/actuator/heapdump下载内存快照寻找敏感信息。利用链构造单个漏洞可能无法直接getshell但组合起来就能形成杀伤链。例如一个文件上传一个本地文件包含或者一个反序列化一个Java内存马注入。4.2 系统权限提升获取了Webshell或一个低权限的系统账户后目标转向获取服务器的最高权限。信息收集在受限环境下首先运行一系列命令收集系统信息whoami/id查看当前用户和所属组。uname -a查看内核版本。cat /etc/passwd查看所有用户。sudo -l极其重要查看当前用户能以root身份无需密码运行哪些命令。如果看到/usr/bin/vim,/usr/bin/python等很可能直接提权。find / -perm -us -type f 2/dev/null查找设置了SUID位的文件。ps aux/netstat -tulnp查看运行进程和网络连接。cat /etc/crontab查看计划任务可能有自定义脚本且权限配置不当。内核漏洞提权方法根据收集到的内核版本在本地或利用在线资源如searchsploit搜索对应的本地提权漏洞。操作将exp上传到目标服务器编译如果需要并执行。务必先在本地或测试环境验证exp的稳定性和影响避免导致目标系统崩溃。风险内核提权是最直接但风险最高的方式可能引发系统不稳定。利用配置错误SUID/SGID文件如果找到/usr/bin/find、/usr/bin/nmap旧版本等命令具有SUID位可以利用其特定参数执行命令。例如find . -exec /bin/sh \; -quit。Sudo权限滥用sudo -l列出的命令是金矿。例如如果能以root运行/usr/bin/python则直接sudo python -c import os; os.system(/bin/bash)。计划任务检查/etc/crontab和/var/spool/cron/crontabs/。如果有一个以root身份运行的计划任务脚本且该脚本当前用户可写直接修改它插入反向Shell命令。PATH环境变量劫持如果有一个SUID程序内部调用了系统命令如system(ps)且未使用绝对路径我们可以通过修改当前用户的PATH环境变量让其优先执行我们伪造的ps程序。数据库提权如果通过SQL注入获得了数据库访问权限如MySQL的FILE权限可以尝试写入Webshell或SSH公钥。例如在MySQL中SELECT ?php system($_GET[cmd]);? INTO OUTFILE /var/www/html/shell.php。5. 内网横向移动与权限维持5.1 突破边界进入内网当拿下一台边界服务器如Web服务器后它很可能位于内部网络中。这时渗透测试进入内网横向移动阶段。网络拓扑探测ifconfig/ip addr查看当前机器的网卡和IP地址判断是否存在多块网卡双网卡可能跨网段。arp -a/cat /proc/net/arp查看ARP缓存发现同一网段的其他主机。netstat -rn/route -n查看路由表了解网络结构。cat /etc/resolv.conf查看DNS服务器它通常位于核心网络。端口转发与代理目的因为我们的攻击机Kali在外网无法直接访问内网IP。需要将边界服务器作为跳板把内网服务的端口“映射”到我们本地。工具ssh -L/-R/-D如果边界服务器有SSH服务且我们获得了凭证这是最稳定隐蔽的方式。例如ssh -L 1080:内网目标IP:3389 user边界服务器IP将内网Windows的3389端口转发到本地的1080端口。frp/ngrok功能强大的内网穿透工具配置稍复杂但更灵活。reGeorg/Neo-reGeorg基于HTTP/HTTPS的隧道工具常用于突破严格的网络出口策略将流量封装在Web请求中。内网扫描通过代理或端口转发使用Nmap、masscan对内网网段进行扫描。策略与外网扫描类似但可以更“大胆”一些因为内网的安全监控可能较弱。重点扫描445/SMBWindows文件共享可能存在永恒之蓝漏洞、135/139/445Windows RPC、1433MSSQL、3306MySQL、5432PostgreSQL、6379Redis、5985/5986WinRM等常见的企业服务端口。5.2 凭证获取与密码攻击内网中密码重用和弱密码是普遍问题。本地凭证抓取WindowsMimikatz神器。可以抓取内存中的明文密码、哈希值NTLM Hash。需要管理员权限。Procdump 本地分析如果无法直接运行Mimikatz可用微软官方的Procdump工具将lsass.exe进程的内存转储下来拖回本地用Mimikatz分析。Linux/etc/shadow需要root权限才能读取里面是用户的密码哈希。内存中可能存在的明文密码检查~/.bash_history历史命令、环境变量、正在运行的进程参数ps auxww。哈希传递攻击原理在Windows域环境中很多时候不需要破解密码哈希直接使用哈希值就可以进行身份验证。这就是Pass-the-Hash。工具smbclient,psexec.py(Impacket套件),CrackMapExec。操作crackmapexec smb 192.168.1.0/24 -u administrator -H NTLM哈希 --local-auth用抓取的本地管理员哈希尝试登录同网段其他机器。密码爆破与喷洒密码喷洒针对多个用户名尝试一个或几个常用密码。避免因单个用户多次失败登录而触发账户锁定。工具Hydra,Medusa,CrackMapExec。字典选择内网爆破应使用更贴合企业环境的字典如公司名年份Company2023!、季节年份Summer2023!、默认设备密码等。5.3 权限维持与后渗透在获取域管理员等高权限后为了模拟高级持续性威胁需要部署后门维持访问权限。Web后门在Web目录下留下多个隐蔽的Webshell使用免杀技术、隐藏在图片中、或利用框架特性如Spring Boot的Interceptors。系统后门Linux添加SSH公钥到~/.ssh/authorized_keys创建具有SUID权限的备用后门程序修改/etc/rc.local等自启动脚本。Windows创建计划任务、服务、WMI事件订阅、注册表启动项HKLM\Software\Microsoft\Windows\CurrentVersion\Run。域持久化黄金票据在获取域控的krbtgt账户哈希后可以伪造任意用户的TGT票据从而访问域内任何服务。这是最强大的域持久化手段之一。银票据针对特定服务如MSSQL, CIFS伪造服务票据不需要与域控交互更隐蔽。DSRM密码同步修改域控的目录服务还原模式密码以便在目录服务修复模式下登录。Skeleton Key在域控上注入恶意代码使所有用户都能使用一个通用密码登录同时原密码仍有效但易被检测。重要心得权限维持的所有操作必须严格遵守授权范围。在测试报告中需要详细记录后门的位置和清除方法并在测试结束后协助或指导客户彻底清理。这是职业操守的体现。6. 报告撰写与成果交付渗透测试的最终价值不在于你拿到了多少个“flag”而在于你能否清晰、专业地呈现风险并推动问题解决。报告结构概述测试目标、范围、时间、参与人员、方法论简述。执行摘要用1-2页向管理层汇报。不使用技术术语直接说明发现的最关键风险通常按业务影响排序、整体安全状况评级、最紧迫的修复建议。详细发现这是报告的核心。每个漏洞应包含漏洞标题简明扼要如“SQL注入导致用户数据泄露”。风险等级高、中、低需定义清晰的评级标准通常结合CVSS评分和业务影响。受影响资产具体的URL、IP、端口。漏洞描述用技术语言说明漏洞原理。复现步骤一步一步的操作指南让开发或运维人员能按照步骤验证漏洞。这是关键必须清晰到截图和每次点击。请求与响应附上关键的Burp Suite请求响应数据包脱敏后作为证据。影响分析这个漏洞能被利用来做什么数据泄露、权限提升、系统控制修复建议给出具体、可操作的修复方案。不要说“修复SQL注入”而要说“在XX接口的YY参数处使用预编译语句Prepared Statement替换字符串拼接示例代码...”。附录测试所用的工具列表、扫描的IP/域名全列表、相关参考链接等。沟通与汇报报告初稿完成后最好能进行一次线上的汇报会议向技术团队和管理层讲解主要发现。对于高风险漏洞应在发现的第一时间通过预定的应急渠道进行口头通知而不是等到报告完成。报告不是终点。应提供修复期的技术支持并在修复完成后进行复测验证漏洞是否被真正、正确地修复。渗透测试的实战是一个循环往复、不断深入的过程。它要求测试者既有攻击者的思维和技巧又有建设者的责任和严谨。每一次测试都是对目标系统防御体系的一次压力检验也是对自身知识库的一次更新和挑战。记住工具和技术会过时但那种系统化的思考方式、严谨的操作习惯和对安全的敬畏之心才是这个领域真正的核心价值。

相关新闻