Skip to main content

DASCTF2024暑期挑战赛

2024-07-21


Misc

EZ_zip

首先是最开始的flag文件,发现问题出在文件名大小,这两处都改成7就行

image-20240720122249795

然后一直在想注释里的just a byte是啥意思,一直想的是跟password有关。一直用的是zipfile来爆破,后面才发现一个问题。

zipfile爆不了,同样的爆破脚本,zipfile爆不出来,但是pyzipper可以爆。编写一个爆破脚本并统计密码

import pyzipper

def crack_zip(zip_file_path):
for i in range(256):
password = bytes([i])
try:
with pyzipper.AESZipFile(zip_file_path, 'r') as zip_ref:
zip_ref.extractall(pwd=password)
extracted_files = zip_ref.namelist()
if extracted_files:
return password, extracted_files[0]
except:
continue
return None, None

def main():
current_zip = '320.zip'
all_passwords = ''

while current_zip:
print(f'Cracking {current_zip}...')
password, next_zip = crack_zip(current_zip)
if password:
all_passwords += password.hex()
current_zip = next_zip
else:
print(f'Failed to crack {current_zip}')
break

print(f'All passwords: {all_passwords}')

if __name__ == "__main__":
main()

得到密码是11bb99580c613a87c54e12480aa7ff8c798f71ad280f6ba69d4a4425225e4ec611bb99580c613a87c54e12480aa7ff8c798f71ad280f6ba69d4a4425225e4ec611bb99580c613a87c54e12480aa7ff8c798f71ad280f6ba69d4a4425225e4ec611bb99580c613a87c54e12480aa7ff8c798f71ad280f6ba69d4a4425225e4ec611bb99580c613a87c54e12480aa7ff8c798f71ad280f6ba69d4a4425225e4ec611bb99580c613a87c54e12480aa7ff8c798f71ad280f6ba69d4a4425225e4ec611bb99580c613a87c54e12480aa7ff8c798f71ad280f6ba69d4a4425225e4ec611bb99580c613a87c54e12480aa7ff8c798f71ad280f6ba69d4a4425225e4ec611bb99580c613a87c54e12480aa7ff8c798f71ad280f6ba69d4a4425225e4ec611bb99580c613a87c54e12480aa7ff8c798f71ad280f6ba69d4a4425225e4ec6并且得到一个AES-ECB.txt

同时能很明显观察到这个密码是重复的11bb99580c613a87c54e12480aa7ff8c798f71ad280f6ba69d4a4425225e4ec6

然后得到AES的内容是64ZpNmbv2Hg4Jj9bH8Kv6D3OBliD9hgyI3vZWfMDJs2TcEwVnBmH/zkBtPBE3g8e the key may be on your journey?

尝试用这个密码当aes的密码不对,猜测是解压顺序是从320-->1,而密码顺序是1-->320,因此需要反过来

c64e5e2225444a9da66b0f28ad718f798cffa70a48124ec5873a610c5899bb11

image-20240720222544200

DASCTF{514755c6-8280-463c-8378-a29702fc88df}

png_master

啧,做了好一会吃完饭才发现不只是02

第一段直接在图片尾,解base64,DASCTF{2fd9e9ff-e27

image-20240720130424832

第二段是在图片里,LSB隐写,column,在A上面,全通道,d-5405-c5f5-

image-20240720130504507

第三段是在多出来的IDAT块中,很明显被选中的块是多出来的块

image-20240720130547065

尝试直接zlib解压后,得到的是一个长度750500的原始数据

image-20240720130625146

发现filter第一个是01,后面都是02,就想着直接看data,结果没想到还有04之类的。根据开头的01 80 80 80 00 00……可以猜出是RGB的图像,然后计算高宽可以列个式子。每行开头有一位filter,相当于图像的每一行是由1 filter + 3*width组成的,整个文件是由(1 filter + 3* width)*highth组成的,即(1+3*w) * h == 750500,不难得出750500分解出来是750500 = 2^2 · 5^3 · 19 · 79,由于存在(1+3*w),正好能发现19 * 79 = 1501 = 500*3+1,而2^2 * 5^3 = 500,一下可以得到长宽均是500。

这里就有了一个简单的做法,使用tweakpng,删除前面的IDAT

image-20240720131146878

然后修改高宽为500,truecolor(RGB)

image-20240720131231811

image-20240720131244368

最后得到flag:DASCTF{2fd9e9ff-e27d-5405-c5f5-a19131f86216}

*ServerMeM

刚开始是这样的(在WSL里以下我未成功):

第一步是找版本python3 ~/volatility3/vol.py -f out.lime banners.Banners

0x6be001a0      Linux version 5.4.27 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)) #1 SMP Sun May 26 03:37:06 EDT 2024
0x6ca73554 Linux version 5.4.27 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)) #1 SMP Sun May 26 03:37:06 EDT 2024
0x6db8a060 Linux version 5.4.27 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)) #1 SMP Sun May 26 03:37:06 EDT 2024

然后下载指定的版本

wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.4.27.tar.xz
tar -xf linux-5.4.27.tar.xz
cd linux-5.4.27

安装需要编译的工具

sudo apt-get update
sudo apt-get install -y build-essential libssl-dev libelf-dev dwarfdump

编译内核

make olddefconfig
make -j$(nproc)

尝试生成module.dwarf

dwarfdump -di vmlinux > module.dwarf

但是一直是没有生成vmlinux文件。接着就尝试去装个虚拟机然后再编译这个内核,反正闲着没事然后编了一个小时

然后在编译完内核后加了这几条

sudo make modules_install
sudo make install
sudo update-grub
sudo reboot

重启后看一下

uname -r

完整安装

sudo apt update
sudo apt upgrade -y
sudo apt install build-essential libncurses-dev bison flex libssl-dev libelf-dev dwarfdump zip -y
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.4.27.tar.xz
tar -xvf linux-5.4.27.tar.xz
cd linux-5.4.27
cp /boot/config-$(uname -r) .config
make menuconfig
make -j$(nproc) CFLAGS_KERNEL="-g"
sudo make modules_install
sudo make install
sudo update-grub
sudo reboot
uname -r

嘻嘻,虚拟机里面的ubuntu出问题了,重新在不用的服务器里弄,时间来不及做题了。

image-20240720174343213

image-20240720191712559

......不做了,总之步骤就是:

找内核信息-->自创虚拟机更换内核-->生成dwarf与system.map制作profile-->放至vol的plugins目录下-->使用该profile进行取证,可以看看这篇文章:https://r0fus0d.blog.ffffffff0x.com/post/memory-forensics/#linux-profile,题目后面的内容就没去看了。

Reverse

DosSnake

注意到103D5中的这一段

seg002:0259 loc_105D9:
seg002:0259 mov cx, 20h ; ' '
seg002:025C lea si, aDasctf+6
seg002:0260 lea di, aDasctf
seg002:0264
seg002:0264 loc_105E4:
seg002:0264 mov al, [si]
seg002:0266 xor al, [di]
seg002:0268 mov [si], al
seg002:026A inc si
seg002:026B inc di
seg002:026C cmp di, 32Ah
seg002:0270 jnz short loc_105F6
seg002:0272 lea di, aDasctf
seg002:0276
seg002:0276 loc_105F6:
seg002:0276 loop loc_105E4
seg002:0278 lea si, aDasctf+6
seg002:027C
seg002:027C loc_105FC:
seg002:027C mov al, [si]
seg002:027E cmp al, 0
seg002:0280 jz short locret_10609
seg002:0282 mov ah, 0Eh
seg002:0284 int 10h
seg002:0286 inc si
seg002:0287 jmp short loc_105FC

然后注意到DASCTF那一段的值3F 09 63 34 32 13 2A 2F 2A 37 3C 23 00 2E 20 10 3A 27 2F 24 3A 30 75 67 65 3C

与DASCTF进行异或操作

image-20240720113926087

提交H0wfUnnytheDosSnakeis!!!即可

Crypto

complex_enc

问的GPT

from Crypto.Util.number import *
import ast

def read_output_file(file_path):
with open(file_path, 'r') as f:
content = f.read().strip().split('\n')
c = int(content[0].strip())
key = ast.literal_eval(content[1].strip())
return c, key

def dec(c, key):
m = [0] * (len(key) - 1)
for i in range(len(key) - 1, 0, -1):
if c >= key[i]:
m[i - 1] = 1
c -= key[i]
return m

def bits_to_bytes(bits):
byte_list = [bits[i:i+8] for i in range(0, len(bits), 8)]
byte_values = [int(''.join(map(str, byte)), 2) for byte in byte_list]
return bytes(byte_values)

if __name__ == "__main__":
c, key = read_output_file('output.txt')
m_bits = dec(c, key)
print(''.join(str(i) for i in m_bits))

然后发现没有开头的0,手动补一个0

image-20240720114629794

DASCTF{you_kn0w_b@ckpack_Crypt0?}

DK盾云服务器