Bugku Misc Write Up (1-30)

Bugku Misc Write Up (1-30)

Aristore

1. 签到题

扫码关注

flag
1
flag{BugKu-Sec-pwn!}

2. 这是一张单纯的图片

随波逐流打开图片分析得到

1
2
文件中包含key的Unicode码: 
key{you are right}

然后Unicode转Ascii

flag
1
key{you are right}

3. 隐写

随波逐流打开图片分析发现图片宽度和高度被修改过,打开修复后的图片即可

flag
1
BUGKU{a1e5aSA}

4. telnet

随波逐流秒了

flag
1
flag{d316759c281bf925d600be698a4973d5}

5. 眼见非实

docx后缀改成zip然后打开

打开word目录下的document.xml,搜索flag

flag
1
flag{F1@g}

6. 啊哒

binwalk提取出一个压缩包,发现解压需要密码

然后查看图片属性发现可疑信息照相机型号73646E6973635F32303138,尝试拿这个当密码解压缩包结果失败了

接着把这串字符丢随波逐流base16解码后得到了sdnisc_2018,再次尝试成功解压拿到flag

flag
1
flag{3XiF_iNf0rM@ti0n}

7. 又一张图片,还单纯吗

binwalk提取失败了,用foremost提取得到两张图片,其中一张图片上面就是flag

flag
1
falg{NSCTF_e6532a34928a3d1dadd0b049d5a3cc57}

8. 猜

拖到百度搜图就出来了,刘亦菲

flag
1
key{liuyifei}

9. 宽带信息泄露

RouterPassView打开conf.bin,搜索username

flag
1
flag{053700357621}

10. 隐写2

binwalk提取拿到flag.rar提示.jpg(其实这不是一个rar文件,而是一个zip文件)

压缩包需要密码,再看图片知道这就是压缩包密码的提示

密码只有3个数字典爆破秒了(bushi) 附上源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import zipfile
import 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!

flag
1
f1@g{y0u Are a h@cker!}

11. 多种方法解决

随波逐流秒了。文件中包含data:image/jpg;base64图片,转成图片后扫码即可。

flag
1
KEY{dca57f966e4e4e31fd5b15417da63269}

12. 闪的好快

masterGO.gif里面有若干帧,每一帧都是一个二维码。写一个脚本,逐帧扫描二维码,然后把二维码里的内容存到列表里,最后把列表里的内容合并起来输出就好了。附上脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import imageio
from PIL import Image
from 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

flag
1
SYC{F1ah_sof4T}

13. come_game

运行游戏,在游戏目录下发现存档文件save1,用十六进制编辑器打开存档,把32改为35就可以跳关了。保存之后再次打开游戏加载存档得到flag

flag
1
SYC{6E23F259D98DF153}

14. 白哥的鸽子

丢到随波逐流发现Jpg文件结束标志[FF D9]后信息:fg2ivyo}l{2s3_o@aw__rcl@。栅栏密码解密,分为三栏时得到flag{w22_is_v3ry_cool}@@

flag
1
flag{w22_is_v3ry_cool}

15. linux

随波逐流秒了,文件中包含{ }符号。用记事本打开直接搜索key{也能很轻易地搜出来。

flag
1
key{feb81d3834e2423c9903f4755464060b}

16. 隐写3

随波逐流打开图片分析发现图片宽度和高度被修改过,打开修复后的图片即可

flag
1
flag{He1l0_d4_ba1}

17. 做个游戏

当作压缩包解压了。用随波逐流打开heiheihei\cn\bjsxt\plane\PlaneGameFrame.class就可以找到flag{RGFqaURhbGlfSmlud2FuQ2hpamk=}RGFqaURhbGlfSmlud2FuQ2hpamk=base64解码得到DajiDali_JinwanChiji

flag
1
flag{DajiDali_JinwanChiji}

18. 想蹭网先解开密码

根据题目提示写个字典先

1
2
3
4
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

很快就解出来了

flag
1
flag{13910407686}

19. Linux2

随波逐流秒了

flag
1
KEY{24f3627a86fc740a7f36ee2c7a1c124a}

20. 细心的大象

binwalk提取出一个rar压缩包,发现里面有一场图片2.png,解压需要密码

原图片1.jpg属性的备注藏了东西TVNEUzQ1NkFTRDEyM3p6

用base64解码得到压缩包密码MSDS456ASD123zz

随波逐流打开解压拿到的2.png分析发现图片宽度和高度被修改过,打开修复后的图片即可(后半部分和这题一模一样)

flag
1
BUGKU{a1e5aSA}

21. 爆照

binwalk提取出一个压缩包,解压了发现一张动图和好多个没有后缀的文件

随波逐流打开发现都是jpg格式的,还原一下,发现88.jpg藏了一个二维码,扫码结果是bilibili

888.jpg属性里面藏了一串base64编码后的字符串c2lsaXNpbGk=,解码得到silisili

8888.jpgbinwalk一下出来一个压缩包,扫一下里面的二维码得到panama

上面根据题目要求按顺序连起来就得到flag了

flag
1
flag{bilibili_silisili_panama}

22. 猫片(安恒)

看提示先考虑LSB隐写。又根据提示,考虑顺序BGR,不出所料地得到了一张png图片,保存成二进制文件然后用foremost分离出来发现了是半张二维码

丢到随波逐流发现图片宽度和高度被修改过,还原出完整的二维码,扫码得到百度网盘链接,下载解压(此处必须用WinRAR解压,否则后面没法扫出隐藏的文件)后里面的内容是flag不在这里哦 你猜猜flag在哪里呢? 找找看吧

刚开始我还以为会是零宽字符隐写,但是拿去解密了发现不是,文件属性也没有信息,看来flag确实不在这。此时我想起来提示还有一个信息NTFS没用上,这是一道关于NTFS交换数据流的题

NtfsStreamsEditor扫描出.pyc文件,执行命令uncompyle6.exe flag.pyc >flag.py用uncompyle6反编译(需要pip安装pip install uncompyle6

我反编译得到的内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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来自网络,代码是没问题的,看看得了😓)

附上代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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

flag
1
flag{Y@e_Cl3veR_C1Ever!}

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

flag
1
flag{White_Album_is_Really_worth_watching_on_White_Valentine's_Day}

24. 旋转跳跃

题目给的是一个.mp3文件,再看提示key:syclovergeek,所以猜测是mp3stego隐写,密钥就是syclovergeek

flag
1
SYC{Mp3_B15b1uBiu_W0W}

25. 普通的二维码

扫码得到一串乱码的东西¹þ¹þ!¾Í²»¸æËßÄãflag¾ÍÔÚÕâÀï!,改用GBK编码得到哈哈!就不告诉你flag就在这里!😓

记事本打开划到底发现了一串神秘数字146154141147173110141166145137171060125137120171137163143162151160164137117164143137124157137124145156137101163143151151041175,用随波逐流发现是八进制转字符,直接就出来了

flag
1
flag{Have_y0U_Py_script_Otc_To_Ten_Ascii!}

26. 乌云邀请码

随波逐流秒了

LSB隐写,顺序是BGR

flag
1
flag{Png_Lsb_Y0u_K0nw!}

27. 神秘的文件

解法1: 丢进随波逐流字典爆破出来了,密码是q1w2e3r4

拿到的.docx后缀改成.zip,解压后在docProps目录下找到了flag.txt,里面是ZmxhZ3tkMGNYXzFzX3ppUF9maWxlfQ==,base64解码就拿到flag了

解法2: 压缩包里面的logo.png和提供的logo.png是一样的,可以用ARCHPR进行明文攻击

flag
1
flag{d0cX_1s_ziP_file}

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压缩包了

1
2
3
4
5
DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 JPEG image data, JFIF standard 1.01
9591 0x2577 7-zip archive data, version 0.4
17569 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了

flag
1
flag{my_name_H!!H}

29. 图穷匕见

随波逐流打开,发现Jpg文件结束标志[FF D9]1个后面包含其他信息,可能存在多个文件叠加隐写或后接文本隐写

得到了一大堆点的坐标

写个脚本还原一下(也可以把txt再丢回随波逐流用X,Y坐标串转图片

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
33
34
35
36
37
38
39
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就出来了

flag
1
flag{40fc0a979f759c8892f4dc045e28b820}

30. convert

全是0和1,首先考虑二进制转ascii码。太长了随波逐流打不开于是丢到CyberChef,发现开头是Rar,保存为.rar文件,解压就能发现一张图片

查看属性,发现主题藏了东西ZmxhZ3swMWEyNWVhM2ZkNjM0OWM2ZTYzNWExZDAxOTZlNzVmYn0=,base64解码就行了

flag
1
flag{01a25ea3fd6349c6e635a1d0196e75fb}
  • 标题: Bugku Misc Write Up (1-30)
  • 作者: Aristore
  • 创建于 : 2024-12-07 15:30:00
  • 更新于 : 2025-04-03 21:38:30
  • 链接: https://www.aristore.top/posts/Bugku_WP(1-30)/
  • 版权声明: 版权所有 © Aristore,禁止转载。
评论