XYCTF-web个人wp
字数 1382 2025-08-29 22:41:01
XYCTF Web题目个人解题思路详解
ez_puzzle 题目解析
解题步骤:
- 分析游戏机制,发现通关后会弹出alert窗口
- 搜索源码中的alert代码,发现存在两个alert
- 通过测试确认第一个alert是成功flag,第二个是失败提示
- 下载源码并修改alert判断条件(将小于号改为大于号)
- 重新通关游戏获取flag
关键点:
- 通过源码分析确定关键alert位置
- 修改判断条件绕过游戏逻辑
ezsql SQL注入题目
漏洞发现:
- 在登录处存在SQL注入漏洞
- 过滤了空格和逗号等关键字符
绕过技术:
- 使用括号代替空格:
(select(1)) - 盲注技术替代逗号限制
- 构造时间盲注payload:
当条件成立时会延时1秒
获取凭证:
- 通过脚本爆破获取:
- double_check值:
dtfrtkcc0czkoua9S - 账号:
yudeyoushang - 密码:
zhonghengyisheng
- double_check值:
后续利用:
- 登录后存在无回显命令执行
- 绕过过滤:
- 使用
$IFS$9代替空格 - 使用反斜杠绕过关键词过滤
- 直接写入webshell
- 使用
Signin 反序列化漏洞
漏洞分析:
- 使用
pickle.loads进行反序列化 ser_cookie使用pickle.dumps序列化
利用步骤:
- 通过
/download路径实现目录穿越读取key- 使用路径:
./.././../
- 使用路径:
- 获取key后构造恶意pickle序列化数据
- 生成恶意cookie实现RCE
- 打入内存马
Now you see me 1 (SSTI)
漏洞利用:
- 使用
#}{#闭合{##} - 使用
{%%}绕过{{}} - 利用未被过滤的request类
绕过技术:
- 使用5个可控的请求头绕过限制
- 使用传统SSTI继承链绕过
os.system过滤:''.__class__.__base__.__subclasses__()[137].__init__.__globals__['popen']("dd if=/flag_h3r3 bs=1 skip=10000000 count=20000000 2>/dev/null|base64").read()
Now you see me 2 (进阶SSTI)
新增限制:
- 禁用了更多request类下的属性
绕过方法:
- 利用未被过滤的
range功能 - 通过
Range头配合jinja2的String和random过滤器获取单个字符 - 使用
config作为中间变量存储获取的字符- 赋值语句:
{%set%0Aa=config%}(用换行符代替空格)
- 赋值语句:
- 逐步构建
request.args访问路径
回显方法:
- 由于无回显且路由检测严格,使用请求头回显数据
出题人已疯 (长度受限SSTI)
限制条件:
- SSTI但限制了长度
- 禁用了open等关键函数
解决方案:
- 尝试使用
rebase或include模板函数进行文件读取(受限) - 利用
__builtins__进行变量赋值(Bottle框架特性)- 赋值示例:
{% __builtins__.__dict__.__setitem__('xy',1) %}
- 赋值示例:
- 通过分段赋值构造open函数:
- 逐步构建open功能
- 也可以构造完整RCE链
关键点:
- Bottle框架模板环境直接关联
__builtins__ - 通过分段赋值绕过长度限制
总结
这些题目涵盖了多种Web安全技术:
- 前端游戏逻辑绕过
- SQL注入与过滤绕过
- 反序列化漏洞利用
- SSTI模板注入及各种绕过技术
- 受限环境下的代码执行
每种技术都展示了不同的绕过思路和利用方法,对于理解Web安全漏洞的本质和防御方法有很好的参考价值。