GHCTF比赛web方向详细多种解(全)
字数 1372 2025-08-29 08:30:12
GHCTF Web方向题目解析与技巧总结
文件上传与SSTI注入
题目分析
题目描述了一个文件上传服务器,存在SSTI(服务器端模板注入)漏洞。
关键点:
- 漏洞位置在查看文件内容处
- 访问路径为
/file/文件名,如/file/1.txt - 源码中的
parse方法解析XML,寻找name属性并返回其值
利用方法
- XML注入:构造恶意XML文件实现数据外带
- SSTI利用:通过文件上传触发模板注入漏洞
SQL注入绕过技巧
题目特征
- 过滤了空格字符
- 存在5个位置但只有4个回显位
利用方法
- 使用sqlmap:
sqlmap -r sql.txt -p id --dbs -T flag -C flag --dump - 手工注入:
- 绕过空格过滤(使用注释/**/或+号替代)
- 通过回显位获取flag表中的flag字段
PHP反序列化漏洞
POP链构造方法
- 寻找起点:优先查找
__destruct或__construct魔术方法 - 终极调用点:寻找可能导致代码执行的函数如
call_user_func - 链式调用:
- 未定义方法触发
__call - 未定义属性触发
__get - 对象作为函数调用触发
__invoke
- 未定义方法触发
关键函数
array_walk:遍历数组并对每个元素执行回调函数- 利用PHP原生类进行文件操作
文件包含与路径穿越
利用方法
- 通过
/proc/self/environ获取环境变量 - 路径穿越读取源码:
../../../../etc/passwd - 读取Docker环境文件
.htaccess文件上传绕过
绕过技巧
- 添加图片文件头:
或16进制头:#define width 1337 #define height 1337\x00\x00\x8a\x39\x8a\x39 - 设置Content-Type为
image/gif - 上传恶意.htaccess后再上传webshell
MD5强碰撞利用
工具与方法
- 使用
fastcoll_v1.0.0.5.exe生成碰撞文件 - 通过BP发包利用碰撞漏洞
- 本地生成payload直接攻击
PHP过滤器链利用
利用步骤
- 读取
/proc/self/maps获取内存映射信息 - 定位libc库位置:
php://filter/convert.base64-encode/resource=/lib/x86_64-linux-gnu/libc-2.31.so - 使用工具生成利用代码:
- GitHub项目:
php-filter-iconv - 将maps和libc文件放在同一目录
- GitHub项目:
会话伪造与加密绕过
利用方法
- 爆破获取管理员凭证(如admin/admin123)
- 读取环境变量获取加密密钥和IV
- 本地生成加密payload:
# 在Linux系统上运行 from Crypto.Cipher import AES # 使用获取的key和IV加密payload - 将加密结果放入session字符串
Gopher协议利用
攻击步骤
- 扫描发现app.py源码
- 绕过127.0.0.1限制(使用0.0.0.0)
- 构造Gopher请求:
/Gopher?url=gopher://0.0.0.0:8000/_POST%20/Manage%20HTTP/1.1%0D%0AHost%3A%200.0.0.0%3A8000%0D%0AContent-Type%3A%20application/x-www-form-urlencoded%0D%0AContent-Length%3A%207%0D%0A%0D%0Acmd%3Denv%0D%0A - BP发包时双重URL编码绕过
字符串逃逸与死亡绕过
利用原理
- 利用替换机制导致字符串长度计算错误
- 例如将"flag"替换为"error"导致长度变化
- 构造特定用户名实现字符逃逸:
a:2:{s:8:"username";s:29:"admin";s:5:"admin";s:5:"admin";}
WAF绕过技巧
常见方法
- 使用双引号包裹payload避免语法错误
- 多行payload使用回显头验证执行
- 绕过模块限制(如os模块):
- 使用
__import__动态导入 - 通过子进程调用
- 使用
提权方法
参考资源
- GTFOBins(https://gtfobins.github.io/)
- 利用系统工具如
wc进行提权
以上总结了GHCTF比赛中Web方向的多种解题技巧和关键知识点,涵盖了文件上传、注入漏洞、反序列化、文件包含、协议利用等多个方面,提供了详细的利用方法和绕过技巧。