NKCTF 2023 Misc

hard-misc

base32 --> N0wayBack公众号回复:NKCTF2023我来了!

得到flag:NKCTF{wtk2023Oo0oImcoM1Ng!23555647}

blue

取证大师一打开就有提示,一把梭了

得到flag:NKCTF{wE1come_to_NKCTF20233}

THMaster

先开启THmaster.exe,让它能够检测到th12.exe,选取Lunatic难度,这时可以观察到是否正常运行,按要求修改分数即可

CheatEngine ,查询要分数的地址直接修改即可(2亿分就行,多太多会报错)

看到弹窗后保存游戏并退出(空出01,不然生成的flag会被你的存档覆盖)在replay\th12_01.rpy

记事本打开在文件末尾即可得到flag:NKCTF{U_R_re411y_g00d_At_p14ying_t0h0u}

三体

zsteg -a 得到 " 8 4 f b e 1 d 2 b 7 3 a 1 c d 7 7 d 3{ F T C K N\t\n" ,逆序得到前半段flag:NKCTF{3d77dc1a37b2d1ebf48

但是这个方法只能提取一半的flag,还得用脚本来提取通道信息(提取G,B通道,因为R通道是空的)

from PIL import Image
a=Image.open('三体.bmp')
d=a.getdata()
w,h=a.size
e=[]
for y in range(h):
for x in range(w):
i=a.getpixel((x,y))
e.append(chr((i[1]<<8)+i[2])) #将它们的G和B通道的值加起来,通过位运算生成一个Unicode字符
f=open('1.txt','w')
f.write(''.join(e))

得到的是三体的介绍以及flag:NKCTF{3d77dc1a37b2d1ebf489c973f554ea10}

赛后交流了一下,发现这题用zsteg + strings 是可以解出来的 (感觉是非预期)

将这个提取出来,zsteg -a /root/桌面/三体.bmp -E b8,b,lsb,Xy > flag.txt

反转+拼接,得到flag:NKCTF{3d77dc1a37b2d1ebf489c973f554ea10}

easy_word

根据zip备注

小明这个笨蛋,给文档设置了一个密码,但是他自己却忘记了密码,他知道以下信息:

密码是数学和小写英语、大写英语的随机生成的

hash函数:

输出大小 256 bits 内部大小 256 区块大小 512 长度大小 64 字符尺寸 32

密码:h??vO??0 (?号部分为小明已经忘记的位置)

哈希:b75d1224 ... (后面不记得了...)

脚本爆破出密码:h4evOF90

from itertools import product
from string import *
from hashlib import sha256 pop = "b75d1224";
base="h%s%svO%s%s0"
ready = ascii_letters + digits; for i in product(list(ready),repeat=4):
s = base % (i[0],i[1],i[2],i[3]);
hash = sha256(s.encode()).hexdigest();
if pop in hash:
print(s)

打开后在设置中将密码取消后保存,改为zip,这时在/word/media下可以得到image1.png,图片里写了key:Welcome_to_NKCTF

尝试cloacked-pixel,得到flag:NKCTF{dc0684dd-5a57-4d47-b9c0-debed0ef28b9}

easy_rgb

拼图得到key

解开压缩包,将三个文件放一起观察

5b04000d663f400000006c6e747a434fbc7d0225c4060b2905cf0a280807372873460041100000ba56b200000000000000006c6e7400000110ea63055a596785d14500010000600745213
0040000ba56b2000000066778f4ac280276f9fb28fb3c282b4fdf7d8a0944bc722bd65b0410083a5492004008200000000006677800000008cc73d1c7630a5f595b000001500800015d38
4310083a54920040080061247309bcac200235fff7778acdfc0401090b3a37c1fcf3000204000d663f40000004000020000061247a20000004dd5985a5d14663000600000a00000043320

按照r,g,b的顺序,504b0304... 一眼压缩包

file = open('rgb.txt', 'r').read().splitlines()
#print(file[0][0]+file[1][0]+file[2][0])
rgb = ''
for i in range(len(file[0])):
for j in file:
rgb += j[i]
print(rgb)

16进制文本导入010editor,存为zip,打开得到 IBTyf9pgyR9pCERLR5NuOpiONSG1VZptmvUIgoQ/RTEpTZPVTW2a779plBFIvcN+

zip备注提示 AES-128,在线网站解密:http://tool.chacuo.net/cryptaes,KEY:NKCTF2023

得到flag:NKCTF{603fcdfc-652b-40e4-90cf-f27c2edc2d9f}

first spam of rabbit year

社会主义核心价值观解密 在线网站解密:http://www.atoolbox.net/Tool.php?Id=850

rabbit 又 move

垃圾邮件解密 在线网站解密:https://www.spammimic.com/encode.cgi

佛曰:栗楞穆婆悉遮俱吉室嚧无佛吉埵沙他蒙蒙唎皤啰烁伽驮数迦帝楞萨那摩度驮伽度耶萨那曳喝写怛钵遮耶烁埵室摩迦尼菩呼阇栗墀豆哆烁利吉舍阿萨俱夜嚧蒙喝喝诃罚悉阇喝无数那迦陀室沙穆皤南陀娑利烁输夜输参陀数醯诃提耶钵遮夜栗谨伽俱菩度咩烁室醯迦输诃度唎阇钵无羯栗提摩谨咩悉哆阇室悉钵楞那他伽啰伊耶谨那尼那呼伊罚卢输南喝豆娑伽唎醯嚧那嚧羯摩吉参喝那阿地墀数陀楞啰孕罚度醯菩萨埵埵栗他穆菩参舍迦羯沙啰吉尼楞怛尼孕苏地遮苏提曳谨阇那啰阇南曳输曳伊苏伊度啰咩提苏他他娑驮俱婆钵室利烁俱伽写利羯悉阇遮皤佛南悉阿帝萨喝悉阇参参楞罚皤苏喝墀诃他吉伽提利尼埵啰输嚧醯婆伽墀菩唎娑谨他怛写沙伽啰烁摩栗埵伊啰俱楞帝写地卢利怛吉帝陀阿唵伊伽谨曳阇羯娑羯嚧埵唎烁楞喝曳输他阿室钵谨啰楞他呼娑喝菩哆蒙穆诃婆烁他夜孕穆诃钵佛参室悉舍萨穆室遮阿喝啰伽耶喝漫

改为佛又曰,箴言为 rabbit 在线网站解密:https://tools.takuron.top/talk-with-buddha/

&‍‎‏auD5‏‍v'<)‏‍‌h‎‏{dF6C_*'Jrcqzrh&ZaF>g^‏‍‌Hr'}vuHZJB‎‏%~}_H5?gu‌‏‏;q‍‏‌)"<rA?{sH2{IfafKfu=6w_tip:47&13

藏了0宽,200b 200c 200d 200e 200f 在线网站解密:https://www.mzy0.com/ctftools/zerowidth1/

EnoOoO1G

tip:47&13的意思是密文rot47,密码rot13 在线网站解密:https://www.dute.org/rabbit

密文:U2FsdGVkX19L5uer0YVyC4BKC9U+2um18/wCVNGFw+yqTON0wdn8FjBXQkCpnLDwaLx727z7FleH0
密码:RabBbB1T

得到flag:NKCTF{H4Ppy_tH3_Y34r_0f_R4BbBbbbB1tTtTtT}

easymusic

2020天翼杯原题,只改了flag,参考 https://cn-sec.com/archives/80654.html

notepad打开

得到 psdC:01374890

AU打开,频谱图得到 PSdB:74208645

波形分析,发现再最开始有一规律变化的波形。猜测该波形可能对应二进制的01变化,高电平表示1,低电平表示0

转01:01110000 01110011 01100100 01000001 00111010 00111000 00110011 00111001 00110111 00111001 00110011 00110110 00110111

二进制转字符串得到 psdA:83979367

找到三个密码后导入openpuff,得到flag.txt

得到flag:NKCTF{52d446a51c6896af878f872e0d748118}

easy_bmp

很明显,height.bmp是修改高度,width.bmp是修改宽度(1404),可以根据height.bmp得到)

结合起来得到key:BMP_Height_width_easy

右下角有提示SAME,那么解开zip得到的flag.bmp应该也是这个套路,但高宽都需要修改

高度手动修改测试几次就可,宽度我用脚本爆破

import struct
import zlib
import os
os.system("mkdir bpout") file_path = input("Path : ")
f = open(file_path, 'rb')
c = f.read()
width = c[18:22]
height = c[22:26]
# 爆破bmp宽度
for i in range(100, 500):
f1 = open('./bpout/'+str(i)+'.bmp', 'wb')
# print(struct.pack('>i',i)[::-1])
img = c[:18]+struct.pack('>i', i)[::-1]+c[22:]
f1.write(img)
f1.close()

扫码得到flag:NKCTF{eab1291e-9e37-4ff1-b76d-f1af63eaad43}

easypic

题目提示是出题人把flag偷偷藏在了加密盘里了,你知道怎么把它还原出来吗,给了一张png,打过 HSCSEC 2023的师傅应该很熟悉,

这个应该是密钥文件,010editor打开,搜索png文件尾AE 42 60 82,然后将这之后的数据提取出来,命名为disk,这就是我们需要在VeraCrypt上挂载的文件,这里操作直接借用我 HSCSEC wp里的图说明了

挂载打开得到flag.png,文件尾有tip:566*566

放大观察可以看到这张图内叠加了一张NK的队标,有很多等距像素点,尝试等距提取然后拼接,图片大小就是tip的566*566

这里Image.NEAREST利用可以很好的解决

Image.NEAREST是PIL(Python Imaging Library)模块中的一个常量,在图像缩放和旋转等操作中用于指定插值算法。在这个代码片段中,它被用于调整图像大小时采用最近邻插值算法。

from PIL import Image

img=Image.open('flag.png')
img=img.resize((566,566),Image.NEAREST)
img.save('out1.png')

得到flag:NKCTF{49ce8740502743585c4a44404e62d8f9}

baby_music

010editor打开,发现有很多10 2711 27猜测是转01

导出16进制为这种格式后写脚本替换

file = open('1011.txt', 'r').read().rstrip('\n').split()
string = ''
#print(file)
for i in range(0, len(file), 2):
data = file[i:i+2]
#print(data)
if data==['10', '27']:
string+='0'
else:
string+='1'
#print(string)
file=open('result.txt','w')
file.write(string)
file.close()

得到了超长的01字符串,感觉不像二维码,那取8位出来转下16进制(50),那再取8位(4B),熟悉的zip文件头

file=open('result.txt','r').read()
hexstr=''
for i in range(0,len(file),8):
data=str(hex(int(file[i:i+8],2)))
data=data[0:2]+data[2:].zfill(2)
hexstr+=data[2:]
#print(hexstr)
file=open('hexstr.txt','w')
file.write(hexstr)
file.close()

在010editor导入16进制,保存为zip

在zip备注中发现字符串,稍微处理一下

s='''字符串'''
s=s.replace('\n',' ')
print(s)
#011 0 0100 1010 111 11 0 1 111 10 101 1010 1 0010 110011 1 0000 0 0110 01 000 000 011 111 010 100 00 000 01111 10000 1000 1011 1 0 000 010 01 10 100 111 11 0100 1011 110 0 10 0 010 01 1 0 100 110011 00 000 1 0000 0 010 0 01 1000 0 1 1 0 010 011 01 1011 1 111 001 10 0100 111 1010 101 1 0000 0 1100 00 0110 001100

尝试莫斯,得到WELCOMETONKCTF,THEPASSWORDIS16BYTESRANDOMLYGENERATED,ISTHEREABETTERWAYTOUNLOCKTHEZIP?

欢迎使用NKCTF,密码是16字节随机生成的,这是解锁zip的更好方法,试试明文攻击吧

先制作一个head.png,再使用bkcrack

得到密钥,使用该秘钥进行解密:

得到flag.png

flag:NKCTF{You_are_very_smart!!}

misc?iot!

参考文章:https://www.anquanke.com/post/id/229321

附件名为 stm32f103c8.hex,而stm32是一种功能强大的32位的单片机,参考文章中有详细解释就不赘述了

这里使用IDA pro进行静态分析

Binary file --> Processor type 选择 (ARM Little-endian) --> processor option 设置ARM的相关参数,这里要根据对应的stm32的架构进行选择,这里是armv7-m、thumb-2

若无dll文件,地址填写默认如下图(有的话完成以上步骤后可直接打开)

sub_800014C是rc4生成密钥的过程

start是复制密钥的过程,得到key:NKCTF2023

在sub_8000244中得到密文,按小端序提取 :245F02E287A0A76C072A75DA3F8A57D71A1F

*

在cyberchef解一下RC4

得到flag:NKCTF{H3l10_stm32}

五年Misc,三年模拟

给了4个hint

提示1:“CA1N”也很“疑惑”呢

提示2:ZipCrypto

提示3:?u?u?u?u?u?u

提示4:rockyou

根据压缩包备注

printf("%d%d%d%d%d%d",key[]);

爆破得到密码:114514

010editor观察一下CA1N也很疑惑呢,再结合题目“疑惑”,判断为 xor 0x43 (跟正常压缩包对比一下就能得知)

用010editor内置的工具可以省去写脚本的时间:工具-->十六进制运算-->二进制异或-->操作数 43 (十六进制)

得到一个加密的压缩包(out.zip),根据提示2ZipCrypto,猜测是深入明文攻击

制作plain.txt

bkcrack -C out.zip -c handsome.zip -p plain.txt -o 30 -x 0 504B0304

改密码

bkcrack -C out.zip -k 0247f1a3 5da9d4ac 1ae8312c -U 1.zip easy

解压出来一个handsome.jpg和带密码的5.rar

hashcat爆破rar

rar2john提取hash

rar2john 5.rar > hash.txt

得到5.rar:$rar5$16$6385fa42c4d3cb1318e1ea71c1dcbfa3$15$cc4e558d99f6c846eb0fc54073e2293c$8$03d8cf03ed478602

hashcat爆破密码

hashcat -m 13000 -a 3 $rar5$16$6385fa42c4d3cb1318e1ea71c1dcbfa3$15$cc4e558d99f6c846eb0fc54073e2293c$8$03d8cf03ed478602 ?u?u?u?u?u?u

跳出 [s]tatus [p]ause [b]ypass [c]heckpoint [f]inish [q]uit =>

s:查看当前破解进度

p:暂停破解

b:忽略破解

c:检查破解

f:结束破解

q:退出

得到password:BUSADJ

5.png文件尾发现逆序的png,提取出来反转

with open('逆序.png','rb') as f:
with open('6.png','wb') as g:
g.write(f.read()[::-1])

修改高度,得到压缩包的密码be8b06bc13780abf

解压出的GGGGGGG.png结尾有串字符5D93CEB70E2BF5DAA84EC3D0CD2C731A

32位的,推测为md5,在线网站得到qwer1234

拿这个密码去跑cloacked-pixel,得到下一层压缩包密码f442212b3d398a8e

根据提示是steghide爆破,那直接用stegseek跑了,字典为rockyou.txt,kali自带,解压使用就行

得到下一层密码764dc6c0361fc0fd

看文件头,明显的F5隐写

得到下一层密码un7pXkXMD6J5P5jKzP3FCCVJ4VFtTF26

1_ShoutInTheSky.wav一听就知道是sstv (我这里用Robot36做的)

扫描得到flag:NKCTF{iLiKECTFbec@u5eDreaM!}

baby_bitlocker

2023.3.2

明文攻击

pcapng文件格式:https://pcapng.com/

echo "4D 3C 2B 1A 01 00 00 00 FF FF FF FF FF FF FF FF" | xxd -r -ps > plain.txt

xxd:xxd 命令用于用二进制或十六进制显示文件的内容

-r : 把xxd的十六进制输出内容转换回原文件的二进制内容

-ps : 以 postscript的连续十六进制转储输出,这也叫做纯十六进制转储

在cmd中若出现'xxd' 不是内部或外部命令,也不是可运行的程序或批处理文件。 可以选择创建txt写入4D 3C 2B 1A 01 00 00 00 FF FF FF FF FF FF FF FF 导入010editor生成 plain.txt

bkcrack -C crack.zip -c usb.pcapng -p plain.txt -o 8
bkcrack -C crack.zip -k 92ac142d 9bd136b1 ac01a95d -U out.zip easy

将压缩包密码改为easy后解压打开

usb.pcapng是usb键盘流量,使用UsbKeyboardDataHacker

得到PassWord:NKCTF2023_YYDS_YYDS!!!

打开tonF.docx,发现字体为Byxs20_font

根据Byxs20师傅这篇博客:https://byxs20.github.io/posts/13727.html

取消docx的密码后修改为zip,打开/word/fontTable.xml,得到font-nameByxs20_fontfontKey{54EE1E26-6FFD-4CDA-97CC-DBBFACED0C66} (这里是用浏览器打开,key是随机的,复现的话得自己多试)

odttf转换ttf

import os

odttf_name = "./F68B8FDC-D4B4-41D4-A738-3B7577EC3C9A.odttf"
odttf_path = os.path.abspath(odttf_name) with open(odttf_path, "rb") as f:
data = f.read() # 获取文件名
file_name = os.path.splitext(odttf_path)[0].split("\\")[-1].replace("-", "") # 获取key
key = []
for i in range(len(file_name), 0, -2):
key.append(int(file_name[i-2:i], 16)) with open("./font7.ttf", "wb") as f:
for i in range(32):
f.write(bytes([data[i] ^ key[i % len(key)]]))
f.write(data[32:])

fontforge识别

也可以用在线网站:https://fontdrop.info/#/?darkmode=true

得到flag前半段:nkctf{ttf_is_funny_

2023.3.3

hint:flag2图片十分有规律的3x3,到底是来自几进制的秘密呢?

根据提示3x3,猜测是4进制

exiftool得到提示上北下南左西右东

脚本提取

import cv2

img = cv2.imread("./flag2.png",cv2.IMREAD_UNCHANGED)

r,c = img.shape

#flag_xy = [(0,0),(2,0),(1,1),(0,2),(2,2)]
flag2_xy = [(1,0),(1,2),(0,1),(2,1)] for y in range(0,r,3):
for x in range(0,c,3):
roi_img = img[y: y+3, x: x+3] #for i in flag_xy:
# print(chr(roi_img[i[::-1]]),end="") tmp = ""
for i in flag2_xy:
tmp += str(roi_img[i[::-1]])
print(chr(int(tmp,4)),end="")

得到 flag2 is here: images_are_fun_

2023.3.4

在memory.raw中提取得到恢复密钥:388080-397397-360195-096305-206382-409079-388696-646492

打开DiskGenius

磁盘 --> 打开虚拟磁盘文件 --> 导入bitcloker.img

用这个密钥恢复加密分区

得到后半段flag:bitlocker_is_very_interesting}

得到最终flag:NKCTF{TTF_IS_FUNNY_IMAGES_ARE_FUN_BITLOCKER_IS_VERY_INTERESTING}

NKCTF2023问卷调查

填完就给flag

flag:NKCTF{Th@nksForTakePartInNKctf2023}

NKCTF 2023 Misc的更多相关文章

  1. sun.misc.BASE64Encoder找不到jar包的解决方法

    1.右键项目->属性->java bulid path->jre System Library->access rules->resolution选择accessible ...

  2. sun.misc.Unsafe的理解

    以下sun.misc.Unsafe源码和demo基于jdk1.7: 最近在看J.U.C里的源码,很多都用到了sun.misc.Unsafe这个类,一知半解,看起来总感觉有点不尽兴,所以打算对Unsaf ...

  3. 正则表达式匹配/data/misc/wifi/wpa_supplicant.conf的WiFi名称与密码

    正则表达式匹配/data/misc/wifi/wpa_supplicant.conf的WiFi名称与密码: String regex_name="ssid=\"(.*?)\&quo ...

  4. Java--如何使用sun.misc.Unsafe完成compareAndSwapObject原子操作

    package com; import sun.misc.Unsafe; import java.lang.reflect.Field; /** * Created by yangyu on 16/1 ...

  5. MyEclipse中无法识别 sun.misc.BASE64Encoder

    sun.misc.BASE64Encoder/BASE64Decoder类不属于JDK标准库范畴,但在JDK中包含了该类,可以直接使用.但是在MyEclipse中直接使用却找不到该类. 解决方法: 1 ...

  6. Java sun.misc.Unsafe类的学习笔记

    Java未开源的Unsafe类 Unsafe类可以为我们提供高效并且线程安全方式操作变量,直接和内存数据打交道. 获取Unsafe实体的方法 private static Unsafe getUnsa ...

  7. 教你一招 - Misc类型插件的妙用(附带插件源码)

    熟悉nopcommerce插件的朋友应该知道里面有一种Misc类型的插件,比如Nop.Plugin.Misc.WebServices和 Nop.Plugin.Misc.FacebookShop,继承自 ...

  8. linux设备驱动归纳总结(十):1.udev&misc【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-111839.html linux设备驱动归纳总结(十):1.udev&misc xxxxxxx ...

  9. misc设备

    WatchDog Timer驱动 混杂设备 Misc(或miscellaneous)驱动是一些拥有着共同特性的简单字符设备驱动.内核抽象出这些特性而形成一些API(在文件drivers/char/mi ...

  10. python中scipy.misc.logsumexp函数的运用场景

    scipy.misc.logsumexp函数的输入参数有(a, axis=None, b=None, keepdims=False, return_sign=False),具体配置可参见这里,返回的值 ...

随机推荐

  1. cesium教程7-官方示例翻译-模型要素选择

    源代码示例: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  2. 海康威视web插件安装后,谷歌浏览器还是不能看视频问题

    首先要根据弹出的信息提示,下载并安装视频播放插件, 安装完成后重新打开谷歌浏览器,重新登录系统,如果还是不能看视频,请按下面的方法设置: 步骤1:谷歌浏览器,地址栏中输入:chrome://flags ...

  3. JDK源码阅读-------自学笔记(十六)(java.util.Random随机数类)

    Random类简介 如果使用Math.random()计算过于复杂的话,我们可以使用例外一种方式得到随机数,即Random类,这个类是专门用来生成随机数的,并且Math.random()底层调用的就是 ...

  4. LLM实战:LLM微调加速神器-Unsloth + Qwen1.5

    1. 背景 上一篇介绍了基于训练加速框架Unsloth,微调训练Llama3的显卡资源占用及训练时间对比. 近期Unsloth新增了Qwen1.5的模型适配,因此本qiang~马不停蹄地又进行了一次实 ...

  5. python 源

    清华:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https: ...

  6. sass @extend(继承)指令详解

    在设计网页的时候常常遇到这种情况:一个元素使用的样式与另一个元素完全相同,但又添加了额外的样式. 通常会在 HTML 中给元素定义两个 class,一个通用样式,一个特殊样式. 普通CSS的实现 接下 ...

  7. linux ls命令的重要用法:按照文件大小排序和按照时间排序

    1.ls命令是list的缩写,用来打印当前目录清单或者打印出指定目录下的文件及文件清单. 2.本文介绍ls的重要用法:按"文件大小"排序列出文件清单和按"时间" ...

  8. linux分区规划

    一般来说,对系统进行分区,需要提前规划好: ​ 系统分区:如果资源允许的话,建议300G(该分区只存放操作系统和一些配置文件等): ​ /boot分区:是引导分区(该分区损坏,系统就启动不了了),在b ...

  9. [NOIP2001 提高组] 数的划分

    个人博客传送锚点:https://www.acwing.com/blog/content/55495/ 传送锚点:https://www.luogu.com.cn/problem/P1025 题目描述 ...

  10. jQuery模态框原理

    <!-- 引入jQuery.js --> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquer ...