少女祈祷中...

小猫

题目描述:

小猫会把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}