NICOCTF 2022 Writeup (Winter Camp Final)
Misc
签到
Skip.
huaji?
下载后加jpg后缀,接着右键打开查看详情,之后hex Decode即可
提交flag后发现不对,查看图片后发现有压缩包字样,提取压缩包后,发现该压缩包需要密码,而密码就是 ctf_NISA_2022
最终flag
flag{Nls@_FumYEnnOjy}
套娃
题目给了 raw 文件和 array.txt,盲猜取证题
先把array.txt解了,array.txt解出来是一堆数组,Crypto为unicode-base64-base32-hex,很套
得到
1 | 32, 24, 6, 28, 15, 31,7, 23, 13, 27, 30, 33,12, 8, 5, 26, 29, 16,34, 22, 2, 14, 9, 17,21, 1, 19, 10, 4, 36,35, 25, 11, 20, 3, 18 |
接着用 Volatility 分析下镜像文件
vol搜flag无果,搜Desktop发现有个pwd.txt和flower.zip
得知它们的地址后提取出来
1 | pwd.txt - 0x000000001ddb8f20 |
pwd.txt 解码过程 Base32 -> Base64 得到 Q5R2Ln3nLqUnQaIV
1 | (./0-9A-Za-z=) |
解码后得到 pwD_1s_h3re!
返回flower.zip压缩包,密码就是**pwD_1s_h3re!**,
解压后得到破碎的图片
这里就得结合上边的array.txt文件了
我的猜想是图片的序号对应数组里边的位置
1-32
2-24
…
然后发现这是个6x6的矩阵图
1 | 32, 24, 6, 28, 15, 31 |
写脚本处理下得到
1 | from PIL import Image |
接下来把上面的字母横排一下就好
1 | 58s4vb6rt4pt5r32yd6ht5u656555r6796524vi69r2yd5om6w0 |
此处编码
Twin-Hex Cypher Encoder/Decoder
flag{I_am_Guwanneme_servant_Gulf}
bqt
Ctrl+A全选后发现一行神秘字符 **c8e9aca0c3f4e6e5f2a1a0d4e8e5a0e6ece1e7a0e9f3baa0e6ece1e7fbf7e5e6e5efe9e4eae7efe5e4f3e6e9eff2f0e5e6e4e6e7e7e6e4f3e5fd**
也就是
1 | **c8 e9 ac a0 c3 f4 e6 e5 f2 a1 a0 d4 e8 e5 a0 e6 ec e1 e7 a0 e9 f3 ba a0 e6 ec e1 e7 fb f7 e5 e6 e5 ef e9 e4 ea e7 ef e5 e4 f3 e6 e9 ef f2 f0 e5 e6 e4 e6 e7 e7 e6 e4 f3 e5 fd** |
直接转十进制会得到一堆乱码,凭直觉每个字符串依次减掉1位,最终减掉128位恢复正常 String,写个脚本跑下即可出 Flag
1 | import re |
NSSCTF{wefeoidjgoedsfiorpefdfggfdse}
where_is_here
[alert]又到了👴最喜欢的OSINT🌶,👴正在出你的户籍[/alert]
题目给出的是一家旅馆的内部
直接丢Google得出具体地址在厦门市,在厦门鼓浪屿的一家宾馆内,结合题目意思,需要找的是旅馆,检索了鼓浪屿100多家旅馆,最后在XX路段找到了一模一样的旅馆内部。
NSSCTF{厦门市思明区鼓浪屿XX路25号17XXXXXXXXX}
不愉快的地方
[alert]这题也是OSINT,👴太开心🌶[/alert]
题目给了一张图片,直接丢到 Google 识图里,得出地址在韩国首尔的清溪川内景,经纬度谷歌map定位一下就好了,但是这点是最麻烦的,有十几种结果,平台上我提交十几次都不对,最后通过一些暴力手段查到了正确的经纬度 37.56,126.97
找人很容易,直接到官网社工就行。。。
NSSCTF{清溪川_37.56,126.97_金贤民_6801}
神秘数字
做这题可以温习大天朝上下四千年历史(雾
题目描述
这里有五行神秘字符,看看它们分别代表什么吧 ovty fgh wnn 0678 3127 2347 0155 5074 MAZY AGD BMY NFA XOBV UCL A MFJI 40227 44801 36780 27620 YPTC QVIO MGBHU JYK
汉字是一种伟大的创造,是史上迄今为止连续使用时间最长的主要文字,也是上古时期各大文字体系中唯一传承至今的文字体系,到了现代,随着时代和信息的发展,人们从中引出了不少变形,他们都在为着汉字的安全性做出了贡献,时至今日,它们可能已经淘汰,但是对我们来说,他们仍有着一些现实意义。请你将得到的一句话转换成md5并包上NISA字符,flag形式为NSSCTF{md5值大写}
先对字符进行分组,大写的一组、小写的一组、混合的一组、纯数字的一组
得到
1 | ovty fgh wnn |
通过一系列查询,发现末尾字母叫做倉頡码,以下是一些说明
有了代码,直接解码即可最后一行得到
- YPTC(虚)
- QVIO(拟)
- MGBHU(现)
- JYK(实)
然后通过倉頡码延伸出其它的编码分别是:
四角码、郑码输入、中文电码、五笔86
最后一个个解密即可
- 五笔86:ovty(数) fgh(十) wnn(亿)
- 中文电码:0678(合) 3127(法) 2347(操) 0155(作) 5074(者)
- 郑码输入:MAZY(每) AGD(天) BMY(都) NFA(体) XOBV(验) UCL(着) A(一) MFJI(种)
- 四角码:40227(有) 44801(共) 36780(识) 27620(的)
得到句子
数十亿合法操作者每天都体验着一种有共识的虚拟现实
最后md5加密下即可
NSSCTF{BE29981639FCE3A4B719E4347FED9E43}
为什么我什么都看不见
010打开文件,补上 89 50 得到一张图片
仔细观察,发现有个压缩包黏在里边,binwalk
分离压缩包得到
NSSCTF{Wlec0me_to_NiSa2022}
bilala的二维码
题目给了个二维码,补全定位标后
得到一串链接,访问后下载图片,得到可爱的pikachu
binwalk
分离出三个文件,暂且把它们叫做
a.jpg、b.jpg、c.zip
b.jpg存在JPHS加密,这里通过爆破得到密码,
最后发现JPHS屁用没有,鬼知道官方直接交分辨率+Morse就行了
而c.zip存在一个密码,爆破后得到密码为 NiSA ,打开里边的音频文件后发现是个morse码
Morse表详见:https://www.qsl.net/bg3tt/zl/mesdm.htm
morse解得
PART1:M0RS34ND
刚开始题目啥都没给,最后的提示是分辨率+压缩包密码是战队信息。。(出题人也承认了这是脑洞题)。。可能是我脑子转不过来吧。。=-=
PART2为a.jpg的分辨率
最后FLAG
NSSCTF{MORS34NDN282X231}
流量包里有个熊
下载文件,发现是个流量包,.pcap加上后打开流量包,分析流量。。
发现客户端最后下载了一张图片
直接提取得到 bar.jpg
图片里藏了一个压缩包
分离后得到一堆数据
仔细查看,发现一些规律,rot13转成FFD8….,得到
另存为 bear2.jpg
图片为隐藏水印,直接用工具解开得到
NSSCTF{S0_clev2l_You}
破损的flag
usb流量分析题,修改后缀名后打开,发现usb流量
提出键盘流量
得到数据
写脚本还原
1 | # key="0018 000d 000e 0012 0011 000d 000e 0018 0036 0017 0009 0019 0005 000b 001c 000b 000d 000c 0013 0012 000e 0015 0007 0006 0019 000a 0015 0007 0006 0019 000a 0013 0012 000e 0014 001a 0016 001d 0017 0009 0019 0005 000b 0018 000d 000e 0012 001a 0004 001d 001b 0007 0014 0004 0016 0008 001a 0016 0007 0015 0013 0012 000e 001b 0007 0009 0019 000c 000e 000f 0013 0011 000d 000e 001a 0016 0007 0015 0015 0009 000a 001c 0015 0007 0006 0019 000a 0018 000b 0011 0010 000e 0005 000b 000d 0010 001c 000b 000d 000c" |
得到
1 | UJKONJK,TFVBHYHJIPOKRDCVGRDCVGPOKQWSZTFVBHUJKOWAZXDQASEWSDRPOKXDFVIKLPNJKWSDRRFGYRDCVGUHNMKBHJMYHJI |
然后对上述字母进行分组
得到键盘编码
1 | ujko njk, tfvbh yhji pok rdcvg rdcvg pok qwsz tfvbh ujko wazxd qase wsdr pokx dfv iklp njk wsdr rfgy rdcvg uhnmk bhjm yhji |
解码
1 | i m g u l f f l a g i s w e l c o m e t f j n u |
按格式排好
1 | im gulf flag is welcome t fjnu |
NSSCTF{welcome_to_fjnu}
Web
破损的flag
题目给了一堆U+202E和U+2066,这里边会把字符逆转
也就是如果我们提交 ryu1nser 会转成 resn1uyr,和后边的 pwn 签到题有异曲同工之妙
exp
1 | http://114.5.1.4:19198/?ahahahaha=jitanglailo&%E2%80%AE%E2%81%A6%55%67%65%69%77%6F%E2%81%A9%E2%81%A6%63%75%69%73%68%69%79%75%61%6E=%E2%80%AE%E2%81%A6%20%46%6C%61%67%21%E2%81%A9%E2%81%A6%4E%31%53%41%43%54%46 |
出自:CVE-2021-42574(https://nvd.nist.gov/vuln/detail/CVE-2021-42574)
level-up
第二关在 robots.txt
第二关需要进行md5碰撞
这里简单生成payload撞一下即可
1 | array1=1%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00b%87%24%8E%A1%E8H%B3y%BF%93%B8U%D2%F0e%1Bih%D3%5CD%2A%0B%FF%21%83%FA%AF-4%CF4%9B%F1%EF%5D%0D%3D%C1%EBE%3A%3B%E8U%7C%3Dm%89%DB%11%B7%BFkr%84.%01h%C0%C3%96%DFr%A5%CF%B4%08%F9%8D%E6a3%22%05%A5%C8%8Be%0F2%A7%96F%0CC%DB%1E%C5%B7f%D0%E6t%EE%E9n%B6G%2A%9B9%A8%FAK%B9i%82%94%E1%FC%F3%A0%5D%B3%7F%C2%23I%FE%9F%C9d%84%B2%F1%03&array2=1%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00b%87%24%8E%A1%E8H%B3y%BF%93%B8U%D2%F0e%1BihS%5CD%2A%0B%FF%21%83%FA%AF-4%CF4%9B%F1%EF%5D%0D%3D%C1%EBE%3A%3B%E8%D5%7C%3Dm%89%DB%11%B7%BFkr%84.%01%E8%C0%C3%96%DFr%A5%CF%B4%08%F9%8D%E6a3%22%05%A5%C8%8Be%0F2%A7%16F%0CC%DB%1E%C5%B7f%D0%E6t%EE%E9n%B6G%2A%9B9%A8%FAK%B9i%82%14%E1%FC%F3%A0%5D%B3%7F%C2%23I%FE%9F%C9%E4%84%B2%F1%03 |
第三关
SHA1碰撞,使用提供的样本,撞一下即可
第四关php特性,直接 _ ->(空格)绕过就能拿到flag了
第五关
忘了,反正要命令执行
记得好像是
1 | a=\@eval&b=2;}system('ls /') |
bingdundun~
环境问题。。。第一天没做出来,这题就是 文件上传+文件包含 没啥好说的(算了,蛮写一下吧
1 | ?bingdundun=phar://xxx.zip/hack |
babyupload
右键打开发现 /source,审计源码发现,setup()
函数会加载一个数据库然后在启动后删除它
往下看,会发现一个上传函数,这题会把上传后的文件被保存在 uploads/ 目录中,然后把链接重定向到/file/+uid中。
为此我们只需要上传 /flag/flag 即可
这题是原题,题目来源:RaRCTF 2021
easyssrf
一道简单的ssrf,首先文件包含,包含后提示看看 ha1x1ux1u.php
进来后发现还是文件包含,包含一下就好了
is secret
带参访问 /secret
根据报错信息得知是编码错误,查看app.py发现加密方法为rc4
只需要写个脚本将Payload加密成rc4发送即可
hardsql
题目给出了hint
1 | $password=$_POST['passwd']; $sql="SELECT passwd FROM users WHERE username='bilala' and passwd='$password';"; |
一道注入题目
注入点为密码框,构造语句
1 | ||# |
好了开始注入吧
写个小脚本跑一下即可
1 | from wsgiref import headers |
跑出来的表为txw4ever
用户为bilala
密码为b2f2d15b3ae082ca29697d8dcd420fd7
输入密码后会显示源代码,发现这还没完
一番搜索后,发现需要Quine注入,具体输入的SQL语句和输出的SQL语句一致的技术,主要使用REPLACE进行逐个替换,这里试了很多种
最先开始使用char发现被过滤了,后来使用ord,再后来就用0x方法了
join_us
报错注入。。这里就不写了,没啥知识点
midlevel
考点就是Smarty的保留变量:https://www.smarty.net/docs/zh_CN/language.variables.smarty.tpl#language.variables.smarty.version
最后的payload
Binary
ReorPwn?
1 | galf/ tac |
NSSCTF{d26000e9-17f2-4a0d-a970-a6c3d3033ee9}
Reverse
ezpython
文件分析后,得知该程序是由pyinstaller编译而成,为此我们反编译一下看一下源代码(出题人用的环境可能是Python3.4)
换到 Python3.4 后
继续反编译
得到脚本
仔细看有个 decrypt2 函数,调用这个解密一下就好了
得到
1 | this is true key |
string
IDA分析后发现有个flag函数
往下看发现有个主要程序,整个程序大致就是下面这个部分最重要了
这里有个小tip,出题人是在Linux上跑的,跑出来的种子跟win是不一样的,初始化种子为10086
写个脚本跑一下,跑出来的值就是flag
sign-ezc++
搜索函数得到 flag,简单异或
点开数据区
exp
1 | #include |
1 | 0xAu='\n' |
得到flag
NSSCTF{this_is_NISA_re_sign}
鸣神的国土
题目为一个汇编文件,编译一下,strings 打开后发现一串类似base64的东西
直接ROT13转一下
1 | q3q3YzWc |
转好后得到
1 | d3d3LmJp |
最后base64解码得到
NSSCTF{www.bilibili.com/video/BV1kb4y1m7e7}
Crypto
sign_crypto
发现是LATEX,简单还原后得到
1 | \ni\Sigma\Sigma\chi\Theta\forall |
NSSCTF{EDIT_WITH_LATEX}
funnycaeser
变种凯撒
1 | NRQ;P<uLliW^(XQ/QT\NDh |
观察规律
发现是一位一位递增
但如果真这样做会出现下列结果
会变得很奇怪,最后发现如果是符号的地方则需要+5,也就是
;(分号)+5得到8,N(ord)- ;(ord)得到8
综上所述凡是有符号的地方都需要+5
重写脚本得到**
**
NSSCTF{Strai4e->aenaX}
normal
题目打开得到
ook!解码后得到一堆unicode
继续解码得到base64
最后一种解码是BubbleBabble
然后再ROT13
最终flag
NSSCTF{u_kn0w_wH@t_!_thinK}
NICOCTF 2022 Writeup (Winter Camp Final)
https://iloli.moe/2022/03/28/NICOCTF-2022-Writeup-Winter-Camp-Final/