1. 签到题
扫码关注
{% folding cyan, flag %}
flag{BugKu-Sec-pwn!}{% endfolding %}
2. 这是一张单纯的图片
随波逐流打开图片分析得到
文件中包含key的Unicode码: key{you are right}然后Unicode转Ascii
{% folding cyan, flag %}
key{you are right}{% endfolding %}
3. 隐写
随波逐流打开图片分析发现图片宽度和高度被修改过,打开修复后的图片即可
{% folding cyan, flag %}
BUGKU{a1e5aSA}{% endfolding %}
4. telnet
随波逐流秒了
{% folding cyan, flag %}
flag{d316759c281bf925d600be698a4973d5}{% endfolding %}
5. 眼见非实
docx后缀改成zip然后打开
打开word目录下的document.xml,搜索flag
{% folding cyan, flag %}
flag{F1@g}{% endfolding %}
6. 啊哒
binwalk提取出一个压缩包,发现解压需要密码
然后查看图片属性发现可疑信息照相机型号73646E6973635F32303138,尝试拿这个当密码解压缩包结果失败了
接着把这串字符丢随波逐流base16解码后得到了sdnisc_2018,再次尝试成功解压拿到flag
{% folding cyan, flag %}
flag{3XiF_iNf0rM@ti0n}{% endfolding %}
7. 又一张图片,还单纯吗
binwalk提取失败了,用foremost提取得到两张图片,其中一张图片上面就是flag
{% folding cyan, flag %}
falg{NSCTF_e6532a34928a3d1dadd0b049d5a3cc57}{% endfolding %}
8. 猜
拖到百度搜图就出来了,刘亦菲
{% folding cyan, flag %}
key{liuyifei}{% endfolding %}
9. 宽带信息泄露
用RouterPassView打开conf.bin,搜索username
{% folding cyan, flag %}
flag{053700357621}{% endfolding %}
10. 隐写2
binwalk提取拿到flag.rar和提示.jpg(其实这不是一个rar文件,而是一个zip文件)
压缩包需要密码,再看图片知道这就是压缩包密码的提示
密码只有3个数字典爆破秒了(bushi) 附上源码
import zipfileimport zlib # 打开zip文件with zipfile.ZipFile('flag.zip') as zf: # 尝试所有的三位数密码 for i in range(1000): password = f"{i:03d}".encode() # 创建三位数的字符串并转换为字节类型 print(f"尝试密码: {password.decode()}") # 解码为字符串 try: zf.extractall(pwd=password) print(f"找到正确密码: {password.decode()}") break except RuntimeError as e: # 如果不是正确的密码,会抛出RuntimeError异常 if 'Bad password' in str(e): continue else: print(f"密码 {password.decode()} 导致错误: {str(e)}") except zlib.error as e: print(f"密码 {password.decode()} 导致解压缩错误: {str(e)}") else: print("未找到正确的密码")把文件名改回flag.zip然后运行代码得到找到正确密码: 871
后来在评论区看到了似乎是合理的解释:观察电脑键盘KQJ的上面对应数字,分别对应817,根据提示斗地主,国王与卫兵显然是一队,国王最大国王赢则卫兵赢,推出密码为871。然而本人不会打斗地主,让我想再久也想不出来的(摊手)
解压拿到的图片丢随波逐流发现Jpg文件结束标志[FF D9]后信息:f1@g{eTB1IEFyZSBhIGhAY2tlciE=}
,接着eTB1IEFyZSBhIGhAY2tlciE=base64解码得到y0u Are a h@cker!
{% folding cyan, flag %}
f1@g{y0u Are a h@cker!}{% endfolding %}
11. 多种方法解决
随波逐流秒了。文件中包含data:image/jpg;base64图片,转成图片后扫码即可。
{% folding cyan, flag %}
KEY{dca57f966e4e4e31fd5b15417da63269}{% endfolding %}
12. 闪的好快
masterGO.gif里面有若干帧,每一帧都是一个二维码。写一个脚本,逐帧扫描二维码,然后把二维码里的内容存到列表里,最后把列表里的内容合并起来输出就好了。附上脚本
import imageiofrom PIL import Imagefrom pyzbar.pyzbar import decode def extract_qr_data_from_gif(gif_path): gif = imageio.get_reader(gif_path) qr_data_list = [] for frame in gif: pil_image = Image.fromarray(frame) decoded_objects = decode(pil_image) for obj in decoded_objects: qr_data_list.append(obj.data.decode('utf-8')) unique_qr_data = list(qr_data_list) combined_data = ''.join(unique_qr_data) return combined_data gif_file_path = 'masterGO.gif'combined_qr_data = extract_qr_data_from_gif(gif_file_path)print(combined_qr_data)运行脚本得到flag
{% folding cyan, flag %}
SYC{F1ah_sof4T}{% endfolding %}
13. come_game
运行游戏,在游戏目录下发现存档文件save1,用十六进制编辑器打开存档,把32改为35就可以跳关了。保存之后再次打开游戏加载存档得到flag
{% folding cyan, flag %}
SYC{6E23F259D98DF153}{% endfolding %}
14. 白哥的鸽子
丢到随波逐流发现Jpg文件结束标志[FF D9]后信息:fg2ivyo}l{2s3_o@aw__rcl@。栅栏密码解密,分为三栏时得到flag{w22_is_v3ry_cool}@@
{% folding cyan, flag %}
flag{w22_is_v3ry_cool}{% endfolding %}
15. linux
随波逐流秒了,文件中包含{ }符号。用记事本打开直接搜索key{也能很轻易地搜出来。
{% folding cyan, flag %}
key{feb81d3834e2423c9903f4755464060b}{% endfolding %}
16. 隐写3
随波逐流打开图片分析发现图片宽度和高度被修改过,打开修复后的图片即可
{% folding cyan, flag %}
flag{He1l0_d4_ba1}{% endfolding %}
17. 做个游戏
当作压缩包解压了。用随波逐流打开heiheihei\cn\bjsxt\plane\PlaneGameFrame.class就可以找到flag{RGFqaURhbGlfSmlud2FuQ2hpamk=}。RGFqaURhbGlfSmlud2FuQ2hpamk=base64解码得到DajiDali_JinwanChiji。
{% folding cyan, flag %}
flag{DajiDali_JinwanChiji}{% endfolding %}
18. 想蹭网先解开密码
根据题目提示写个字典先
with open('dict.txt', 'w') as file: for i in range(10000): line = f"1391040{i:04d}\n" file.write(line)把下载的.cap文件放到这里cap2hashcat转换得到一个.hc22000文件
然后在hashca官网下载编译好的二进制文件
然后把字典和转换后的文件放到hashcat所在目录下,并在该目录下运行命令hashcat.exe -m 22000 1342505_1733548984.hc22000 dict.txt --force
很快就解出来了
{% folding cyan, flag %}
flag{13910407686}{% endfolding %}
19. Linux2
随波逐流秒了
{% folding cyan, flag %}
KEY{24f3627a86fc740a7f36ee2c7a1c124a}{% endfolding %}
20. 细心的大象
binwalk提取出一个rar压缩包,发现里面有一场图片2.png,解压需要密码
原图片1.jpg属性的备注藏了东西TVNEUzQ1NkFTRDEyM3p6
用base64解码得到压缩包密码MSDS456ASD123zz
随波逐流打开解压拿到的2.png分析发现图片宽度和高度被修改过,打开修复后的图片即可(后半部分和这题一模一样)
{% folding cyan, flag %}
BUGKU{a1e5aSA}{% endfolding %}
21. 爆照
binwalk提取出一个压缩包,解压了发现一张动图和好多个没有后缀的文件
随波逐流打开发现都是jpg格式的,还原一下,发现88.jpg藏了一个二维码,扫码结果是bilibili
888.jpg属性里面藏了一串base64编码后的字符串c2lsaXNpbGk=,解码得到silisili
8888.jpgbinwalk一下出来一个压缩包,扫一下里面的二维码得到panama
上面根据题目要求按顺序连起来就得到flag了
{% folding cyan, flag %}
flag{bilibili_silisili_panama}{% endfolding %}
22. 猫片(安恒)
看提示先考虑LSB隐写。又根据提示,考虑顺序BGR,不出所料地得到了一张png图片,保存成二进制文件然后用foremost分离出来发现了是半张二维码
丢到随波逐流发现图片宽度和高度被修改过,还原出完整的二维码,扫码得到百度网盘链接,下载解压(此处必须用WinRAR解压,否则后面没法扫出隐藏的文件)后里面的内容是flag不在这里哦 你猜猜flag在哪里呢? 找找看吧
刚开始我还以为会是零宽字符隐写,但是拿去解密了发现不是,文件属性也没有信息,看来flag确实不在这。此时我想起来提示还有一个信息NTFS没用上,这是一道关于NTFS交换数据流的题
用NtfsStreamsEditor扫描出.pyc文件,执行命令uncompyle6.exe flag.pyc >flag.py用uncompyle6反编译(需要pip安装pip install uncompyle6)
我反编译得到的内容如下
import base64 def encode(): flag = '*************' ciphertext = [] for i in range(len(flag)): s = chr(i ^ ord(flag[i])) if i % 2 == 0: s = ord(s) + 10 else: s = ord(s) - 10 ciphertext.append(str(s)) return ciphertext[::-1] ciphertext = [ 3, 4, 5, 6, 7, 8, 9, 5, 10, 11, 12, 13, 14, 15, 16, 8, 17, 18, 19, 20, 21, 22, 23, 15]这里的ciphertext就是上面的encode函数编码得来的,只要根据原来的函数写一个解码的函数就好了。(注:不知道为什么上面反编译得到的ciphertext是错误的。下面的ciphertext来自网络,代码是没问题的,看看得了😓)
附上代码
ciphertext = [ '96', '65', '93', '123', '91', '97', '22', '93', '70', '102', '94', '132', '46', '112', '64', '97', '88', '80', '82', '137', '90', '109', '99', '112'] def decode(ciphertext): reversed_ciphertext = [int(x) for x in ciphertext[::-1]] flag = '' for i, num in enumerate(reversed_ciphertext): if i % 2 == 0: num -= 10 else: num += 10 original_char = chr(num ^ i) flag += original_char return flag print(decode(ciphertext))运行得到flag
{% folding cyan, flag %}
flag{Y@e_Cl3veR_C1Ever!}{% endfolding %}
23. 多彩
LSB隐写BGR发现压缩包,先用binwalk把压缩包提取出来,发现解压需要密码
然后回到开始那张图片,用StegSolve打开,在Red plane 0发现法国奢侈品品牌YSL的商标,根据这些猜测这张图上面的是口红的色卡(?
于是先找了个网站,把图片丢进去,按顺序记录下每个颜色的的HEX值 #bc0b28 #d04179 #d47a6f #c2696f #eb8262 #cf1a77 #c0083e #bc0b28 #bc0b28 #d13274 #691319 #bc0b28 #bc0b28 #d4121d #d75b59 #dd8885 #dd8885 #dd8885 #7e453a #7e453a #7e453a
密码就是每个颜色的YSL对应口红色号的二进制转字符串(脑洞太大了没想出来,看了网友的wp才知道这题来自n1ctf-2018,贴个官方题解)。网上给的口红链接好像大多都失效了,我在这里贴一个目前能访问的
按照这个思路就可以得到色号1,27,59,11,23,7,57,1,1,76,222,1,1,50,214,6,77,50,53,214,6,根据上面的思路可以接出来密码是白学家
最后解压缩拿到flag
{% folding cyan, flag %}
flag{White_Album_is_Really_worth_watching_on_White_Valentine's_Day}{% endfolding %}
24. 旋转跳跃
题目给的是一个.mp3文件,再看提示key:syclovergeek,所以猜测是mp3stego隐写,密钥就是syclovergeek
{% folding cyan, flag %}
SYC{Mp3_B15b1uBiu_W0W}{% endfolding %}
25. 普通的二维码
扫码得到一串乱码的东西¹þ¹þ!¾Í²»¸æËßÄãflag¾ÍÔÚÕâÀï!,改用GBK编码得到哈哈!就不告诉你flag就在这里!😓
记事本打开划到底发现了一串神秘数字146154141147173110141166145137171060125137120171137163143162151160164137117164143137124157137124145156137101163143151151041175,用随波逐流发现是八进制转字符,直接就出来了
{% folding cyan, flag %}
flag{Have_y0U_Py_script_Otc_To_Ten_Ascii!}{% endfolding %}
26. 乌云邀请码
随波逐流秒了
LSB隐写,顺序是BGR
{% folding cyan, flag %}
flag{Png_Lsb_Y0u_K0nw!}{% endfolding %}
27. 神秘的文件
解法1: 丢进随波逐流字典爆破出来了,密码是q1w2e3r4
拿到的.docx后缀改成.zip,解压后在docProps目录下找到了flag.txt,里面是ZmxhZ3tkMGNYXzFzX3ppUF9maWxlfQ==,base64解码就拿到flag了
解法2: 压缩包里面的logo.png和提供的logo.png是一样的,可以用ARCHPR进行明文攻击
{% folding cyan, flag %}
flag{d0cX_1s_ziP_file}{% endfolding %}
28. 论剑
010Editor打开图片,在中间发现了一长串二进制字符01101101 01111001 01101110 01100001 01101101 01100101 01101001 01110011 01101011 01100101 01111001 00100001 00100001 00100001 01101000 01101000 01101000(第一步就没想到😥藏在中间谁想得到啊😰)。转成ascii码是mynameiskey!!!hhh
这串二进制字符后面的编码38 7B BC AF 27 1C很像7z压缩包的文件头37 7A BC AF 27 1C(这一步也没想到😭对文件头还不是很敏感),改一下然后保存
接着binwalk一下果然发现7z压缩包了
DECIMAL HEXADECIMAL DESCRIPTION--------------------------------------------------------------------------------0 0x0 JPEG image data, JFIF standard 1.019591 0x2577 7-zip archive data, version 0.417569 0x44A1 JPEG image data, JFIF standard 1.01丢kali里面用dd命令dd if=file.jpg of=output.7z skip=9591 bs=1提取(if是输入文件,of是输出文件,skip是指定从输入文件开头跳过9591个块后再开始复制,对应binwalk输出的DECIMAL,bs设置每次读写块的大小为1字节),解压密码就是上面解出来的mynameiskey!!!hhh
接下来分别改一下下载下来的file.jpg和提取出来的ljc2.jpg的高度,把第00A0行(也就是十进制的第160行)的第3个数和第4个数改成00 7E
结合两张图片未被遮挡的部分可以得到Not flag{666c61677B6D795F6E616D655F482121487D}hhhh
中间的666c61677B6D795F6E616D655F482121487D十六进制转ascii码解出来就是flag了
{% folding cyan, flag %}
flag{my_name_H!!H}{% endfolding %}
29. 图穷匕见
随波逐流打开,发现Jpg文件结束标志[FF D9]1个后面包含其他信息,可能存在多个文件叠加隐写或后接文本隐写
得到了一大堆点的坐标
写个脚本还原一下(也可以把txt再丢回随波逐流用X,Y坐标串转图片)
from PIL import Image def load_points_from_file(filename): points = [] with open(filename, 'r') as file: for line in file: # 假设每个点坐标以这样的格式存在一行 "(x,y)",去除括号后拆分字符串 x, y = line.strip().strip('()').split(',') points.append((int(x), int(y))) return points def create_image(points, image_size=(20, 20)): # 创建一个白色背景的图像 img = Image.new('RGB', image_size, 'white') pixels = img.load() # 将所有给定的点设置为黑色 for point in points: if 0 <= point[0] < image_size[0] and 0 <= point[1] < image_size[1]: pixels[point[0], point[1]] = (0, 0, 0) return img def main(): # 加载点坐标 points = load_points_from_file('flag.txt') # 确定图像大小,这里假设图像不会超过20x20像素 max_x = max([p[0] for p in points]) + 1 max_y = max([p[1] for p in points]) + 1 image_size = (max_x, max_y) # 创建并保存图像 img = create_image(points, image_size) img.save('output_image.png') print("图像已成功生成并保存为 'output_image.png'.") if __name__ == '__main__': main()得到了一张二维码的图片,扫一下flag就出来了
{% folding cyan, flag %}
flag{40fc0a979f759c8892f4dc045e28b820}{% endfolding %}
30. convert
全是0和1,首先考虑二进制转ascii码。太长了随波逐流打不开于是丢到CyberChef,发现开头是Rar,保存为.rar文件,解压就能发现一张图片
查看属性,发现主题藏了东西ZmxhZ3swMWEyNWVhM2ZkNjM0OWM2ZTYzNWExZDAxOTZlNzVmYn0=,base64解码就行了
{% folding cyan, flag %}
flag{01a25ea3fd6349c6e635a1d0196e75fb}{% endfolding %}