BUU NewStarCTF week1-week4赛后复现

1-1.Yesec no drumsticks 1

1.得到一张png,根据题目名称,猜测是LSB隐写,直接用kali上的zsteg跑一下

zsteg -a 1.png

image

2.得到flag

flag{Yesec_1s_lsb}

1-2.qsdz's girlfriend 1

1.得到一个zip,真加密,查看注释,发现了密码的提示

image

2.根据常识,猜测密码就是八位有效数字,直接用ARCHPR爆破

image

3.得到密码,打开,得到girlfriend,Google识图,找一下叫什么

image

4.根据题目中flag的形式,得到flag

flag{Hikari_20031201}

1-3.Look my eyes

1.得到一张png,根据提示,猜测使用silenteye

image

2.decode得到密文,base64在线解码,得到flag

image

flag{L0ok_m3_1n_my_ey3s}

1-4.EzSnake

1.得到一个java写的小游戏,有两种办法,一种直接打通关,一种通过特殊方法,我是后者

2.根据题意,得知就是总分达到114后会出现想要的东西,使用jadx反编译游戏,得到源码文件,找关键点,即为分数大于114后的判断

image

3.可以看到,简单来说就是当score大于114时,会从statics的1919810找到一个名为114514的文件,并将文件进行逐位与十进制的88进行异或,那就手动模拟一下,建议直接使用010 Editor(使用winrar可以直接把jar文件拆了)

image
image

4.得到的是一个png,可以直接看到是缺少了定位点的二维码

image

5.补全定位点,QR扫描

image

6.得到密文,base64解码,得到flag

image

flag{Y0u_4re_0ne_oNe_0nE_st4R}

1-5.奇怪的音频

1.得到一个wav文件,使用qsstv可以得到音频中隐藏的png

image

2.如出现报错,可以借鉴下面的大佬的文章,更改一下qsstv的配置

https://www.srcmini.com/62326.html#heading_4

3.得到flag

flag{SSTV_and_R0b0t36}

2-1.Yesec no drumsticks 2

1.得到一个txt,发现就是一段话,首先猜测零宽度字符隐写,随便点击一列,发现实际的列数远大于显示出文字的列数

image

2.使用解码网站

http://330k.github.io/misc_tools/unicode_steganography.html

3.得到其中隐藏的密文,首先base58解码,得到十六进制字符串

image

4.使用010直接转换,得到flag

image

flag{Ingr3d1ent_0F_Yesec_i5_OOOOO}

2-2.Coldwinds's Desktop

1.得到的一个文件夹中有114张png,猜测就是一张png被横纵各分为十二份,首先使用脚本把png重命名一下

点击查看代码
import os
 
# 批量重命名文件夹中的图片文件
class BatchRename():
    def __init__(self, file_path):
        self.path = file_path
 
    def rename(self):
        filelist = os.listdir(self.path)
        total_num = len(filelist)  # 获取文件夹内所有文件个数
        i = 1  # 表示文件的命名是从1开始的
        for item in filelist:
            if item.endswith('.PNG'):
                # 初始的图片的格式为png格式的
                src = os.path.join(os.path.abspath(self.path), item)
                dst = os.path.join(os.path.abspath(self.path), str(i) + '.png')
                try:
                    os.rename(src, dst)
                    print('converting %s to %s ...' % (src, dst))
                    i = i + 1
                except:
                    continue
        print('total %d to rename & converted %d jpgs' % (total_num, i))
 
 
if __name__ == '__main__':
    file_path = "./"  # 需要处理的文件路径
    demo = BatchRename(file_path)
    demo.rename()

2.使用ImageMagick

https://imagemagick.org/script/download.php#windows

或者kali的montage也可以),到拼接目录下,打开cmd,使用命令,得到乱序拼接后的png

magick montage *.png -tile 10x10 -geometry +0+0 flag.png

image

3.使用gaps

https://github.com/nemanja-m/gaps

得到的图片上就有flag,可以多换几个参数试试,使用gaps时建议把png放到bin目录下的gaps文件夹中

python3 gaps  --image=flag.png --size=30 --population=144 --generations=64 --save

image

4.得到flag

 flag{Y0u_successfu11y_s01ved_the_puzz1e}

2-3.奇怪的二维码

1.得到一张码,010查看文件,在文件尾发现了另一个png

image

2.直接手撕另存,得到一张阿兹特克的介绍

image

3.png本身没有发现问题,上网查了一下阿兹特克,发现Aztec码就叫阿兹特克码,补全给的图片中的定位点

image

4.使用网站扫码

https://zxing.org/w/decode.jspx
image

5.得到flag

flag{Aztec_from_Age_0f_Empires}

2-4.qsdz's girlfriend 2

1.得到一张png,首先,根据像素,就觉得这张png是被处理过的,所以说的字肯定不是现在显示出来的字,png上面的十六进制拼起来

image

2.上网找一下arnold是什么意思,发现是一种加密算法,直接使用脚本解密

点击查看代码
import cv2
import numpy as np
import matplotlib.image as mpimg
def arnold_decode(imgfile, outfile, shuffle_times, a, b):
    image= cv2.imread(imgfile)
    decode_image = np.zeros(image.shape, np.uint8)
    h, w = image.shape[0], image.shape[1]
    N = h
    for time in range(shuffle_times):
        for ori_x in range(h):
            for ori_y in range(w):
                new_x = ((a * b + 1) * ori_x + (-b) * ori_y) % N
                new_y = ((-a) * ori_x + ori_y) % N
                decode_image[new_x, new_y, :] = image[ori_x, ori_y, :]

    cv2.imwrite(outfile, decode_image)
    print("得到图片:" + outfile)

arnold_decode("girlfriend.png","girlfriend.png",0x61,0x726e,0x6f6c64)

3.得到的图片上的文字就是flag

flag{按理说这个点猪也该醒了}

image

2-5.奇怪的波形

1.首先得到两个文件,分别是加密脚本和通过脚本得到的波形图,首先分析一下脚本,可以看到其中的key就是我们要最后求得的flag

image

2.分析一下脚本,可以看出,循环一共16次,图中一共32个波段,那就是每运行一次,会出现两个波段

image

3.再看一下脚本首先会运行

tmp = S * S;
S = tmp % N;

然后根据判断,如果key[i] == 1,那就会出现一个新参数m,即新的长度的波;如果key[i] == 0,那就还是和判断前先画的波长相等

tmp = S * m;
S = tmp % N;

4.那就可以根据一组波长是否相等来判断key是0还是1

flag{0010001001100111}

3-1.Whats HTTP

1.给出的是流量,没有什么特别的标志,直接TCP流一条一条地过,在第30流发现一段编码

image

2.base64解码,得到十六进制字符串,010转一下,得到flag

image
image

3-2.qsdz's girlfriend 3

1.根据提示,使用Xshell连接到靶机

image
image

2.但因为是赛后复现,不知为什么连接不到靶机了

3.简单来说,思路就是连接到后使用ls命令,会看到一个flag,直接cat会提示权限不够,使用题目中给出的用户名和密码登录,会显示是低权用户,访问/etc/passwd,手动创造一个root用户,就是手动提权,使用自己创的root永辉,就可以获得flag了

3-3.WebShell!

1.根据提示,猜测是蚁剑流量,可以参考博客

https://www.csdn.net/tags/Ntjakg3sODQ3NjktYmxvZwO0O0OO0O0O.html#:~:text=由于蚁剑中包含了,蚁剑的流量特征。

2.直接搜索关键词ini_set,追踪http流,就可以发现关键信息了

image
image
image

3.拼起来,得到flag

flag{n3wst4r_www-data_Y0UAr3G00D}

3-4.Yesec no drumsticks 3

3-4-1.first.zip

1.得到无类型文件和一个txt,txt看了一下,发现列数与显示大小不同,猜测是零宽度隐写,使用网站看了一下字符类型

image

2.使用在线解密网站

http://330k.github.io/misc_tools/unicode_steganography.html
image
image

3.010查看flag,根据文件头,发现是7z文件,改后缀为7z,得到另外一个无类型文件

image

4.010打开,文件头提示ZIP,改后缀为zip,得到另外一个文件

image

5.file使用一下,得知是zip,改后缀为zip,又得到一个文件,猜测可能是套娃,就直接用脚本改后缀,解压,最后会得到一个secret.jpg(手动解压也可)

image

6.binwalk一下,发现jpg什么都没有,再回去看最后一个zip包,在末尾发现base64

image

7.在线解码,得到flag

image

3-5.混沌的图像

1.010查看文件头,PK,改后缀为zip

image

2.解压zip,得到一张png,010打开,发现IDAT块特别多,猜测有什么东西隐藏了

image

3.打开提示,一段base64,在线解码,得到了一段脚本

image

点击查看代码
img = Image.open('flag.png')
w,h=img.size
for i in range(w):
    for j in range(h):
    (r, g, b, a) = img.getpixel((i,j))
    pic.append(r)
    pic.append(g)
    pic.append(b)

4.用zsteg跑一下png,发现隐藏的png信息

image

5.用Stegsolve打开,在全0通道发现png源码,save bin,得到png,010打开,在文件尾发现一组与png无关的数据

image
image

k1=3.5606267076894413
k2=3.9101741242346346
k=[106,80,198,220,47,18,19,230,42,202,207,196,214,132,188,190]

6.根据题目提示,猜测解密脚本与之前的某道题有关,是week1的CRYPTO的chaos,对比一下密码题给出的加密原码

" 听说之前考过LSB,那你还记得那道密码题吗?"

image

7.那么之前base64解码后得到的代码就是解密脚本的一部分,和密码的那个解密脚本综合一下

点击查看代码
from PIL import Image

def LC(key, x, times, flags):
    (k1, k2) = key
    xn = []
    xn.append(x)
    if flags:
        xn.append(1 - 2 * xn[0]**2)
    else:
        xn.append(k2 * xn[0]**3 + (1 - k2)*xn[0])
    for i in range(times):
        assert xn[i]>=-1 and xn[i]<=1 and xn[i+1]>=-1 and xn[i+1]<=1
        if flags:
            xn.append((1 - 2 * xn[i]**2)*(k1 * xn[i+1]**3 + (1 - k1)*xn[i+1]))
        else:
            xn.append((k2 * xn[i]**3 + (1 - k2)*xn[i])*(1 - 2 * xn[i+1]**2))
    return xn[times + 1]
z = 0
r = 1
k1=3.5606267076894413
k2=3.9101741242346346
k=[106,80,198,220,47,18,19,230,42,202,207,196,214,132,188,190]

for i in k:
    z += i
    r ^= i
a_1 = (z / 256) % 1
tmp_a = 3 + int(1000 * a_1) % 30
b_1 = (r / 256)
tmp_b = 3 + int(1000 * b_1) % 30
xc_1 = a_1 * b_1
yc_1 = (a_1 * b_1) % 1
data = (a_1,tmp_a,b_1,tmp_b,xc_1,yc_1)
key = (k1,k2)
m,c,tmp_l1,tmp_l2 = [],[],[],[]
ta = tmp_a
tb = tmp_b

img = Image.open('1.png').convert('RGBA')
w,h=img.size
for i in range(w):
    for j in range(h):
        (r, g, b, a) = img.getpixel((i,j))
        # 获取像素值
        c.append(r)
        c.append(g)
        c.append(b)

for flag in c:
    tmp_l1.append(LC(key,a_1,ta,1))
    tmp_l2.append(LC(key,b_1,tb,0))
    m.append(((int(tmp_l1[-1] * 1000) + int(tmp_l2[-1] * 1000)) % 256) ^ flag)
    delta = flag / 256
    for i in range(3):
        y = (yc_1 + delta) % 1
        y = k1 * y ** 3 + (1 - k1) * y
        x = xc_1
        x = k2 * x ** 3 + (1 - k2) * x
    ta = 3 + int(1000 * x) % 30
    tb = 3 + int(1000 * y) % 30

n = 0
for i in range(w):
    for j in range(h):
        img.putpixel((i,j),(m[n],m[n + 1],m[n + 2]))
        n = n + 3

img.save("flag.png","png")
print("OK")
img.show("flag.png")

8.然后将得到的png用Stegsolve打开,在0通道就可以看到flag

image

4-1.奇怪的PDF

1.首先得到一个无法打开的pdf,010查看,发现缺少文件头,补全

image

2.使用wbStego,无密码,得到flag

image

4-2.Yesec no drumsticks 4

1.下载得到一个png,提示中有一个脚本,可以看出,png就是脚本加密后的产物

image

2.可以看出,png的像素中潜在这flag的值,直接使用脚本提取

点击查看代码
from PIL import Image
import numpy as np

with open('./2.txt') as f :
    L_path = './yellow_pictrue.png'
    L_image = Image.open(L_path)

    width, height = L_image.size
    for h in range(height):
        for w in range(width):
            b = L_image.getpixel((w, h))[2]
            print(chr(b),end=" ")

3.在输出中就可以找到flag

image

flag{Yesec_deCid3s_t0_ch4nge_7he_fate_of_the_world_against_the_odds}

4-3.还是流量分析

1.下载后得到的就是一个流量,感觉名字很有意思,查了一下是哥斯拉

image

2.再观察一下流量,发现大部分tcp流都有ctfsogood这部分内容,与哥斯拉流量特征相似,关于哥斯拉流量可以看一下以下这两篇文章

https://www.freebuf.com/sectool/285693.html
https://blog.csdn.net/u011250160/article/details/120501033

3.key在ctfsogood的参数中就可以找到,在第35流中可以找到secret的内容,参考一下前面博客中大佬的脚本,找一个在线网站运行,得到正确内容

image
image

flag{421eb7f1b8e4b3cf_Godzilla1sS000Int3rEstIng}

4-4.qsdz's girlfriend 4

1.得到一个密文,一个txt,一个png,密文没看懂,先用kali看一下png是否有问题,用pngcheck显示CRC错误,改一下宽高,得到图片上完整的文字

image
image

2.谷歌识图一下girlfrie.png,显示是魔女之旅

image

3.猜测密文与魔女之旅有关(因为不太可能给没有用的文件),上网找了一下,找到了一个魔女之旅文字,对照翻译一下

image
image

4.得知可以使用malbolge,上网查一下是什么,得知是一个编程语言,上网找一下有没有专用的编译器

https://malbolge.doleczek.pl/
image

5.得到flag

flag{Esol4ng_1s_es0}

4-5不奇怪的二维码

1.得到一个zip包,根据观察,感觉是一个游戏的文件源码,查找一下哪个游戏的源码文件中含有poi文件夹(因为觉得这个名字比较特殊),找到了是我的世界的存档文件,关于存档文件的格式可以看一下这个文章

https://www.bilibili.com/read/cv15742782

2.使用文章中提到的网站,upload一下zip包

image

3.点击下面的start upload,点击source version,点击下面的advanced mode,就可以得到地图

image

4.在地图上就有一个二维码

image

5.扫码后就可以得到flag

flag{1_1ik3_p1aying_Min3craft}

image

posted @ 2022-10-22 21:11  CPYQY_orz  阅读(1048)  评论(0编辑  收藏  举报