
1. 项目概述从“汉王e脸通”漏洞标题说起最近在安全圈里一个关于“汉王e脸通”的漏洞分析标题引起了我的注意。标题里提到了两个关键点meetingFileManage.do接口的未授权访问风险以及与之相关的SQL注入漏洞。这其实是一个非常典型的“组合拳”式漏洞场景在不少企业级应用尤其是那些历史包袱比较重的OA、门禁、考勤系统中并不少见。我花了些时间基于这个线索进行了一次完整的漏洞排查与验证实战整个过程就像一次标准的安全审计从信息收集到漏洞验证再到风险定级。今天我就把这个过程拆解开来手把手分享给你。无论你是刚入门的安全爱好者还是想提升实战能力的渗透测试工程师这篇内容都能给你提供一个清晰的排查思路和实操参考。我们不光要找到漏洞更要理解漏洞为什么会产生以及如何系统性地发现这类问题。2. 目标分析与信息收集策略2.1 理解“汉王e脸通”及其典型架构“汉王e脸通”从名字上看很可能是一款集成了人脸识别功能的门禁、考勤或会议管理系统。这类系统通常采用B/S架构后端使用Java常见Spring MVC/Struts2框架或PHP开发前端通过浏览器访问。.do后缀的接口强烈暗示它可能使用了Struts2框架或者是某种自定义的MVC框架将.do作为动作请求的标识。meetingFileManage.do这个接口名直译为“会议文件管理”功能上很可能涉及会议相关附件的上传、下载、列表查看、删除等操作。这类功能点往往是安全问题的重灾区因为它同时涉及文件操作、权限校验和数据库交互。在开始动手之前我们需要先尽可能多地收集目标信息。假设我们拥有一个合法的测试环境例如公司内部测试服务器、授权的渗透测试靶场我们的第一步就是进行指纹识别。2.2 多维度信息收集实战信息收集不是漫无目的地扫描而是有策略地勾勒出目标的应用轮廓。1. 基础指纹识别使用工具如WhatWeb、Wappalyzer浏览器插件或nmap的脚本快速识别Web服务器如Nginx/Apache/Tomcat、后端语言JSP/PHP、前端框架等。对于Java应用特别注意是否有JSESSIONID这样的Cookie以及错误页面是否暴露了Tomcat、Spring Boot等信息。2. 目录与接口探测这是发现meetingFileManage.do这类接口的关键。我会使用dirsearch、gobuster或ffuf等工具搭配一个强大的字典。字典需要专门包含针对Java应用的常见路径如/api/*/*.do/*.action/*.jsp/servlet/*/manager/*(Tomcat管理后台但通常有认证) 同时也要关注可能存在的备份文件、配置文件如.git/目录、WEB-INF/web.xml泄露、*.bak文件等。3. 前端代码分析直接访问系统通过浏览器开发者工具F12查看“网络”请求可以直观地看到页面加载过程中请求了哪些API接口其中就可能包含.do接口。查看JavaScript文件有时能找到完整的接口路径甚至参数结构。这就是标题中meetingFileManage.do这个接口名最可能的来源之一——要么是扫描发现的要么是JS文件里暴露的。注意在真实授权测试中所有扫描动作应控制频率避免对生产系统造成压力。使用--delay参数设置请求间隔是基本素养。3. 未授权访问漏洞的排查与验证3.1 什么是“未授权访问”未授权访问漏洞的本质是“权限校验缺失”。系统没有对用户的访问请求进行有效的身份认证你是谁和授权检查你有权做这个吗。对于meetingFileManage.do接口正常流程应该是用户登录后携带有效的会话Cookie或Token来访问该接口进行文件管理操作。如果攻击者在不登录、不提供任何有效凭证的情况下直接访问该接口并能执行操作如列出文件、上传文件这就是典型的未授权访问。3.2 手工验证未授权访问假设我们已经通过信息收集确定了接口完整URL为http://target.com/eFace/meetingFileManage.do。验证步骤清除会话状态打开一个全新的浏览器会话或无痕模式确保不携带任何该系统的Cookie。直接访问在地址栏直接输入上述URL并访问。观察响应最坏情况页面返回了正常的文件列表JSON数据或HTML页面或者出现了文件上传界面。这直接证实了未授权访问。常见情况返回HTTP状态码302重定向到登录页或返回401 Unauthorized、403 Forbidden。这通常意味着有校验。需要深究的情况返回200 OK但内容是空值、错误信息如“参数错误”或看似无意义的乱码。这不能立即断定需要进一步测试接口功能。测试功能参数如果直接访问返回200但内容不明尝试添加功能参数。通过分析同类系统或猜测常见参数可能有actionlist或methodquery(列出文件)actionupload(上传需要配合POST请求和文件体)id1(下载或删除指定ID的文件) 例如尝试访问http://target.com/eFace/meetingFileManage.do?actionlist观察是否返回了敏感数据如会议记录、内部文件列表。使用工具辅助验证可以使用Burp Suite的Repeater模块或curl命令进行更灵活的测试。# 测试未授权列表功能 curl -v http://target.com/eFace/meetingFileManage.do?actionlist # 测试未授权下载功能 (假设文件ID为10) curl -v http://target.com/eFace/meetingFileManage.do?actiondownloadfileId10 -o test.file如果这些命令在没有Cookie的情况下成功获取到了数据或文件漏洞即存在。实操心得很多系统的权限校验依赖于前端菜单渲染或按钮隐藏后端接口的校验逻辑可能不完整。因此直接绕过前端访问后端API是发现未授权漏洞的核心方法。对于.do、.action接口要特别注意Struts2的默认配置可能导致的权限问题。3.3 未授权访问的潜在风险一旦确认meetingFileManage.do存在未授权访问其风险等级需要根据功能来定未授权文件列表/下载导致敏感信息泄露会议纪要、内部文件。未授权文件上传风险极高攻击者可能上传WebShell从而获取服务器控制权。即使有文件类型检查也可能存在绕过方式。未授权文件删除导致业务数据丢失造成服务中断。4. SQL注入漏洞的深度挖掘与利用4.1 从接口功能推测注入点meetingFileManage.do作为文件管理接口其数据库操作很可能围绕“文件”这个实体。常见的SQL操作场景包括查询SELECT根据会议ID、文件名、上传者、时间等条件查询文件列表。插入INSERT上传文件时向数据库插入文件记录文件名、路径、大小、上传者ID等。更新UPDATE可能用于重命名文件、更新文件状态。删除DELETE根据文件ID删除记录。对应的HTTP参数可能就是注入点例如meetingId查询某次会议的所有文件。fileName按文件名模糊查询。fileId下载或删除指定文件。uploadUserId查询某用户上传的文件。page,rows分页参数。4.2 手工注入测试流程我们以最常见的fileId参数为例假设接口为http://target.com/eFace/meetingFileManage.do?actiondownloadfileId123第一步探测注入类型与闭合方式尝试添加单引号观察响应变化。fileId123如果页面返回数据库错误信息如MySQL的“You have an error in your SQL syntax”说明参数被直接拼接到SQL语句中且可能存在注入。如果页面显示“文件不存在”或正常下载则可能被正确处理或过滤。第二步判断闭合方式与注入类型如果报错我们需要判断闭合方式。常见的有数字型、单引号字符型、双引号字符型等。fileId123 and 11 -- fileId123 and 12 -- fileId123 and 11 fileId123 and 12通过对比and 11真和and 12假时页面的响应差异如文件能否下载、返回内容长度是否不同可以判断是否存在布尔盲注。--是MySQL的注释符用于注释掉后面的SQL代码。第三步信息获取以MySQL为例假设为字符型注入假设闭合方式是单引号且存在布尔盲注。获取当前数据库名fileId123 and length(database())1 -- 判断库名长度 fileId123 and substr(database(),1,1)a -- 逐位猜解库名获取表名fileId123 and (select count(table_name) from information_schema.tables where table_schemadatabase())1 -- fileId123 and substr((select table_name from information_schema.tables where table_schemadatabase() limit 0,1),1,1)a --猜测与文件相关的表名可能为meeting_file、attach_file、sys_file等。获取列名fileId123 and (select column_name from information_schema.columns where table_namemeeting_file limit 0,1)id --关注file_path、real_name、save_name、upload_user_id等敏感列。拖取数据fileId123 and substr((select concat(file_path,:,real_name) from meeting_file limit 0,1),1,1)/ --可以获取文件在服务器上的存储路径和真实文件名结合未授权访问可能直接构成严重漏洞链。4.3 使用Sqlmap进行自动化验证手工注入能加深理解但效率低。在确认存在注入迹象后可以使用sqlmap进行自动化利用但务必在授权环境下进行。基本命令sqlmap -u http://target.com/eFace/meetingFileManage.do?actiondownloadfileId123 --batch--batch自动选择默认选项。如果参数需要Cookie添加--cookieJSESSIONIDxxx如果是POST请求使用-r request.txt文件从Burp Suite复制原始请求进阶参数--dbmsmysql指定数据库类型加速检测。--current-db获取当前数据库名。-D database_name --tables列出指定数据库的所有表。-D database_name -T table_name --columns列出指定表的所有列。-D database_name -T table_name -C column1,column2 --dump拖取指定列的数据。注意事项Sqlmap的流量特征明显在WAFWeb应用防火墙或IDS入侵检测系统面前容易被拦截。在实际测试中可能需要使用--tamper脚本如space2comment对payload进行混淆或降低请求频率(--delay)。5. 漏洞组合利用与深度利用场景5.1 未授权访问 SQL注入的连锁反应单独一个未授权访问或SQL注入危害已经不小但两者结合可能产生“112”的效果。场景一无接触信息泄露攻击者无需登录通过未授权访问直接调用存在SQL注入的接口。例如构造meetingFileManage.do?actionlistmeetingId1 and ... --即可在未授权的情况下通过盲注手段窃取数据库中的所有会议文件信息、用户信息甚至管理员密码哈希。场景二通往RCE远程代码执行的路径如果通过SQL注入结合LOAD_FILE或INTO OUTFILE等函数需特定权限攻击者可能读取服务器上的敏感文件如/etc/passwd、应用配置文件或写入一个WebShell文件到Web目录。如果同时存在未授权文件上传甚至可以直接上传WebShell利用SQL注入获取的路径信息实现精准打击。5.2 针对文件上传功能的深入测试如果meetingFileManage.do的actionupload功能也存在未授权或权限绕过那么文件上传漏洞本身就是一个独立且高危的漏洞。测试点包括前端校验绕过直接使用Burp Suite拦截修改上传请求绕过JavaScript校验。文件类型绕过修改Content-Type为image/jpeg。制作图片马将WebShell代码嵌入图片EXIF信息。利用双扩展名如shell.php.jpg如果系统仅按最后一个扩展名校验。利用空字节截断如shell.php%00.jpg在某些老旧系统中有效。解析漏洞利用针对特定服务器如IIS的*.asp;.jpg解析漏洞Apache的多扩展名解析特性。内容校验绕过如果系统检查文件头则需要在WebShell内容前添加合法的文件头如GIF89a。6. 漏洞修复建议与安全开发规范6.1 针对已发现漏洞的紧急修复未授权访问修复强制身份认证在所有需要权限的接口尤其是*.do,*.action的入口处添加统一的权限拦截器Interceptor或Filter校验Session或Token的有效性。最小权限原则即使认证通过也要根据用户角色校验其是否有权执行当前操作如删除文件是否属于自己。默认拒绝对不明确的访问请求默认返回403 Forbidden而非302到登录页避免暴露接口存在性。SQL注入修复使用预编译语句PreparedStatement这是根治SQL注入的唯一标准方法。确保所有数据库操作包括查询、更新、删除都使用PreparedStatement并将用户输入作为参数绑定而非字符串拼接。使用安全的ORM框架如MyBatis时务必使用#{}参数语法禁止使用${}进行字符串拼接。严格的输入验证在业务逻辑层对输入参数进行严格的类型、长度、格式校验如fileId必须是正整数。最小化数据库权限连接数据库的应用程序账号只赋予其必需的最小权限如只有SELECT、INSERT没有DROP、FILE权限。6.2 建立长期安全防护机制安全开发生命周期SDL将安全考虑嵌入需求、设计、编码、测试、部署全流程。定期安全审计与渗透测试对系统特别是老旧系统进行定期的代码审计和黑盒渗透测试。部署WAF作为一道防线可以拦截常见的SQL注入、未授权访问等攻击请求。日志审计与监控详细记录所有访问日志特别是对敏感接口的访问设置异常访问告警如短时间内大量未授权访问meetingFileManage.do。7. 实战排查中的常见问题与技巧实录在这次的排查模拟和以往的经验中我总结了一些容易踩坑的地方和实用技巧。问题1页面没有明显错误回显如何判断注入这是盲注的典型场景。除了布尔盲注还可以尝试时间盲注。fileId123 and sleep(5) --如果页面响应延迟了大约5秒说明sleep()函数被执行存在时间盲注。此时sqlmap的--techniqueT参数就派上用场了。问题2使用Sqlmap跑不出来但手工测试有感觉。可能原因WAF拦截使用--tamper参数尝试绕过或使用--random-agent伪装User-Agent设置--delay降低请求频率。Token/CSRF防护某些接口需要携带动态的CSRF Token。需要先用脚本或手动获取Token再带入sqlmap的请求中使用--csrf-token和--csrf-url参数。参数格式复杂参数可能是JSON格式或经过编码。最好将完整的POST请求保存为文件用-r参数让sqlmap去解析。技巧如何快速定位类似*.do的未授权接口除了目录扫描一个高效的方法是分析前端JS。使用浏览器开发者工具在“源代码”或“网络”选项卡中搜索关键词如api、do、action、url:、load(。经常能找到硬编码在JS里的接口路径和参数名。对于打包的JS如果存在Source Map文件泄露这是另一个常见漏洞甚至可以直接还原出清晰的源代码和接口定义。技巧利用错误信息辅助判断即使页面不显示详细错误有时HTTP状态码或微小的响应差异也能提供线索。比如一个正常的fileId123返回200而fileId123返回500内部服务器错误这强烈暗示存在语法错误。使用Burp Suite的Comparer工具对比两次响应的差异有时能发现隐藏的错误信息。排查这类漏洞耐心和细心是关键。每一个参数都值得测试每一个异常响应都值得深究。从汉王e脸通的meetingFileManage.do出发我们实际上演练了一套针对Web应用常见漏洞的排查方法论。这套方法不仅适用于这个特定系统也适用于绝大多数基于B/S架构的企业应用。真正的安全能力就体现在这种从一点线索系统性地推演出整个攻击面并完成验证的思考与执行过程中。