文章总结: 本文详细记录了2026ISG观安杯CTF中ezrealworld题目的漏洞利用过程。核心是通过Zentao系统的未授权接口(savexmindimport)获取会话令牌,进而利用RESTAPI注册管理员账户并重置admin密码。随后利用CNVD-2023-02709命令注入漏洞,通过repo-create接口的client参数执行命令,结合moveExtFiles预建目录绕过验证,并注意关闭Burp的重定向跟随以保持会话一致,最终实现远程代码执行并读取flag。文章强调了多步漏洞链中会话一致性和细节检查的重要性。 综合评分: 80 文章分类: 漏洞分析,渗透测试,实战经验,WEB安全,红队
2026isg观安杯-ezrealworld
原创
識. 識.
0xNyx
2026年8月19日 21:01 安徽
在小说阅读器读本章
去阅读
访问靶机
dirsearch扫一下目录
很明显存在adminer用户,尝试登录admin账户失败,弱口令无效 开始分析题目的内容与系统的版本号是否存在cve。通过/zentao,得知这是个装在子目录里的 Web 应用说明这个系统存在默认的通用接口但是不会被dirsearch扫到,根据经验想到可以翻看Burp的HTTP history记录
发现了api.php页面,发包查看响应
这里的未授权接口比较隐蔽
经过仔细的搜索发现testcase模块的savexmindimport未授权接口测试发现api.php的格式是api.php?m=模块&f=方法拼接/zentao/api.php?m=testcase&f=savexmindimport&HTTP_X_REQUESTED_WITH=XMLHttpRequest&productID=upkbbehwgfscwizoglpw&branch=zqbcsfncxlpopmrvchsu
这里要注意把cookie删去不然无法得到新的cookie把新的cookie复制下来这里就是漏洞的重点了,savexmindimport 未授权但是服务器依然顺手给它发了zentaosid有了令牌就可以尝试去访问其他接口api.php/v1/users这里我们发现了这个系统的重大漏洞,不需要认证依然可以注册用户的json
成功注册了ctfadmin8用户,通过浏览器重新访问并抓包
但是burp要重新发包,因为我们需要令牌后续推进
下面我们要重置admin1的密码,获取更高权限
重置密码后重新登录,但是这里要注意一点,要重新删除登录状态,然后登录admin账户
浏览器访问获取权限
全程要注意zentaosid令牌的交换探索并抓包分析
这个内容似乎可以发布,抓包看看回显。用 ADMIN_SESSION,发第一个repo-create:
响应是”fail”,但失败信息里漏出了路径:”message”:{“client”:”… /opt/zbox/app/zentao/tmp/log/version_6a840b729bc61.log …”}检查逻辑会判断”这个 version 日志文件存不存在”。如果存在一个同名的目录,它也会认为”验证过了”。用升级模块的moveExtFiles来创建。路径里拼上/test,让它建的是目录而不是文件:
这里采用..%2F..%2F来替换../../,从www目录跳两级到app/zentao/,再进tmp/log/。这里必须关闭不跟随重定向302 会跳到升级完成页,跳过去会刷新 Session,导致version_*.log重新生成。一旦刷新,前面配对的路径就作废,必须从 6.2 重来。
⚠️小白必记:Repeater 里关闭 “Follow redirects”(不跟随重定向)!这个 302 会跳到升级完成页,跳过去会刷新 Session,导致 version_*.log 重新生成。一旦刷新,前面配对的路径就作废,必须从 6.2 重来。Burp 操作:Repeater 右上角 Follow redirection 选 Off,发完保持会话不变,直接做下一步。
响应(重点分析!):”result”:”fail”,”message”:{“submit”:”连接代码库失败…执行命令:cp\t…\t–context=\r\nsed\t…\t–in-place=\r\nmv\t…\t–suffix=\r\nmv\t…\t–suffix= info –username –password dGVzdAo= –non-interactive –no-auth-cache \”\” 2>&1\n错误结果(1):mv:unrecognizedoption ‘–username'”}用能用的后门(本次是x.php.bak):
→uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)当前是nobody用户。读根目录的 flag:访问浏览器获取flag
写到这里,这道题算是从零啃完了。打完复盘感觉比较麻烦的地方有很多,对于我这样的小白很难度还是很大的。第一条肯定是未授权接口,这很考验基本功,审计出为未授权,对于像我这样的0基础代码的人来说很困难,但是我还是想说只要愿意开始,终有一天可以审出来。(愿你我都能成为网安大手子)
未授权的最大的价值往往是泄露出来的凭据与会话。一开始如果老想着“未授权就等于直接
拿到最高权限”,方向就很容易走偏。后来才慢慢回过味来:漏洞利用很多时候不是一步到位的,它是给你递一块垫脚石,后面的路得你自己接。一个能正常响应的未授权接口,加上一个依赖会话信任的接口,拼在一起就是一条进后台的路。这类接口在真实环境里也常见,不一定要多严重,有时候一点点信任上的马虎就够用。
第二条,就是那个重定向。很多新手小白(例如我)做题的习惯是“看见重定向就跟着跳”,因为在浏览器里根本不用管这个,如果不是这个题目的302跳转有问题,我肯定不会注意到这个点。但打这种多步链,会话就是整个链条的胶水——跟了一次重定向,会话一变,前面做的一切全作废,而且它还不报错,你根本没有感觉,只有几次真实的尝试,反复折腾才能看到问题。这道题让我最意外的,是后台管理员这东西没有想象的那么遥不可及。密码居然可以重置,从零开始,最后居然能拿到真正的管理员会话去做远程代码执行,靠的全是一环扣一环、把权限一点点垒起来。每一步单独看都感觉没什么用,连起来才是一条完整的链。打这类题真的别急。我中间容易多次产生放弃的念头,怀疑是不是环境出了问题,结果都是自己某个细节没看仔细。卡住的时候,把每一步的请求原样过一遍,尤其盯死三样东西:请求头里的凭据有没有变、重定向有没有自动跟随、编码有没有被代理工具悄悄改掉,多半就能找到问题。希望后来的人能少走点弯路,别再在重定向机制上耗费无谓的时间。
最后是技术文章的参考:本题考察了多个漏洞的串联性利用
其中有QVD-2024-15263考认证绕过:会话与登录分离,zentaosid 只是临时编号,登录态由接口自查;而RESTAPI只看有没有session、不验证登录,于是未授权拿到的会话可直建管理员、重置并解锁admin。CNVD-2023-02709 考命令注入:repo-create的client 被拼进 shell 执行,用 Tab、换行加哑参数吞掉 –version,配合 moveExtFiles 预建目录伪造”客户端已验证”,再靠302不跟随保住 Session 一致,最后 sed 替换入口文件落地 webshell。核心是信任模型与多步链的状态一致性。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:0xNyx 識. 識.《2026isg观安杯-ezrealworld》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论