致远OA漏洞实战:从信息泄露到RCE的授权测试全流程解析
1. 项目概述最近刚结束一个授权测试项目目标系统是某单位正在使用的致远OA。这类协同办公系统在企业里太常见了承载着流程审批、公文流转、信息发布等核心业务一旦出问题影响面可不小。测试过程中我重点梳理和验证了致远OA近些年曝出的几个高危漏洞并借助一个叫seeyon_exp的自动化利用工具进行了实战演练。这篇文章我就把这次从信息收集、漏洞验证到最终利用的完整过程复盘一下重点聊聊那些容易被忽视的细节、工具使用的门道以及在实际授权测试环境中如何安全、高效地操作。无论你是刚入行的安全测试工程师还是负责运维这类系统的管理员相信这些一手经验都能给你带来些实实在在的参考。2. 核心漏洞原理与利用链拆解致远OA的漏洞历史可以说相当“丰富”很多问题都源于早期版本对用户输入过滤不严、权限校验缺失或是默认配置存在安全隐患。seeyon_exp工具集成了多个漏洞但知其然更要知其所以然我们不能只当个“脚本小子”。下面我挑几个典型且危害高的漏洞拆开讲讲它们的原理和利用逻辑。2.1 信息泄露类漏洞系统的“身份证”被暴露信息泄露往往是渗透测试的突破口它能提供后续攻击所需的关键信息比如后台路径、用户数据、甚至数据库凭证。致远OA A8 状态监控页面信息泄露这个漏洞的路径通常是/seeyon/management/status.jsp。这个页面本意是给管理员查看系统运行状态的但很多管理员疏于访问控制导致未授权用户也能直接访问。页面上会显示服务器版本、JDK版本、中间件信息、部分配置参数等。这些信息有什么用它们能帮你精准定位系统版本从而寻找对应的已知漏洞。比如知道了精确的OA版本你就能去漏洞库搜索是否有该版本未修复的远程代码执行或SQL注入漏洞。致远OA A6 DownExcelBeanServlet 用户敏感信息泄露这个漏洞点在于/seeyon/common/designer/pageDown.jsp?downTypeexcelfilePath这个接口。攻击者可以通过filePath参数构造特定的路径尝试下载服务器上的敏感文件。例如通过../../这样的目录遍历Path Traversal手法有可能读取到WEB-INF/web.xml配置文件里面可能包含数据库连接池的配置甚至是加密过的密码。更危险的是如果系统存在用户信息导出功能且参数可控攻击者可能直接下载包含所有用户姓名、工号、部门甚至加密密码的Excel文件。注意在实际测试中信息泄露漏洞的利用成功率很高因为它们通常不涉及复杂的过滤机制。但切忌一上来就疯狂扫描过快的请求速率很容易触发WAF或IDS的规则导致IP被封锁。建议在测试初期手动访问几个常见的信息泄露路径进行试探。2.2 SQL注入漏洞直达数据库的“后门”SQL注入是老生常谈但在一些OA系统的老版本里依然存在。致远OA A6版本的setextno.jsp和test.jsp就曾曝出过此类漏洞。以test.jsp为例其漏洞原理可能是接收了来自客户端的参数比如一个ID参数未经任何过滤就直接拼接到了SQL查询语句中。攻击者可以提交类似1 AND 11或1 UNION SELECT user(), database() --这样的payload。如果页面返回了数据库用户名、库名等信息就证实了注入点的存在。这类注入点如果恰好存在于管理员后台等权限较高的功能模块危害极大。利用SQL注入攻击者不仅可以拖库导出所有数据还可能通过数据库的特定函数如在MySQL中利用INTO OUTFILE向服务器写入Webshell从而获得系统控制权。不过现代WAF对SQL注入的检测非常严格你需要对payload进行大量的混淆和变形来绕过检测比如使用十六进制编码、注释符分割、等价函数替换等。2.3 文件上传与登录绕过组合拳获取立足点这是seeyon_exp工具集成的核心攻击链之一也是本次测试中成功getshell的关键。它主要利用了ajax.do接口的登录绕过和任意文件上传漏洞。漏洞原理浅析致远OA的某些版本中用于处理Ajax请求的ajax.do接口存在权限校验缺陷。攻击者可以构造特定的HTTP请求在未登录的情况下调用本应需要权限的后台功能例如文件上传。更致命的是该上传功能对文件类型、内容、路径的检查可能形同虚设导致攻击者可以直接上传一个可执行的JSP Webshell文件。利用链还原绕过登录工具会向目标/seeyon/ajax.do发送一个精心构造的POST请求。这个请求可能包含了一个特定的method参数或Content-Type头欺骗系统认为这是一个合法的、已认证的内部请求从而绕过登录校验。上传Webshell在绕过登录后工具会利用同一个接口或关联的上传功能将一段JSP格式的Webshell代码作为文件内容上传到服务器可访问的目录比如/seeyon/webapps/下的某个子目录。seeyon_exp默认使用的是冰蝎Behinder3.0的Webshell其特点是流量加密能有效绕过一些基于特征码的入侵检测。访问Webshell上传成功后工具会返回Webshell的访问地址。攻击者或工具本身就可以通过浏览器或客户端连接这个地址使用预设的密码默认为rebeyond进行连接从而在服务器上执行任意命令。这个漏洞的可怕之处在于它从“门外汉”到“获得服务器控制权”的路径非常短几乎是一步到位。对于防守方来说除了及时打补丁还必须加强对ajax.do这类通用接口的权限校验和输入过滤。3. seeyon_exp工具实战操作详解工具能提高效率但用不好反而会“打草惊蛇”甚至触犯规则。下面我结合这次测试详细说说seeyon_exp的使用要点、参数含义以及每一步背后的操作逻辑。3.1 环境准备与工具获取首先你需要一个Python3环境。这没什么好说的建议使用Python 3.8及以上版本兼容性更好。然后从GitHub上获取seeyon_exp工具。你可以直接git clone仓库或者下载ZIP包。我建议在虚拟机或独立的测试环境中操作避免影响本地其他项目。下载后用pip安装必要的依赖库。通常这类工具会用到requests、argparse等如果运行报错提示缺少模块就用pip install装上即可。实操心得永远不要在连接着公司内网或重要业务的电脑上直接运行这类渗透测试工具。最好准备一个干净的虚拟机环境并配置好系统代理如果需要测试互联网目标确保网络环境的隔离性和可控性。3.2 单目标检测与利用工具的基本用法很清晰。假设我们的目标地址是http://oa.target-company.com。第一步漏洞检测信息收集阶段python3 seeyon_exp.py -u http://oa.target-company.com执行这个命令工具会按照其内置的POC列表依次对目标发起探测请求。这个过程是“只读”的主要是发送一些无害的探测请求检查目标是否存在信息泄露、SQL注入点等漏洞。运行后控制台会打印检测进度并将结果保存到当前目录下的result.txt文件中。你需要仔细阅读result.txt的输出。它会列出发现的所有漏洞类型和对应的URL。例如[] http://oa.target-company.com/seeyon/management/status.jsp 存在A8状态监控信息泄露 [-] http://oa.target-company.com/seeyon/test.jsp SQL注入漏洞检测失败 [] http://oa.target-company.com/seeyon/ajax.do 可能存在登录绕过漏洞这个阶段的目标是“摸清家底”确认哪些漏洞是真实存在的。特别注意即使工具报告某个漏洞存在也需要人工进行二次验证特别是SQL注入要判断是真漏洞还是误报。第二步漏洞利用获取Shell如果检测阶段确认了ajax.do等高风险漏洞存在并且本次授权测试的范围允许进行利用测试那么可以尝试getshell。python3 seeyon_exp.py -u http://oa.target-company.com --att加上--att参数工具就会从检测模式进入攻击模式。它会尝试利用文件上传漏洞将Webshell写入服务器。如果成功命令行会输出Webshell的访问地址类似于[] Webshell uploaded successfully! [] URL: http://oa.target-company.com/seeyon/webapps/xxx.jsp [] Password: rebeyond这里有一个至关重要的细节工具默认上传的是冰蝎3的Webshell。这意味着你不能直接用浏览器访问这个地址那样会看到一堆乱码或者直接下载。你需要使用冰蝎客户端来连接。将工具给出的URL和密码rebeyond填入冰蝎客户端才能成功建立连接并管理服务器。3.3 批量检测与注意事项当需要对一个IP段或大量目标进行初步筛查时批量功能就派上用场了。将目标URL按行存入一个文本文件例如urls.txt。执行批量检测python3 seeyon_exp.py -f urls.txt同样结果会汇总到result.txt。核心避坑指南速率控制工具本身可能没有内置延时。在批量扫描时务必在代码中或通过外部手段如使用time.sleep()简单修改工具添加请求间隔比如每个请求之间暂停2-5秒。疯狂请求不仅不道德而且极易触发目标的安全防护机制导致你的扫描IP被永久封禁。结果筛选result.txt文件可能会很大。建议写个简单的脚本或使用文本编辑器的搜索功能快速筛选出存在ajax.do漏洞或任意文件上传漏洞的目标这些是后续深入测试的重点。授权授权授权这是红线中的红线。seeyon_exp工具说明里也明确写了“仅用于授权测试”。在没有获得书面、明确授权的情况下对任何系统进行漏洞扫描和利用都是违法行为。我们所有的操作都必须严格控制在授权书规定的目标、时间和范围内。3.4 工具背后的请求逻辑分析作为一个有追求的测试者不能只满足于运行脚本。我习惯用Burp Suite等代理工具拦截seeyon_exp发出的所有请求看看它到底做了什么。通过分析我发现它的攻击流程大致如下探测阶段对每个POC工具会发送一个或多个特定的HTTP请求。例如检测status.jsp就是发一个GET请求然后检查返回内容里是否包含“系统状态”、“JDK”等关键词。攻击阶段--att模式请求一向/seeyon/ajax.do?method...发送一个POST请求其报文头或参数可能设置了特定的值用于绕过权限验证。拦截到的请求可能看起来平平无奇但关键就在某个参数值或Cookie里。请求二利用上传功能发送一个 multipart/form-data 格式的POST请求将JSP Webshell作为文件部分上传。文件名可能经过随机化处理以规避简单的文件后缀检查。请求三尝试访问上传的文件路径根据HTTP状态码200成功404失败来判断是否上传成功。理解这些请求能帮助你在工具失效例如目标系统已修补时手动调整payload进行测试或者编写自己的检测脚本。4. 授权测试全流程实战记录下面我模拟一次完整的、合规的授权测试流程将漏洞原理和工具使用串联起来。4.1 前期信息收集与确认在拿到授权书后第一步不是直接运行工具。而是确认目标范围授权书明确写的是oa.xxx.com这个主域名那么测试就严格限制在此域名下不应对其子域名或其他关联系统进行探测。基础信息收集使用nslookup、ping了解目标IP。使用浏览器简单访问确认是致远OA的典型登录界面。查看页面底部或帮助页面初步判断版本例如版权信息显示“致远互联A8-V5”。测试环境准备在我的Kali Linux虚拟机上配置好Python环境、seeyon_exp工具并打开Burp Suite设置好代理准备拦截所有流量以便分析。4.2 渐进式漏洞探测我遵循“先无害后有害先读后写”的原则。手动试探首先在浏览器中手动输入几个常见的信息泄露路径如/seeyon/management/status.jsp。发现返回403 Forbidden看来这个版本可能默认关闭或加强了访问控制。这是一个好迹象说明管理员可能做过一些安全加固。工具初步检测运行python3 seeyon_exp.py -u http://oa.xxx.com。工具运行后在result.txt中发现了一条关键记录[] http://oa.xxx.com/seeyon/common/designer/pageDown.jsp?downTypeexcelfilePathWEB-INF/web.xml 存在任意文件下载漏洞这证实了DownExcelBeanServlet漏洞存在。手动验证与利用我复制这个URL到浏览器果然开始下载一个web.xml文件。打开后找到了数据库连接字符串其中包含了数据库IP、端口、库名和加密的密码。至此我已经拿到了非常敏感的信息并立即记录在测试报告中。在授权测试中到这一步已经可以证明系统存在高危漏洞通常就会暂停进一步利用优先报告。但为了完整演示我们假设授权范围允许继续。4.3 关键漏洞利用尝试根据工具检测结果目标还存在ajax.do漏洞。我决定手动验证一下而不是直接用--att参数。我使用Burp Suite的Repeater模块手动构造一个指向/seeyon/ajax.do的POST请求并参照工具可能使用的payload通过之前拦截的流量学习到在请求体中添加了methodajaxActionmanagerName...等参数。发送请求后返回的响应不是常见的“未登录”或“权限不足”而是一个包含“success”或某些业务数据的JSON响应。这强烈暗示登录绕过是成功的。此时我并没有立即上传Webshell。在真实的授权测试中对于这种能直接getshell的漏洞我会非常谨慎。我需要和客户确认他们是否允许进行这种可能影响系统稳定性的攻击测试。如果允许我会选择在一个非业务高峰时段上传一个无害的测试文件如一个只包含% out.println(test); %的简单JSP来验证上传功能是否真的可用而不是直接上传功能强大的冰蝎马。4.4 后渗透模拟与痕迹清理在获得Webshell连接后假设已获得授权模拟攻击者可能会做的操作信息收集使用冰蝎的虚拟终端执行whoami、ipconfig /allWindows或id、ifconfigLinux、systeminfo等命令了解服务器权限、网络环境。权限提升检查当前用户权限如果是低权限用户尝试利用系统本地提权漏洞。内网探测利用服务器作为跳板探测内网其他主机这必须严格在授权网络范围内进行。数据访问定位OA的数据库尝试连接并导出关键业务数据用于证明漏洞危害而非窃取。重中之重痕迹清理。授权测试的最后一个环节是清理测试过程中产生的所有痕迹这是职业操守的体现。删除Webshell通过冰蝎的文件管理功能找到上传的JSP文件彻底删除。清理日志查找OA应用日志如Tomcat的catalina.out、localhost_access_log、系统日志Windows事件查看器、Linux的/var/log/删除或修改包含你测试IP和攻击payload的日志条目。注意有些日志是实时写入且不可篡改的对于这些应在测试报告中明确说明可能留下的日志痕迹。恢复配置如果测试中修改了任何系统或应用配置如为了验证漏洞临时关闭了某项安全设置必须将其恢复原状。生成报告最后将漏洞发现过程、利用步骤、危害证明截图、修复建议整理成详细的报告交付给客户。5. 常见问题排查与防御建议在实际使用seeyon_exp或进行手动测试时你肯定会遇到各种问题。下面是我总结的一些常见情况及应对方法。5.1 工具运行与利用失败排查问题现象可能原因排查与解决思路运行脚本报ModuleNotFoundErrorPython依赖库未安装根据报错信息使用pip install requests或其他缺失的库名安装。检测结果全部为[-]失败1. 目标不存在致远OA2. 目标网络不可达3. 所有漏洞已修复4. WAF/IPS拦截了探测请求1. 确认目标URL正确且系统为致远OA。2. 用ping或curl检查网络连通性。3. 手动访问几个典型路径如登录页确认。4. 使用Burp Suite拦截请求查看是否被WAF返回了拦截页面如403、500错误页带安全厂商标识。尝试降低扫描频率或修改User-Agent等请求头。检测到漏洞但利用(--att)失败1. 上传路径不可写2. 文件内容被安全软件过滤3. 权限绕过方式在新版本已失效1. 尝试使用工具的其他上传点如果支持。手动测试文件上传功能确认目录权限。2. 尝试上传一个内容简单的文本文件看是否成功。如果成功说明对JSP等动态文件做了过滤。可以尝试修改Webshell代码进行混淆或编码。3. 分析Burp拦截的请求和响应看绕过请求是否返回了错误信息。可能需要研究新的绕过方式。上传成功但无法连接Webshell1. Webshell路径被工具猜错2. 冰蝎密码不对3. 服务器端禁用了JSP执行1. 工具返回的路径是猜测的。尝试使用目录遍历漏洞或结合其他信息泄露寻找真实的Web应用目录结构。2. 确认使用的冰蝎版本与Webshell版本匹配。冰蝎3的shell用冰蝎3客户端连接。3. 如果服务器是NginxTomcat且Tomcat只处理特定目录可能上传的路径不在应用目录下。需要找到正确的上下文路径。5.2 针对致远OA系统的防御加固建议对于系统管理员而言亡羊补牢永远不晚。以下是一些关键加固措施及时更新与补丁管理这是最根本、最有效的措施。立即关注致远官方发布的安全公告和补丁并尽快在测试环境验证后应用到生产系统。很多被利用的漏洞都是早已公布并有官方补丁的。最小化权限原则应用权限运行Tomcat等中间件的系统用户不应具有过高权限如root、Administrator。使用专用低权限账户。目录权限严格限制Web应用目录如webapps/seeyon的写权限。静态资源目录只读仅允许上传功能的特定目录有写权限且该目录应禁止脚本执行。数据库权限为OA应用连接的数据库账户分配最小必要权限通常只授予特定库的增删改查权限杜绝FILE、PROCESS等高级权限。强化访问控制后台管理入口将后台管理地址修改为不易猜测的路径并设置强密码和二次验证。敏感接口对ajax.do、*.jsp等通用或敏感接口实施严格的访问控制列表ACL或基于角色的权限验证确保每个请求都经过充分的会话校验。信息泄露路径删除或重命名status.jsp、test.jsp等非必需的管理和测试页面。如果必须保留则配置防火墙策略只允许管理员IP访问。部署安全防护设备WAFWeb应用防火墙在OA服务器前端部署WAF可以有效拦截SQL注入、路径遍历、恶意文件上传等常见Web攻击。IDS/IPS入侵检测/防御系统监控网络流量对异常访问模式如短时间内大量访问敏感路径和已知攻击payload进行告警或阻断。安全编码与配置对所有用户输入进行严格的过滤和校验使用参数化查询杜绝SQL注入。文件上传功能要同时校验文件后缀、文件类型MIME Type、文件内容并将上传的文件重命名、存储在非Web可访问目录通过程序映射访问。定期进行安全审计和漏洞扫描主动发现潜在风险。5.3 授权测试中的法律与道德边界最后我必须再次强调合规的重要性。授权测试是一把双刃剑用得好可以帮助企业提升安全用不好则会害人害己。获取书面授权测试前必须获得目标系统所有者的明确书面授权授权书应清晰界定测试目标、范围、时间、方式以及双方的责任。任何超出授权范围的操作都是非法的。最小影响原则测试应以不破坏系统稳定性、不影响正常业务为前提。避免使用压力测试工具进行DDOS避免删除或修改真实业务数据。对于上传Webshell等高风险操作务必事先沟通并获得许可。数据保密在测试过程中接触到的任何数据包括漏洞利用过程中获取的数据都必须严格保密仅用于撰写测试报告证明漏洞危害并在报告交付后妥善销毁不得留存、传播或用于其他任何目的。完整报告测试结束后应提供详尽、专业的报告不仅说明漏洞更要给出清晰、可操作的修复建议帮助客户真正解决问题。这次对致远OA的测试复盘让我再次感受到安全测试不仅仅是技术活更是责任活。工具让我们的工作更高效但对漏洞原理的深入理解、对测试流程的严谨把控、以及对法律边界的清晰认知才是我们在这个行业里安身立命的根本。每一个漏洞的背后可能都关系着一个企业的正常运转谨慎再谨慎总是没错的。